using MeetingAssistant.LaunchProfiles; namespace MeetingAssistant.MacOs; public sealed record MacOsDesktopControlManifest( string BaseUrl, string StatusUrl, string OpenAgentUrl, IReadOnlyList Profiles, IReadOnlyList Hotkeys) { public static MacOsDesktopControlManifest Create( string baseUrl, IReadOnlyList profiles, IReadOnlyList hotkeys) { var normalizedBaseUrl = baseUrl.TrimEnd('/'); return new MacOsDesktopControlManifest( normalizedBaseUrl, $"{normalizedBaseUrl}/recording/status", $"{normalizedBaseUrl}/diagnostics/settings-and-logs", profiles .Select(profile => new MacOsDesktopProfile( profile.Name, profile.Options.Hotkey.Toggle)) .ToArray(), hotkeys.Select(CreateHotkey).ToArray()); } private static MacOsDesktopHotkey CreateHotkey(LaunchProfileHotkey hotkey) { var endpoint = hotkey.Action switch { LaunchProfileHotkeyAction.ToggleRecording => "recording/toggle", LaunchProfileHotkeyAction.AbortRecording => "recording/abort", LaunchProfileHotkeyAction.CaptureScreenshot => "meetings/screenshot/capture", _ => throw new ArgumentOutOfRangeException(nameof(hotkey)) }; return new MacOsDesktopHotkey( hotkey.Hotkey, $"/profiles/{Uri.EscapeDataString(hotkey.ProfileName)}/{endpoint}"); } } public sealed record MacOsDesktopProfile(string Name, string ToggleShortcut); public sealed record MacOsDesktopHotkey(string Shortcut, string Endpoint);