Public Access
feat: prioritize finish meeting tray action
PR and Push Build/Test / build-and-test (push) Successful in 11m8s
PR and Push Build/Test / build-and-test (push) Successful in 11m8s
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -196,14 +196,12 @@ public sealed class UnoTaskbarIconService : IHostedService, IDisposable
|
||||
var popupMenu = new PopupMenu();
|
||||
for (var index = 0; index < menu.Items.Count; index++)
|
||||
{
|
||||
if (index == 1 ||
|
||||
(menu.Items[index].Action == MeetingTaskbarAction.Exit &&
|
||||
menu.Items[index - 1].Action != MeetingTaskbarAction.EditRules))
|
||||
var menuItem = menu.Items[index];
|
||||
if (index > 0 && menuItem.StartsSection)
|
||||
{
|
||||
popupMenu.Items.Add(new PopupMenuSeparator());
|
||||
}
|
||||
|
||||
var menuItem = menu.Items[index];
|
||||
popupMenu.Items.Add(BuildPopupItem(menuItem));
|
||||
}
|
||||
|
||||
@@ -290,7 +288,7 @@ public sealed class UnoTaskbarIconService : IHostedService, IDisposable
|
||||
return string.Join(
|
||||
"|",
|
||||
FlattenMenuItems(menu.Items).Select(item =>
|
||||
$"{item.Action}:{item.ProfileName}:{item.MicrophoneDeviceId}:{item.IsChecked}:{item.Text}"));
|
||||
$"{item.Action}:{item.ProfileName}:{item.MicrophoneDeviceId}:{item.IsChecked}:{item.StartsSection}:{item.Text}"));
|
||||
}
|
||||
|
||||
private static IEnumerable<MeetingTaskbarMenuItem> FlattenMenuItems(
|
||||
|
||||
Reference in New Issue
Block a user