Skip to content

Commit 94a699d

Browse files
committed
Working on DI
1 parent fa4bc0a commit 94a699d

File tree

8 files changed

+49
-45
lines changed

8 files changed

+49
-45
lines changed

src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandPaletteHost.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ public sealed partial class CommandPaletteHost : AppExtensionHost, IExtensionHos
1414

1515
private readonly ICommandProvider? _builtInProvider;
1616

17+
public CommandPaletteHost(ILogger logger)
18+
: base(logger)
19+
{
20+
}
21+
1722
public CommandPaletteHost(IExtensionWrapper source, ILogger logger)
1823
: base(logger)
1924
{

src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/MainListPage.cs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,16 @@
66
using System.Collections.Specialized;
77
using System.Diagnostics;
88
using CommunityToolkit.Mvvm.Messaging;
9-
using ManagedCommon;
109
using Microsoft.CmdPal.Common.Helpers;
1110
using Microsoft.CmdPal.Ext.Apps;
1211
using Microsoft.CmdPal.Ext.Apps.Programs;
1312
using Microsoft.CmdPal.Ext.Apps.State;
1413
using Microsoft.CmdPal.UI.ViewModels.Commands;
1514
using Microsoft.CmdPal.UI.ViewModels.Messages;
1615
using Microsoft.CmdPal.UI.ViewModels.Properties;
17-
using Microsoft.CmdPal.UI.ViewModels.Services;
1816
using Microsoft.CommandPalette.Extensions;
1917
using Microsoft.CommandPalette.Extensions.Toolkit;
18+
using Microsoft.Extensions.Logging;
2019

2120
namespace Microsoft.CmdPal.UI.ViewModels.MainPage;
2221

@@ -28,6 +27,7 @@ public partial class MainListPage : DynamicListPage,
2827
IRecipient<ClearSearchMessage>,
2928
IRecipient<UpdateFallbackItemsMessage>, IDisposable
3029
{
30+
private readonly ILogger _logger;
3131
private readonly TopLevelCommandManager _tlcManager;
3232
private readonly AliasManager _aliasManager;
3333
private readonly SettingsService _settingsService;
@@ -52,12 +52,18 @@ public partial class MainListPage : DynamicListPage,
5252

5353
private AppStateModel AppState => _appStateService.CurrentSettings;
5454

55-
public MainListPage(TopLevelCommandManager topLevelCommandManager, SettingsService settingsService, AliasManager aliasManager, AppStateService appStateService)
55+
public MainListPage(
56+
TopLevelCommandManager topLevelCommandManager,
57+
SettingsService settingsService,
58+
AliasManager aliasManager,
59+
AppStateService appStateService,
60+
ILogger logger)
5661
{
5762
Title = Resources.builtin_home_name;
5863
Icon = IconHelpers.FromRelativePath("Assets\\StoreLogo.scale-200.png");
5964
PlaceholderText = Properties.Resources.builtin_main_list_page_searchbar_placeholder;
6065

66+
_logger = logger;
6167
_settingsService = settingsService;
6268
_aliasManager = aliasManager;
6369
_appStateService = appStateService;
@@ -140,7 +146,7 @@ private void RunRefreshLoop()
140146
}
141147
catch (Exception e)
142148
{
143-
Logger.LogError("Failed to reload search", e);
149+
Log_SearchReloadFailed(e);
144150
}
145151
finally
146152
{
@@ -438,7 +444,7 @@ public override void UpdateSearchText(string oldSearch, string newSearch)
438444
RaiseItemsChanged();
439445

440446
timer.Stop();
441-
Logger.LogDebug($"Filter with '{newSearch}' in {timer.ElapsedMilliseconds}ms");
447+
Log_FilterCompleted(newSearch, timer.ElapsedMilliseconds);
442448
}
443449
}
444450

@@ -637,4 +643,10 @@ public void Dispose()
637643
WeakReferenceMessenger.Default.UnregisterAll(this);
638644
GC.SuppressFinalize(this);
639645
}
646+
647+
[LoggerMessage(Level = LogLevel.Error, Message = "Failed to reload search results")]
648+
partial void Log_SearchReloadFailed(Exception ex);
649+
650+
[LoggerMessage(Level = LogLevel.Debug, Message = "Filter completed for '{searchText}' in {elapsedMs}ms")]
651+
partial void Log_FilterCompleted(string searchText, long elapsedMs);
640652
}

