Files
voice-cat/clients/apple/VoiceCat.Mac/PrivateMessageWindowController.cs
Talon 08e6c5930a
Build and test / test (macos-latest) (push) Canceled after 0s
Build and test / test (ubuntu-24.04) (push) Canceled after 0s
Build and test / test (windows-latest) (push) Canceled after 0s
Build and test / apple-client (push) Canceled after 0s
Retire legacy implementations and flatten managed layout
2026-09-21 00:11:32 +02:00

44 lines
2.2 KiB
C#

using AppKit;
using CoreGraphics;
using VoiceCat.Core;
using Voicecat.V1;
namespace VoiceCat.Mac;
internal sealed class PrivateMessageWindowController : NSWindowController
{
private readonly VoiceCatClient client;
private readonly uint otherUserId;
private readonly uint selfId;
private readonly NSTextView transcript = new(new CGRect(0, 0, 430, 300)) { Editable = false, Selectable = true };
private readonly NSTextField compose = new(new CGRect(20, 20, 350, 28)) { PlaceholderString = "Private message" };
internal PrivateMessageWindowController(VoiceCatClient client, uint otherUserId, uint selfId, string nickname) : base(new NSWindow(
new CGRect(0, 0, 480, 400), NSWindowStyle.Titled | NSWindowStyle.Closable | NSWindowStyle.Resizable,
NSBackingStore.Buffered, false))
{
this.client = client; this.otherUserId = otherUserId; this.selfId = selfId;
Window!.Title = $"Private message — {nickname}"; Window.Center();
NSView view = Window.ContentView!;
var scroll = new NSScrollView(new CGRect(20, 65, 440, 315)) { DocumentView = transcript, HasVerticalScroller = true };
scroll.AccessibilityLabel = $"Private conversation with {nickname}"; view.AddSubview(scroll);
((INSAccessibility)compose).AccessibilityLabel = $"Message to {nickname}"; compose.Activated += Send; view.AddSubview(compose);
var button = new NSButton(new CGRect(380, 18, 80, 32)) { Title = "Send" }; button.Activated += Send; view.AddSubview(button);
}
private void Send(object? sender, EventArgs args)
{
string value = compose.StringValue.Trim(); if (value.Length == 0) return;
client.Send(new() { TextMessage = new() { Scope = TextScope.TextPrivate, TargetId = otherUserId, Body = value, ClientMsgId = Guid.NewGuid().ToString("N") } });
compose.StringValue = "";
}
internal void Append(TextMessage message, string sender)
{
string line = $"[{DateTime.Now:t}] {(message.SenderId == selfId ? "You" : sender)}: {message.Body}";
transcript.Value = transcript.Value.Length == 0 ? line : transcript.Value + "\n" + line;
transcript.ScrollRangeToVisible(new Foundation.NSRange(transcript.Value.Length, 0));
Window?.MakeKeyAndOrderFront(this);
}
}