using WirelessTextSyncer.Windows.Models; namespace WirelessTextSyncer.Windows.Services; public sealed class SyncMessageHandler { private readonly IKeyboardInjectionService keyboard; private readonly IAudioControlService audio; private string remoteText = string.Empty; public SyncMessageHandler(IKeyboardInjectionService keyboard, IAudioControlService audio) { this.keyboard = keyboard; this.audio = audio; } public void Handle(SyncMessage message) { switch (message.Action) { case SyncAction.InsertText: var insertedText = message.Text ?? string.Empty; keyboard.InsertText(insertedText); remoteText += insertedText; break; case SyncAction.ReplaceAll: AppendSubmittedText(message.Text ?? string.Empty); break; case SyncAction.Backspace: keyboard.Backspace(); if (remoteText.Length > 0) { remoteText = remoteText[..^1]; } break; case SyncAction.Enter: keyboard.Enter(); remoteText += Environment.NewLine; break; case SyncAction.Ping: break; case SyncAction.SetMute: HandleSetMute(message); break; default: throw new InvalidOperationException($"Unsupported sync action: {message.Action}"); } } private void HandleSetMute(SyncMessage message) { var muted = message.Muted ?? false; AppLogger.Info($"SetMute received muted={muted}."); audio.SetMute(muted); } private void AppendSubmittedText(string text) { if (string.IsNullOrEmpty(text)) { return; } AppLogger.Info($"Appending submitted text length: {text.Length}"); keyboard.InsertText(text); remoteText += text; } }