src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ShellViewModel.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -276,9 +276,9 @@ private void PerformCommand(PerformCommandMessage message)
276276
// Telemetry: Track extension page navigation for session metrics
277277
if (host is not null)
278278
{
279-
string extensionId = host.GetExtensionDisplayName() ?? "builtin";
280-
string commandId = command?.Id ?? "unknown";
281-
string commandName = command?.Name ?? "unknown";
279+
var extensionId = host.GetExtensionDisplayName() ?? "builtin";
280+
var commandId = command?.Id ?? "unknown";
281+
var commandName = command?.Name ?? "unknown";
282282
WeakReferenceMessenger.Default.Send<TelemetryExtensionInvokedMessage>(
283283
new(extensionId, commandId, commandName, true, 0));
284284
}
@@ -355,10 +355,10 @@ private void SafeHandleInvokeCommandSynchronous(PerformCommandMessage message, I
355355
// Telemetry: Track command execution time and success
356356
var stopwatch = System.Diagnostics.Stopwatch.StartNew();
357357
var command = message.Command.Unsafe;
358-
string extensionId = host?.GetExtensionDisplayName() ?? "builtin";
359-
string commandId = command?.Id ?? "unknown";
360-
string commandName = command?.Name ?? "unknown";
361-
bool success = false;
358+
var extensionId = host?.GetExtensionDisplayName() ?? "builtin";
359+
var commandId = command?.Id ?? "unknown";
360+
var commandName = command?.Name ?? "unknown";
361+
var success = false;
362362

363363
try
364364
{

src/modules/cmdpal/Microsoft.CmdPal.UI/App.xaml.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
using Microsoft.CmdPal.UI.Settings;
3030
using Microsoft.CmdPal.UI.ViewModels;
3131
using Microsoft.CmdPal.UI.ViewModels.BuiltinCommands;
32+
using Microsoft.CmdPal.UI.ViewModels.MainPage;
3233
using Microsoft.CmdPal.UI.ViewModels.Services;
3334
using Microsoft.CommandPalette.Extensions;
3435
using Microsoft.Extensions.DependencyInjection;
@@ -130,8 +131,10 @@ private void AddCoreServices(ServiceCollection services)
130131
{
131132
// Core services
132133
// services.AddSingleton<IExtensionService, WinRTExtensionService>();
134+
// services.AddSingleton<IExtensionService, BuiltInExtensionService>();
133135
services.AddSingleton<IRunHistoryService, RunHistoryService>();
134136

137+
services.AddSingleton<AppExtensionHost, CommandPaletteHost>();
135138
services.AddSingleton<IRootPageService, PowerToysRootPageService>();
136139
services.AddSingleton<IAppHostService, PowerToysAppHostService>();
137140
services.AddSingleton<ITelemetryService, TelemetryForwarder>();
@@ -155,6 +158,7 @@ private void AddCoreServices(ServiceCollection services)
155158
// Windows & Pages
156159
services.AddSingleton<MainWindow>();
157160
services.AddSingleton<SettingsWindow>();
161+
services.AddSingleton<MainListPage>();
158162
services.AddSingleton<ShellPage>();
159163
services.AddTransient<ListPage>();
160164
services.AddTransient<GeneralPage>();

src/modules/cmdpal/Microsoft.CmdPal.UI/MainWindow.xaml.cs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ public sealed partial class MainWindow : WindowEx,
7777
private readonly ILogger _logger;
7878
private readonly SettingsService _settingsService;
7979
private readonly TrayIconService _trayIconService;
80-
private readonly IEnumerable<IExtensionService> _extensionServices;
8180
private bool _ignoreHotKeyWhenFullScreen = true;
8281
private bool _themeServiceInitialized;
8382

@@ -105,14 +104,12 @@ public MainWindow(
105104
SettingsService settingsService,
106105
TrayIconService trayIconService,
107106
LocalKeyboardListener localKeyboardListener,
108-
IEnumerable<IExtensionService> extensionServices,
109107
ShellPage shellPage,
110108
ILogger logger)
111109
{
112110
InitializeComponent();
113111
_logger = logger;
114112
_trayIconService = trayIconService;
115-
_extensionServices = extensionServices;
116113

117114
ViewModel = mainWindowViewModel;
118115

@@ -750,11 +747,6 @@ internal void MainWindow_Closed(object sender, WindowEventArgs args)
750747
_settingsService.SaveSettings(settings);
751748
}
752749

753-
foreach (var extensionService in _extensionServices)
754-
{
755-
extensionService.SignalStopExtensionsAsync();
756-
}
757-
758750
_trayIconService.Destroy();
759751

760752
// WinUI bug is causing a crash on shutdown when FailFastOnErrors is set to true (#51773592).

src/modules/cmdpal/Microsoft.CmdPal.UI/Pages/ShellPage.xaml.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ public void Receive(NavigateToPageMessage message)
204204
// Also hide our details pane about here, if we had one
205205
HideDetails();
206206

207+
207208
// Navigate to the appropriate host page for that VM
208209
RootFrame.Navigate(
209210
message.Page switch

src/modules/cmdpal/Microsoft.CmdPal.UI/PowerToysAppHostService.cs

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,16 @@ namespace Microsoft.CmdPal.UI;
1111

1212
internal sealed class PowerToysAppHostService : IAppHostService
1313
{
14-
private readonly AppExtensionHost _defaultHost;
14+
private readonly AppExtensionHost _defaultAppExtensionHost;
1515

16-
public PowerToysAppHostService(ILogger logger)
16+
public PowerToysAppHostService(AppExtensionHost appExtensionHost, ILogger logger)
1717
{
18-
// Create a minimal default host for cases where no specific command host is available
19-
_defaultHost = new DefaultAppExtensionHost(logger);
18+
_defaultAppExtensionHost = appExtensionHost;
2019
}
2120

2221
public AppExtensionHost GetDefaultHost()
2322
{
24-
return _defaultHost;
23+
return _defaultAppExtensionHost;
2524
}
2625

2726
public AppExtensionHost GetHostForCommand(object? context, AppExtensionHost? currentHost)
@@ -32,16 +31,6 @@ public AppExtensionHost GetHostForCommand(object? context, AppExtensionHost? cur
3231
topLevelHost = topLevelViewModel.ExtensionHost;
3332
}
3433

35-
return topLevelHost ?? currentHost ?? _defaultHost;
36-
}
37-
38-
private sealed class DefaultAppExtensionHost : AppExtensionHost
39-
{
40-
public DefaultAppExtensionHost(ILogger logger)
41-
: base(logger)
42-
{
43-
}
44-
45-
public override string? GetExtensionDisplayName() => "CmdPal";
34+
return topLevelHost ?? currentHost ?? _defaultAppExtensionHost;
4635
}
4736
}

src/modules/cmdpal/Microsoft.CmdPal.UI/PowerToysRootPageService.cs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,32 +12,33 @@
1212
using Windows.Win32.Foundation;
1313
using WinRT;
1414

15-
// To learn more about WinUI, the WinUI project structure,
16-
// and more about our project templates, see: http://aka.ms/winui-project-info.
1715
namespace Microsoft.CmdPal.UI;
1816

1917
internal sealed partial class PowerToysRootPageService : IRootPageService
2018
{
2119
private readonly TopLevelCommandManager _tlcManager;
2220
private readonly ILogger _logger;
2321

22+
private readonly MainListPage _mainListPage; // Lazy<MainListPage> _mainListPage;
2423
private IExtensionWrapper? _activeExtension;
25-
private Lazy<MainListPage> _mainListPage;
2624

2725
public PowerToysRootPageService(
2826
TopLevelCommandManager topLevelCommandManager,
2927
SettingsService settingsService,
3028
AliasManager aliasManager,
3129
AppStateService appStateService,
30+
MainListPage mainListPage,
3231
ILogger logger)
3332
{
3433
_logger = logger;
3534
_tlcManager = topLevelCommandManager;
3635

37-
_mainListPage = new Lazy<MainListPage>(() =>
38-
{
39-
return new MainListPage(_tlcManager, settingsService, aliasManager, appStateService);
40-
});
36+
_mainListPage = mainListPage;
37+
38+
// new Lazy<MainListPage>(() =>
39+
// {
40+
// return new MainListPage(_tlcManager, settingsService, aliasManager, appStateService, _logger);
41+
// });
4142
}
4243

4344
public async Task PreLoadAsync()
@@ -47,7 +48,7 @@ public async Task PreLoadAsync()
4748

4849
public Microsoft.CommandPalette.Extensions.IPage GetRootPage()
4950
{
50-
return _mainListPage.Value;
51+
return _mainListPage;
5152
}
5253

5354
public async Task PostLoadRootPageAsync()
@@ -60,7 +61,7 @@ private void OnPerformTopLevelCommand(object? context)
6061
{
6162
if (context is IListItem listItem)
6263
{
63-
_mainListPage.Value.UpdateHistory(listItem);
64+
_mainListPage.UpdateHistory(listItem);
6465
}
6566
}
6667
catch (Exception ex)

0 commit comments

Comments
 (0)