feat: prioritize finish meeting tray action
PR and Push Build/Test / build-and-test (push) Successful in 11m8s

This commit is contained in:
2026-08-04 09:55:18 +02:00
parent 5d0ae84426
commit 2f12a96688
8 changed files with 220 additions and 30 deletions
+31 -9
View File
@@ -26,7 +26,8 @@ public sealed record MeetingTaskbarMenuItem(
string? ProfileName = null,
string? MicrophoneDeviceId = null,
bool IsChecked = false,
IReadOnlyList<MeetingTaskbarMenuItem>? Items = null);
IReadOnlyList<MeetingTaskbarMenuItem>? Items = null,
bool StartsSection = false);
public static class MeetingTaskbarMenuBuilder
{
@@ -41,23 +42,29 @@ public static class MeetingTaskbarMenuBuilder
new("Open agent", MeetingTaskbarAction.EditRules)
};
if (status.IsRecording)
{
items.Add(new MeetingTaskbarMenuItem(
"Finish meeting",
MeetingTaskbarAction.StopRecording,
StartsSection: true));
}
var secondaryControls = new List<MeetingTaskbarMenuItem>();
if (microphones is { Count: > 0 })
{
items.Add(BuildMicrophoneMenu(microphones, currentMicrophoneDeviceId));
secondaryControls.Add(BuildMicrophoneMenu(microphones, currentMicrophoneDeviceId));
}
if (status.IsRecording)
{
items.Add(new MeetingTaskbarMenuItem(
"Stop meeting recording and transcribe",
MeetingTaskbarAction.StopRecording));
items.Add(new MeetingTaskbarMenuItem(
secondaryControls.Add(new MeetingTaskbarMenuItem(
"Cancel meeting recording and discard",
MeetingTaskbarAction.AbortRecording));
foreach (var profile in launchProfiles.Where(profile => !IsActiveProfile(profile, status)))
{
items.Add(new MeetingTaskbarMenuItem(
secondaryControls.Add(new MeetingTaskbarMenuItem(
AppendHotkey($"Switch to {profile.Name}", profile.Options.Hotkey.Toggle),
MeetingTaskbarAction.SwitchProfile,
profile.Name));
@@ -67,16 +74,18 @@ public static class MeetingTaskbarMenuBuilder
{
foreach (var profile in launchProfiles)
{
items.Add(new MeetingTaskbarMenuItem(
secondaryControls.Add(new MeetingTaskbarMenuItem(
AppendHotkey($"Start meeting recording ({profile.Name})", profile.Options.Hotkey.Toggle),
MeetingTaskbarAction.StartRecording,
profile.Name));
}
}
AddSection(items, secondaryControls);
items.Add(new MeetingTaskbarMenuItem(
"Exit",
MeetingTaskbarAction.Exit));
MeetingTaskbarAction.Exit,
StartsSection: true));
return new MeetingTaskbarMenu(
status.State,
@@ -102,6 +111,19 @@ public static class MeetingTaskbarMenuBuilder
Items: microphoneItems);
}
private static void AddSection(
List<MeetingTaskbarMenuItem> items,
List<MeetingTaskbarMenuItem> section)
{
if (section.Count == 0)
{
return;
}
section[0] = section[0] with { StartsSection = true };
items.AddRange(section);
}
private static string BuildTooltip(RecordingStatus status)
{
return status.State switch