/ 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  }