/ src / modules / cmdpal / ext / Microsoft.CmdPal.Ext.PowerToys / Modules / AwakeModuleCommandProvider.cs
AwakeModuleCommandProvider.cs
1 // Copyright (c) Microsoft Corporation 2 // The Microsoft Corporation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 using System; 6 using System.Collections.Generic; 7 using Awake.ModuleServices; 8 using Common.UI; 9 using Microsoft.CommandPalette.Extensions.Toolkit; 10 using PowerToysExtension.Commands; 11 using PowerToysExtension.Helpers; 12 using PowerToysExtension.Pages; 13 using PowerToysExtension.Properties; 14 15 namespace PowerToysExtension.Modules; 16 17 internal sealed class AwakeModuleCommandProvider : ModuleCommandProvider 18 { 19 public override IEnumerable<ListItem> BuildCommands() 20 { 21 var items = new List<ListItem>(); 22 var module = SettingsDeepLink.SettingsWindow.Awake; 23 var title = module.ModuleDisplayName(); 24 var icon = PowerToysResourcesHelper.IconFromSettingsIcon("Awake.png"); 25 var moduleIcon = module.ModuleIcon(); 26 27 items.Add(new ListItem(new OpenInSettingsCommand(module, title)) 28 { 29 Title = title, 30 Subtitle = Resources.Awake_Settings_Subtitle, 31 Icon = moduleIcon, 32 }); 33 34 if (!ModuleEnablementService.IsModuleEnabled(module)) 35 { 36 return items; 37 } 38 39 // Direct commands surfaced in the PowerToys list page. 40 ListItem? statusItem = null; 41 Action refreshStatus = () => 42 { 43 if (statusItem is not null) 44 { 45 statusItem.Subtitle = AwakeStatusService.GetStatusSubtitle(); 46 } 47 }; 48 49 var refreshCommand = new RefreshAwakeStatusCommand(refreshStatus); 50 51 statusItem = new ListItem(new CommandItem(refreshCommand)) 52 { 53 Title = Resources.Awake_Status_Title, 54 Subtitle = AwakeStatusService.GetStatusSubtitle(), 55 Icon = icon, 56 }; 57 items.Add(statusItem); 58 59 items.Add(new ListItem(new StartAwakeCommand(Resources.Awake_KeepIndefinite_Title, () => AwakeService.Instance.SetIndefiniteAsync(), Resources.Awake_SetIndefinite_Toast, refreshStatus)) 60 { 61 Title = Resources.Awake_KeepIndefinite_Title, 62 Subtitle = Resources.Awake_KeepIndefinite_Subtitle, 63 Icon = icon, 64 }); 65 items.Add(new ListItem(new StartAwakeCommand(Resources.Awake_Keep30Min_Title, () => AwakeService.Instance.SetTimedAsync(30), Resources.Awake_Set30Min_Toast, refreshStatus)) 66 { 67 Title = Resources.Awake_Keep30Min_Title, 68 Subtitle = Resources.Awake_Keep30Min_Subtitle, 69 Icon = icon, 70 }); 71 items.Add(new ListItem(new StartAwakeCommand(Resources.Awake_Keep1Hour_Title, () => AwakeService.Instance.SetTimedAsync(60), Resources.Awake_Set1Hour_Toast, refreshStatus)) 72 { 73 Title = Resources.Awake_Keep1Hour_Title, 74 Subtitle = Resources.Awake_Keep1Hour_Subtitle, 75 Icon = icon, 76 }); 77 items.Add(new ListItem(new StartAwakeCommand(Resources.Awake_Keep2Hours_Title, () => AwakeService.Instance.SetTimedAsync(120), Resources.Awake_Set2Hours_Toast, refreshStatus)) 78 { 79 Title = Resources.Awake_Keep2Hours_Title, 80 Subtitle = Resources.Awake_Keep2Hours_Subtitle, 81 Icon = icon, 82 }); 83 items.Add(new ListItem(new StopAwakeCommand(refreshStatus)) 84 { 85 Title = Resources.Awake_TurnOff_Title, 86 Subtitle = Resources.Awake_TurnOff_Subtitle, 87 Icon = icon, 88 }); 89 90 return items; 91 } 92 }