From cc16b61eb7c16b566fe1ed0aa4f7031fa2acf675 Mon Sep 17 00:00:00 2001 From: Mike Griese Date: Tue, 15 Jul 2025 12:21:44 -0500 Subject: [PATCH] Create a Microsoft.CmdPal.Core.ViewModels project (#40560) _targets #40504_ Major refactoring for #40113 This moves a large swath of the codebase to a `.Core` project. "Core" doesn't have any explicit dependencies on "extensions", settings or the current `MainListPage`. It's just a filterable list of stuff. This should let us make this component a bit more reusable. This is half of a PR. As I did this, I noticed a particular bit of code for TopLevelVViewModels and CommandPaletteHost that was _very rough_. Solving it in this PR would make "move everything to a new project" much harder to review. So I'm submitting two PRs simultaneously, so we can see the changes separately, then merge together. --- PowerToys.sln | 14 ++ .../AppExtensionHost.cs | 168 ++++++++++++++++++ .../CommandBarViewModel.cs | 6 +- .../CommandContextItemViewModel.cs | 8 +- .../CommandItemViewModel.cs | 8 +- .../CommandViewModel.cs | 6 +- .../ConfirmResultViewModel.cs | 6 +- .../ContentPageViewModel.cs | 30 ++-- .../ContentViewModel.cs | 4 +- .../ContextMenuViewModel.cs | 4 +- .../DetailsCommandsViewModel.cs | 6 +- .../DetailsDataViewModel.cs | 6 +- .../DetailsElementViewModel.cs | 6 +- .../DetailsLinkViewModel.cs | 6 +- .../DetailsSeparatorViewModel.cs | 6 +- .../DetailsTagsViewModel.cs | 6 +- .../DetailsViewModel.cs | 6 +- .../ExtensionObjectViewModel.cs | 4 +- .../GlobalLogPageContext.cs | 2 +- .../IContextItemViewModel.cs | 2 +- .../IRootPageService.cs | 10 +- .../IconDataViewModel.cs | 6 +- .../IconInfoViewModel.cs | 6 +- .../ListItemViewModel.cs | 6 +- .../ListViewModel.cs | 15 +- .../LoadingPageViewModel.cs | 8 +- .../LogMessageViewModel.cs | 6 +- .../ActivateSecondaryCommandMessage.cs | 4 +- .../ActivateSelectedListItemMessage.cs | 2 +- .../Messages/BeginInvokeMessage.cs | 4 +- .../Messages/ClearSearchMessage.cs | 4 +- .../Messages/CloseContextMenuMessage.cs | 2 +- .../Messages/CmdPalInvokeResultMessage.cs | 4 +- .../Messages/DismissMessage.cs | 4 +- .../Messages/FocusSearchBoxMessage.cs | 4 +- .../Messages/GoBackMessage.cs | 4 +- .../Messages/GoHomeMessage.cs | 4 +- .../Messages/HandleCommandResultMessage.cs | 6 +- .../Messages/HideDetailsMessage.cs | 6 +- .../Messages/HotkeySummonMessage.cs | 4 +- .../Messages/LaunchUriMessage.cs | 6 +- .../Messages/NavigateBackMessage.cs | 4 +- .../Messages/NavigateNextCommand.cs | 4 +- .../Messages/NavigatePreviousCommand.cs | 4 +- .../Messages/NavigateToPageMessage.cs | 4 +- .../Messages/OpenContextMenuMessage.cs | 4 +- .../Messages/OpenSettingsMessage.cs | 6 +- .../Messages/PerformCommandMessage.cs | 15 +- .../Messages/QuitMessage.cs | 6 +- .../Messages/ReloadCommandsMessage.cs | 4 +- .../Messages/SettingsWindowClosedMessage.cs | 4 +- .../Messages/ShowConfirmationMessage.cs | 4 +- .../Messages/ShowDetailsMessage.cs | 6 +- .../Messages/ShowToastMessage.cs | 4 +- .../Messages/ShowWindowMessage.cs | 4 +- .../Messages/TryCommandKeybindingMessage.cs | 4 +- .../Messages/UpdateCommandBarMessage.cs | 4 +- .../Messages/UpdateFallbackItemsMessage.cs | 4 +- .../Microsoft.CmdPal.Core.ViewModels.csproj | 60 +++++++ .../Models/ExtensionObject`1.cs | 4 +- .../NativeMethods.json | 4 + .../NativeMethods.txt | 19 ++ .../PageViewModel.cs | 14 +- .../PageViewModelFactory.cs | 6 +- .../ProgressViewModel.cs | 6 +- .../SeparatorContextItemViewModel.cs | 4 +- .../ShellViewModel.cs | 142 +++------------ .../StatusMessageViewModel.cs | 10 +- .../TagViewModel.cs | 6 +- .../ToastViewModel.cs | 4 +- .../AliasManager.cs | 5 +- .../CommandPaletteContentPageViewModel.cs | 28 +++ .../CommandPaletteHost.cs | 163 +---------------- .../CommandPalettePageViewModelFactory.cs | 29 +++ .../CommandProviderWrapper.cs | 3 +- .../CommandSettingsViewModel.cs | 5 +- .../Commands/BuiltInsCommandProvider.cs | 2 +- .../Commands/BuiltinsExtensionHost.cs | 8 - .../Commands/LogMessagesPage.cs | 4 +- .../Commands/MainListPage.cs | 2 +- .../Commands/NewExtensionFormBase.cs | 2 +- .../Commands/OpenSettingsCommand.cs | 2 +- .../Commands/QuitAction.cs | 2 +- .../Commands/ReloadExtensionsCommand.cs | 2 +- .../ContentFormViewModel.cs | 5 +- .../ContentMarkdownViewModel.cs | 3 +- .../ContentTreeViewModel.cs | 23 ++- .../Microsoft.CmdPal.UI.ViewModels.csproj | 1 + .../Models/ExtensionWrapper.cs | 3 +- .../ProviderSettingsViewModel.cs | 3 +- .../TopLevelCommandManager.cs | 3 +- .../TopLevelViewModel.cs | 10 +- .../cmdpal/Microsoft.CmdPal.UI/App.xaml.cs | 4 +- .../Controls/CommandBar.xaml | 3 +- .../Controls/CommandBar.xaml.cs | 4 +- .../Controls/ContextMenu.xaml | 9 +- .../Controls/ContextMenu.xaml.cs | 9 +- .../Microsoft.CmdPal.UI/Controls/IconBox.cs | 2 +- .../Controls/SearchBar.xaml.cs | 4 +- .../Microsoft.CmdPal.UI/Controls/Tag.xaml.cs | 2 +- .../Converters/ContentTemplateSelector.cs | 1 + .../Converters/ContextItemTemplateSelector.cs | 3 +- .../Converters/DetailsDataTemplateSelector.cs | 2 +- .../ExtViews/CleanupHelper.xaml.cs | 7 - .../ExtViews/ContentPage.xaml | 1 + .../ExtViews/ContentPage.xaml.cs | 4 +- .../ExtViews/ListPage.xaml | 5 +- .../ExtViews/ListPage.xaml.cs | 3 +- .../Helpers/IconCacheProvider.cs | 3 +- .../Helpers/IconCacheService.cs | 2 +- .../Helpers/TelemetryForwarder.cs | 2 +- .../Helpers/TrayIconService.cs | 2 +- .../Microsoft.CmdPal.UI/MainWindow.xaml.cs | 3 +- .../Pages/LoadingPage.xaml.cs | 2 +- .../Microsoft.CmdPal.UI/Pages/ShellPage.xaml | 13 +- .../Pages/ShellPage.xaml.cs | 6 +- .../PowerToysAppHostService.cs | 29 +++ .../PowerToysRootPageService.cs | 75 +++++++- .../Settings/SettingsWindow.xaml.cs | 3 +- .../Microsoft.CmdPal.UI/ToastWindow.xaml.cs | 6 +- .../Views/ICurrentPageAware.cs | 4 +- 121 files changed, 733 insertions(+), 571 deletions(-) create mode 100644 src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/AppExtensionHost.cs rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/CommandBarViewModel.cs (97%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/CommandContextItemViewModel.cs (87%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/CommandItemViewModel.cs (98%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/CommandViewModel.cs (96%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/ConfirmResultViewModel.cs (91%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/ContentPageViewModel.cs (91%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/ContentViewModel.cs (79%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/ContextMenuViewModel.cs (98%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/DetailsCommandsViewModel.cs (90%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/DetailsDataViewModel.cs (69%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/DetailsElementViewModel.cs (85%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/DetailsLinkViewModel.cs (90%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/DetailsSeparatorViewModel.cs (82%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/DetailsTagsViewModel.cs (89%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/DetailsViewModel.cs (94%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/ExtensionObjectViewModel.cs (96%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/GlobalLogPageContext.cs (92%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/IContextItemViewModel.cs (88%) rename src/modules/cmdpal/{Microsoft.CmdPal.Common/Services => Microsoft.CmdPal.Core.ViewModels}/IRootPageService.cs (84%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/IconDataViewModel.cs (91%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/IconInfoViewModel.cs (92%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/ListItemViewModel.cs (97%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/ListViewModel.cs (98%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/LoadingPageViewModel.cs (71%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/LogMessageViewModel.cs (83%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/ActivateSecondaryCommandMessage.cs (77%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/ActivateSelectedListItemMessage.cs (86%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/BeginInvokeMessage.cs (65%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/ClearSearchMessage.cs (66%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/CloseContextMenuMessage.cs (85%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/CmdPalInvokeResultMessage.cs (72%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/DismissMessage.cs (66%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/FocusSearchBoxMessage.cs (66%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/GoBackMessage.cs (77%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/GoHomeMessage.cs (77%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/HandleCommandResultMessage.cs (66%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/HideDetailsMessage.cs (62%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/HotkeySummonMessage.cs (69%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/LaunchUriMessage.cs (62%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/NavigateBackMessage.cs (69%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/NavigateNextCommand.cs (76%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/NavigatePreviousCommand.cs (77%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/NavigateToPageMessage.cs (70%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/OpenContextMenuMessage.cs (85%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/OpenSettingsMessage.cs (55%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/PerformCommandMessage.cs (77%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/QuitMessage.cs (68%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/ReloadCommandsMessage.cs (66%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/SettingsWindowClosedMessage.cs (67%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/ShowConfirmationMessage.cs (72%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/ShowDetailsMessage.cs (64%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/ShowToastMessage.cs (67%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/ShowWindowMessage.cs (67%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/TryCommandKeybindingMessage.cs (77%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/UpdateCommandBarMessage.cs (95%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Messages/UpdateFallbackItemsMessage.cs (67%) create mode 100644 src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Microsoft.CmdPal.Core.ViewModels.csproj rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/Models/ExtensionObject`1.cs (83%) create mode 100644 src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/NativeMethods.json create mode 100644 src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/NativeMethods.txt rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/PageViewModel.cs (96%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/PageViewModelFactory.cs (86%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/ProgressViewModel.cs (92%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/SeparatorContextItemViewModel.cs (79%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/ShellViewModel.cs (72%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/StatusMessageViewModel.cs (87%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/TagViewModel.cs (91%) rename src/modules/cmdpal/{Microsoft.CmdPal.UI.ViewModels => Microsoft.CmdPal.Core.ViewModels}/ToastViewModel.cs (81%) create mode 100644 src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandPaletteContentPageViewModel.cs create mode 100644 src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandPalettePageViewModelFactory.cs create mode 100644 src/modules/cmdpal/Microsoft.CmdPal.UI/PowerToysAppHostService.cs diff --git a/PowerToys.sln b/PowerToys.sln index 0775b28def..6010ed421d 100644 --- a/PowerToys.sln +++ b/PowerToys.sln @@ -736,6 +736,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ManagedCsWin32", "src\commo EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PowerRenameUITest", "src\modules\powerrename\PowerRenameUITest\PowerRenameUITest.csproj", "{9D3F3793-EFE3-4525-8782-238015DABA62}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.CmdPal.Core.ViewModels", "src\modules\cmdpal\Microsoft.CmdPal.Core.ViewModels\Microsoft.CmdPal.Core.ViewModels.csproj", "{24133F7F-C1D1-DE04-EFA8-F5D5467FE027}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|ARM64 = Debug|ARM64 @@ -2718,6 +2722,14 @@ Global {14AFD976-B4D2-49D0-9E6C-AA93CC061B8A}.Release|ARM64.Build.0 = Release|ARM64 {14AFD976-B4D2-49D0-9E6C-AA93CC061B8A}.Release|x64.ActiveCfg = Release|x64 {14AFD976-B4D2-49D0-9E6C-AA93CC061B8A}.Release|x64.Build.0 = Release|x64 + {24133F7F-C1D1-DE04-EFA8-F5D5467FE027}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {24133F7F-C1D1-DE04-EFA8-F5D5467FE027}.Debug|ARM64.Build.0 = Debug|ARM64 + {24133F7F-C1D1-DE04-EFA8-F5D5467FE027}.Debug|x64.ActiveCfg = Debug|x64 + {24133F7F-C1D1-DE04-EFA8-F5D5467FE027}.Debug|x64.Build.0 = Debug|x64 + {24133F7F-C1D1-DE04-EFA8-F5D5467FE027}.Release|ARM64.ActiveCfg = Release|ARM64 + {24133F7F-C1D1-DE04-EFA8-F5D5467FE027}.Release|ARM64.Build.0 = Release|ARM64 + {24133F7F-C1D1-DE04-EFA8-F5D5467FE027}.Release|x64.ActiveCfg = Release|x64 + {24133F7F-C1D1-DE04-EFA8-F5D5467FE027}.Release|x64.Build.0 = Release|x64 {9D3F3793-EFE3-4525-8782-238015DABA62}.Debug|ARM64.ActiveCfg = Debug|ARM64 {9D3F3793-EFE3-4525-8782-238015DABA62}.Debug|ARM64.Build.0 = Debug|ARM64 {9D3F3793-EFE3-4525-8782-238015DABA62}.Debug|x64.ActiveCfg = Debug|x64 @@ -3010,6 +3022,8 @@ Global {43E779F3-D83C-48B1-BA8D-1912DBD76FC9} = {A2221D7E-55E7-4BEA-90D1-4F162D670BBF} {2CF78CF7-8FEB-4BE1-9591-55FA25B48FC6} = {1AFB6476-670D-4E80-A464-657E01DFF482} {14AFD976-B4D2-49D0-9E6C-AA93CC061B8A} = {1AFB6476-670D-4E80-A464-657E01DFF482} + {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} = {3846508C-77EB-4034-A702-F8BB263C4F79} + {24133F7F-C1D1-DE04-EFA8-F5D5467FE027} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {9D3F3793-EFE3-4525-8782-238015DABA62} = {89E20BCE-EB9C-46C8-8B50-E01A82E6FDC3} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution diff --git a/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/AppExtensionHost.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/AppExtensionHost.cs new file mode 100644 index 0000000000..3a828a3e5d --- /dev/null +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/AppExtensionHost.cs @@ -0,0 +1,168 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections.ObjectModel; +using System.Diagnostics; +using ManagedCommon; +using Microsoft.CommandPalette.Extensions; +using Microsoft.CommandPalette.Extensions.Toolkit; +using Windows.Foundation; + +namespace Microsoft.CmdPal.Core.ViewModels; + +public abstract partial class AppExtensionHost : IExtensionHost +{ + private static readonly GlobalLogPageContext _globalLogPageContext = new(); + + private static ulong _hostingHwnd; + + public static ObservableCollection LogMessages { get; } = []; + + public ulong HostingHwnd => _hostingHwnd; + + public string LanguageOverride => string.Empty; + + public ObservableCollection StatusMessages { get; } = []; + + public static void SetHostHwnd(ulong hostHwnd) => _hostingHwnd = hostHwnd; + + public void DebugLog(string message) + { +#if DEBUG + this.ProcessLogMessage(new LogMessage(message)); +#endif + } + + public IAsyncAction HideStatus(IStatusMessage? message) + { + if (message == null) + { + return Task.CompletedTask.AsAsyncAction(); + } + + _ = Task.Run(() => + { + ProcessHideStatusMessage(message); + }); + return Task.CompletedTask.AsAsyncAction(); + } + + public void Log(string message) + { + this.ProcessLogMessage(new LogMessage(message)); + } + + public IAsyncAction LogMessage(ILogMessage? message) + { + if (message == null) + { + return Task.CompletedTask.AsAsyncAction(); + } + + Logger.LogDebug(message.Message); + + _ = Task.Run(() => + { + ProcessLogMessage(message); + }); + + // We can't just make a LogMessageViewModel : ExtensionObjectViewModel + // because we don't necessarily know the page context. Butts. + return Task.CompletedTask.AsAsyncAction(); + } + + public void ProcessHideStatusMessage(IStatusMessage message) + { + Task.Factory.StartNew( + () => + { + try + { + var vm = StatusMessages.Where(messageVM => messageVM.Model.Unsafe == message).FirstOrDefault(); + if (vm != null) + { + StatusMessages.Remove(vm); + } + } + catch + { + } + }, + CancellationToken.None, + TaskCreationOptions.None, + _globalLogPageContext.Scheduler); + } + + public void ProcessLogMessage(ILogMessage message) + { + var vm = new LogMessageViewModel(message, _globalLogPageContext); + vm.SafeInitializePropertiesSynchronous(); + + Task.Factory.StartNew( + () => + { + LogMessages.Add(vm); + }, + CancellationToken.None, + TaskCreationOptions.None, + _globalLogPageContext.Scheduler); + } + + public void ProcessStatusMessage(IStatusMessage message, StatusContext context) + { + // If this message is already in the list of messages, just bring it to the top + var oldVm = StatusMessages.Where(messageVM => messageVM.Model.Unsafe == message).FirstOrDefault(); + if (oldVm != null) + { + Task.Factory.StartNew( + () => + { + StatusMessages.Remove(oldVm); + StatusMessages.Add(oldVm); + }, + CancellationToken.None, + TaskCreationOptions.None, + _globalLogPageContext.Scheduler); + return; + } + + var vm = new StatusMessageViewModel(message, new(_globalLogPageContext)); + vm.SafeInitializePropertiesSynchronous(); + + Task.Factory.StartNew( + () => + { + StatusMessages.Add(vm); + }, + CancellationToken.None, + TaskCreationOptions.None, + _globalLogPageContext.Scheduler); + } + + public IAsyncAction ShowStatus(IStatusMessage? message, StatusContext context) + { + if (message == null) + { + return Task.CompletedTask.AsAsyncAction(); + } + + Debug.WriteLine(message.Message); + + _ = Task.Run(() => + { + ProcessStatusMessage(message, context); + }); + + return Task.CompletedTask.AsAsyncAction(); + } + + public abstract string? GetExtensionDisplayName(); +} + +public interface IAppHostService +{ + AppExtensionHost GetDefaultHost(); + + AppExtensionHost GetHostForCommand(object? context, AppExtensionHost? currentHost); +} diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandBarViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/CommandBarViewModel.cs similarity index 97% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandBarViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/CommandBarViewModel.cs index e0112acaff..4dda2c455d 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandBarViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/CommandBarViewModel.cs @@ -1,15 +1,15 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.Collections.ObjectModel; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Messaging; -using Microsoft.CmdPal.UI.ViewModels.Messages; +using Microsoft.CmdPal.Core.ViewModels.Messages; using Microsoft.CommandPalette.Extensions.Toolkit; using Windows.System; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class CommandBarViewModel : ObservableObject, IRecipient diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandContextItemViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/CommandContextItemViewModel.cs similarity index 87% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandContextItemViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/CommandContextItemViewModel.cs index f1c35b1f50..60fc815a52 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandContextItemViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/CommandContextItemViewModel.cs @@ -1,13 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using CommunityToolkit.Mvvm.Messaging; -using Microsoft.CmdPal.UI.ViewModels.Messages; -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class CommandContextItemViewModel(ICommandContextItem contextItem, WeakReference context) : CommandItemViewModel(new(contextItem), context), IContextItemViewModel { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandItemViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/CommandItemViewModel.cs similarity index 98% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandItemViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/CommandItemViewModel.cs index 0602abeea2..75a8eb9a56 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandItemViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/CommandItemViewModel.cs @@ -1,13 +1,13 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Messages; -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Messages; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; using Microsoft.CommandPalette.Extensions.Toolkit; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class CommandItemViewModel : ExtensionObjectViewModel, ICommandBarContext { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/CommandViewModel.cs similarity index 96% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/CommandViewModel.cs index c1d3c4e6f9..6e48cef382 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/CommandViewModel.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class CommandViewModel : ExtensionObjectViewModel { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ConfirmResultViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ConfirmResultViewModel.cs similarity index 91% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ConfirmResultViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ConfirmResultViewModel.cs index 53466cb1ce..45cd18f4dd 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ConfirmResultViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ConfirmResultViewModel.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class ConfirmResultViewModel(IConfirmationArgs _args, WeakReference context) : ExtensionObjectViewModel(context) diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContentPageViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ContentPageViewModel.cs similarity index 91% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContentPageViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ContentPageViewModel.cs index 0d37a81112..16611a31ac 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContentPageViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ContentPageViewModel.cs @@ -7,12 +7,12 @@ using System.Diagnostics.CodeAnalysis; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Messaging; -using Microsoft.CmdPal.UI.ViewModels.Messages; -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Messages; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; using Microsoft.CommandPalette.Extensions.Toolkit; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class ContentPageViewModel : PageViewModel, ICommandBarContext { @@ -47,7 +47,7 @@ public partial class ContentPageViewModel : PageViewModel, ICommandBarContext // Remember - "observable" properties from the model (via PropChanged) // cannot be marked [ObservableProperty] - public ContentPageViewModel(IContentPage model, TaskScheduler scheduler, CommandPaletteHost host) + public ContentPageViewModel(IContentPage model, TaskScheduler scheduler, AppExtensionHost host) : base(model, scheduler, host) { _model = new(model); @@ -91,16 +91,12 @@ public partial class ContentPageViewModel : PageViewModel, ICommandBarContext }); } - public static ContentViewModel? ViewModelFromContent(IContent content, WeakReference context) + public virtual ContentViewModel? ViewModelFromContent(IContent content, WeakReference context) { - ContentViewModel? viewModel = content switch - { - IFormContent form => new ContentFormViewModel(form, context), - IMarkdownContent markdown => new ContentMarkdownViewModel(markdown, context), - ITreeContent tree => new ContentTreeViewModel(tree, context), - _ => null, - }; - return viewModel; + // The core ContentPageViewModel doesn't actually handle any content, + // so we just return null here. + // The real content is handled by the derived class CommandPaletteContentPageViewModel + return null; } public override void InitializeProperties() @@ -115,15 +111,15 @@ public partial class ContentPageViewModel : PageViewModel, ICommandBarContext Commands = model.Commands .ToList() - .Select(item => + .Select(item => { if (item is CommandContextItem contextItem) { - return new CommandContextItemViewModel(contextItem, PageContext) as IContextItemViewModel; + return new CommandContextItemViewModel(contextItem, PageContext); } else { - return new SeparatorContextItemViewModel() as IContextItemViewModel; + return new SeparatorContextItemViewModel(); } }) .ToList(); @@ -182,7 +178,7 @@ public partial class ContentPageViewModel : PageViewModel, ICommandBarContext } else { - return new SeparatorContextItemViewModel() as IContextItemViewModel; + return new SeparatorContextItemViewModel(); } }) .ToList(); diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContentViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ContentViewModel.cs similarity index 79% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContentViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ContentViewModel.cs index 21d2d6748f..42a2e5c6d9 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContentViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ContentViewModel.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public abstract partial class ContentViewModel(WeakReference context) : ExtensionObjectViewModel(context) diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContextMenuViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ContextMenuViewModel.cs similarity index 98% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContextMenuViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ContextMenuViewModel.cs index ed95768865..42820bb0d3 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContextMenuViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ContextMenuViewModel.cs @@ -5,13 +5,13 @@ using System.Collections.ObjectModel; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Messaging; -using Microsoft.CmdPal.UI.ViewModels.Messages; +using Microsoft.CmdPal.Core.ViewModels.Messages; using Microsoft.CommandPalette.Extensions; using Microsoft.CommandPalette.Extensions.Toolkit; using Microsoft.Diagnostics.Utilities; using Windows.System; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class ContextMenuViewModel : ObservableObject, IRecipient, diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsCommandsViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsCommandsViewModel.cs similarity index 90% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsCommandsViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsCommandsViewModel.cs index 316209a296..b85aeaba81 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsCommandsViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsCommandsViewModel.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class DetailsCommandsViewModel( IDetailsElement _detailsElement, diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsDataViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsDataViewModel.cs similarity index 69% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsDataViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsDataViewModel.cs index 30084f7c7a..9165dde656 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsDataViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsDataViewModel.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public abstract partial class DetailsDataViewModel(IPageContext context) : ExtensionObjectViewModel(context) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsElementViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsElementViewModel.cs similarity index 85% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsElementViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsElementViewModel.cs index e836dbf180..390459f26c 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsElementViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsElementViewModel.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public abstract partial class DetailsElementViewModel(IDetailsElement _detailsElement, WeakReference context) : ExtensionObjectViewModel(context) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsLinkViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsLinkViewModel.cs similarity index 90% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsLinkViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsLinkViewModel.cs index 0d600958da..e7aa9b67af 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsLinkViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsLinkViewModel.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class DetailsLinkViewModel( IDetailsElement _detailsElement, diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsSeparatorViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsSeparatorViewModel.cs similarity index 82% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsSeparatorViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsSeparatorViewModel.cs index 44b48f0802..e4c76918c0 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsSeparatorViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsSeparatorViewModel.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class DetailsSeparatorViewModel( IDetailsElement _detailsElement, diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsTagsViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsTagsViewModel.cs similarity index 89% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsTagsViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsTagsViewModel.cs index e188983047..803585c1ce 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsTagsViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsTagsViewModel.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class DetailsTagsViewModel( IDetailsElement _detailsElement, diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsViewModel.cs similarity index 94% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsViewModel.cs index 893a94f86e..034e247519 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/DetailsViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/DetailsViewModel.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class DetailsViewModel(IDetails _details, WeakReference context) : ExtensionObjectViewModel(context) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ExtensionObjectViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ExtensionObjectViewModel.cs similarity index 96% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ExtensionObjectViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ExtensionObjectViewModel.cs index 08d1128106..f0bb9de118 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ExtensionObjectViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ExtensionObjectViewModel.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using CommunityToolkit.Mvvm.ComponentModel; using ManagedCommon; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public abstract partial class ExtensionObjectViewModel : ObservableObject { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/GlobalLogPageContext.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/GlobalLogPageContext.cs similarity index 92% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/GlobalLogPageContext.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/GlobalLogPageContext.cs index fde1a36817..228ccc5f4b 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/GlobalLogPageContext.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/GlobalLogPageContext.cs @@ -2,7 +2,7 @@ // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public class GlobalLogPageContext : IPageContext { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/IContextItemViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/IContextItemViewModel.cs similarity index 88% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/IContextItemViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/IContextItemViewModel.cs index 743687147c..704947c3a8 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/IContextItemViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/IContextItemViewModel.cs @@ -8,7 +8,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public interface IContextItemViewModel { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.Common/Services/IRootPageService.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/IRootPageService.cs similarity index 84% rename from src/modules/cmdpal/Microsoft.CmdPal.Common/Services/IRootPageService.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/IRootPageService.cs index 24e509b8a4..77eaecae4b 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.Common/Services/IRootPageService.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/IRootPageService.cs @@ -2,9 +2,7 @@ // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using System.Threading.Tasks; - -namespace Microsoft.CmdPal.Common.Services; +namespace Microsoft.CmdPal.Core.ViewModels; public interface IRootPageService { @@ -29,9 +27,11 @@ public interface IRootPageService Task PostLoadRootPageAsync(); /// - /// Called when a top-level command is performed. The context is the + /// Called when a command is performed. The context is the /// sender context for the invoked command. This is typically the IListItem /// or ICommandContextItem that was used to invoke the command. /// - void OnPerformTopLevelCommand(object? context); + void OnPerformCommand(object? context, bool topLevel, AppExtensionHost? currentHost); + + void GoHome(); } diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/IconDataViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/IconDataViewModel.cs similarity index 91% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/IconDataViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/IconDataViewModel.cs index 35d91f6739..70b143864c 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/IconDataViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/IconDataViewModel.cs @@ -1,13 +1,13 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using CommunityToolkit.Mvvm.ComponentModel; -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; using Windows.Storage.Streams; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class IconDataViewModel : ObservableObject, IIconData { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/IconInfoViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/IconInfoViewModel.cs similarity index 92% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/IconInfoViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/IconInfoViewModel.cs index 93f8ece969..21ddbe99d9 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/IconInfoViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/IconInfoViewModel.cs @@ -1,12 +1,12 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using CommunityToolkit.Mvvm.ComponentModel; -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class IconInfoViewModel : ObservableObject, IIconInfo { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ListItemViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ListItemViewModel.cs similarity index 97% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ListItemViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ListItemViewModel.cs index 48542ba628..682bf4daea 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ListItemViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ListItemViewModel.cs @@ -1,13 +1,13 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.Diagnostics.CodeAnalysis; -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; using Microsoft.CommandPalette.Extensions.Toolkit; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class ListItemViewModel(IListItem model, WeakReference context) : CommandItemViewModel(new(model), context) diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ListViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ListViewModel.cs similarity index 98% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ListViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ListViewModel.cs index 5a5917bc67..9cf15cb70e 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ListViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ListViewModel.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. @@ -6,13 +6,13 @@ using System.Collections.ObjectModel; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Messaging; -using Microsoft.CmdPal.UI.ViewModels.Messages; -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Messages; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; using Microsoft.CommandPalette.Extensions.Toolkit; using Windows.Foundation; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class ListViewModel : PageViewModel, IDisposable { @@ -72,7 +72,7 @@ public partial class ListViewModel : PageViewModel, IDisposable } } - public ListViewModel(IListPage model, TaskScheduler scheduler, CommandPaletteHost host) + public ListViewModel(IListPage model, TaskScheduler scheduler, AppExtensionHost host) : base(model, scheduler, host) { _model = new(model); @@ -158,10 +158,7 @@ public partial class ListViewModel : PageViewModel, IDisposable } // Cancel any ongoing search - if (_cancellationTokenSource != null) - { - _cancellationTokenSource.Cancel(); - } + _cancellationTokenSource?.Cancel(); lock (_listLock) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/LoadingPageViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/LoadingPageViewModel.cs similarity index 71% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/LoadingPageViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/LoadingPageViewModel.cs index 60571cbe73..3e2cd420c2 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/LoadingPageViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/LoadingPageViewModel.cs @@ -1,15 +1,15 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class LoadingPageViewModel : PageViewModel { - public LoadingPageViewModel(IPage? model, TaskScheduler scheduler) - : base(model, scheduler, CommandPaletteHost.Instance) + public LoadingPageViewModel(IPage? model, TaskScheduler scheduler, AppExtensionHost host) + : base(model, scheduler, host) { ModelIsLoading = true; IsInitialized = false; diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/LogMessageViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/LogMessageViewModel.cs similarity index 83% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/LogMessageViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/LogMessageViewModel.cs index 60d065ac04..9ebff20304 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/LogMessageViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/LogMessageViewModel.cs @@ -2,10 +2,10 @@ // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class LogMessageViewModel : ExtensionObjectViewModel { @@ -13,8 +13,6 @@ public partial class LogMessageViewModel : ExtensionObjectViewModel public string Message { get; private set; } = string.Empty; - public string ExtensionPfn { get; set; } = string.Empty; - public LogMessageViewModel(ILogMessage message, IPageContext context) : base(context) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ActivateSecondaryCommandMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ActivateSecondaryCommandMessage.cs similarity index 77% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ActivateSecondaryCommandMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ActivateSecondaryCommandMessage.cs index 1e35d6d796..1ecd7431d2 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ActivateSecondaryCommandMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ActivateSecondaryCommandMessage.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; /// /// Used to perform a list item's secondary command when the user presses ctrl+enter in the search box diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ActivateSelectedListItemMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ActivateSelectedListItemMessage.cs similarity index 86% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ActivateSelectedListItemMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ActivateSelectedListItemMessage.cs index 339e0c1b3d..bdd1876d4e 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ActivateSelectedListItemMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ActivateSelectedListItemMessage.cs @@ -2,7 +2,7 @@ // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; /// /// Used to perform a list item's command when the user presses enter in the search box diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/BeginInvokeMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/BeginInvokeMessage.cs similarity index 65% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/BeginInvokeMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/BeginInvokeMessage.cs index 2c7fb406b8..8ed180a27c 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/BeginInvokeMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/BeginInvokeMessage.cs @@ -1,7 +1,7 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record BeginInvokeMessage; diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ClearSearchMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ClearSearchMessage.cs similarity index 66% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ClearSearchMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ClearSearchMessage.cs index e3b7ee831e..47bd0e7be8 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ClearSearchMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ClearSearchMessage.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record ClearSearchMessage() { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/CloseContextMenuMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/CloseContextMenuMessage.cs similarity index 85% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/CloseContextMenuMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/CloseContextMenuMessage.cs index daa18498e7..5178e00631 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/CloseContextMenuMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/CloseContextMenuMessage.cs @@ -2,7 +2,7 @@ // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; /// /// Used to announce that a context menu should close diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/CmdPalInvokeResultMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/CmdPalInvokeResultMessage.cs similarity index 72% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/CmdPalInvokeResultMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/CmdPalInvokeResultMessage.cs index 1ecc1be460..da81db6e3c 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/CmdPalInvokeResultMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/CmdPalInvokeResultMessage.cs @@ -1,7 +1,7 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record CmdPalInvokeResultMessage(Microsoft.CommandPalette.Extensions.CommandResultKind Kind); diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/DismissMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/DismissMessage.cs similarity index 66% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/DismissMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/DismissMessage.cs index 273952897d..98a5b34562 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/DismissMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/DismissMessage.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record DismissMessage() { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/FocusSearchBoxMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/FocusSearchBoxMessage.cs similarity index 66% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/FocusSearchBoxMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/FocusSearchBoxMessage.cs index 4e6db37daa..73fad88301 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/FocusSearchBoxMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/FocusSearchBoxMessage.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record FocusSearchBoxMessage() { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/GoBackMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/GoBackMessage.cs similarity index 77% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/GoBackMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/GoBackMessage.cs index d200a8454f..86872d6bb1 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/GoBackMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/GoBackMessage.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record GoBackMessage(bool WithAnimation = true, bool FocusSearch = true) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/GoHomeMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/GoHomeMessage.cs similarity index 77% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/GoHomeMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/GoHomeMessage.cs index 5a7f56d021..d99cbbdd16 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/GoHomeMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/GoHomeMessage.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; // TODO! sticking these properties here feels like leaking the UI into the models public record GoHomeMessage(bool WithAnimation = true, bool FocusSearch = true) diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/HandleCommandResultMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/HandleCommandResultMessage.cs similarity index 66% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/HandleCommandResultMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/HandleCommandResultMessage.cs index 3adf7ae30c..7c60f7cb4e 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/HandleCommandResultMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/HandleCommandResultMessage.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record HandleCommandResultMessage(ExtensionObject Result) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/HideDetailsMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/HideDetailsMessage.cs similarity index 62% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/HideDetailsMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/HideDetailsMessage.cs index a04455b519..43fa403731 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/HideDetailsMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/HideDetailsMessage.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record HideDetailsMessage() { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/HotkeySummonMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/HotkeySummonMessage.cs similarity index 69% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/HotkeySummonMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/HotkeySummonMessage.cs index bff7af364e..4dcef111a3 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/HotkeySummonMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/HotkeySummonMessage.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record HotkeySummonMessage(string CommandId, IntPtr Hwnd) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/LaunchUriMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/LaunchUriMessage.cs similarity index 62% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/LaunchUriMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/LaunchUriMessage.cs index dba45af1b7..3835b7cc7f 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/LaunchUriMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/LaunchUriMessage.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record LaunchUriMessage(Uri Uri) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/NavigateBackMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/NavigateBackMessage.cs similarity index 69% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/NavigateBackMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/NavigateBackMessage.cs index 5e19bfc57f..3e085184ed 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/NavigateBackMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/NavigateBackMessage.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record NavigateBackMessage(bool FromBackspace = false) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/NavigateNextCommand.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/NavigateNextCommand.cs similarity index 76% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/NavigateNextCommand.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/NavigateNextCommand.cs index c996e0eecf..4ad61b20e6 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/NavigateNextCommand.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/NavigateNextCommand.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; /// /// Used to navigate to the next command in the page when pressing the Down key in the SearchBox. diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/NavigatePreviousCommand.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/NavigatePreviousCommand.cs similarity index 77% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/NavigatePreviousCommand.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/NavigatePreviousCommand.cs index 76f0f07908..4d28fce50b 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/NavigatePreviousCommand.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/NavigatePreviousCommand.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; /// /// Used to navigate to the previous command in the page when pressing the Down key in the SearchBox. diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/NavigateToPageMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/NavigateToPageMessage.cs similarity index 70% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/NavigateToPageMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/NavigateToPageMessage.cs index 784ce8f2bc..3d17f3b3cc 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/NavigateToPageMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/NavigateToPageMessage.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record NavigateToPageMessage(PageViewModel Page, bool WithAnimation) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/OpenContextMenuMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/OpenContextMenuMessage.cs similarity index 85% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/OpenContextMenuMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/OpenContextMenuMessage.cs index 3cdcf72cee..9c19c9474e 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/OpenContextMenuMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/OpenContextMenuMessage.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. @@ -6,7 +6,7 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls.Primitives; using Windows.Foundation; -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; /// /// Used to announce the context menu should open diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/OpenSettingsMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/OpenSettingsMessage.cs similarity index 55% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/OpenSettingsMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/OpenSettingsMessage.cs index 115593d5ae..e4b02b5c0c 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/OpenSettingsMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/OpenSettingsMessage.cs @@ -1,10 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.BuiltinCommands; - -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record OpenSettingsMessage() { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/PerformCommandMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/PerformCommandMessage.cs similarity index 77% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/PerformCommandMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/PerformCommandMessage.cs index b0e5e4829a..cd07a51beb 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/PerformCommandMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/PerformCommandMessage.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; /// /// Used to do a command - navigate to a page or invoke it @@ -18,21 +18,12 @@ public record PerformCommandMessage public bool WithAnimation { get; set; } = true; - public CommandPaletteHost? ExtensionHost { get; private set; } - public PerformCommandMessage(ExtensionObject command) { Command = command; Context = null; } - public PerformCommandMessage(TopLevelViewModel topLevelCommand) - { - Command = topLevelCommand.CommandViewModel.Model; - Context = null; - ExtensionHost = topLevelCommand.ExtensionHost; - } - public PerformCommandMessage(ExtensionObject command, ExtensionObject context) { Command = command; diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/QuitMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/QuitMessage.cs similarity index 68% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/QuitMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/QuitMessage.cs index 2951aa57fb..12b9cec827 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/QuitMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/QuitMessage.cs @@ -1,10 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.BuiltinCommands; - -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; /// /// Message which closes the application. Used by via . diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ReloadCommandsMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ReloadCommandsMessage.cs similarity index 66% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ReloadCommandsMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ReloadCommandsMessage.cs index c427da4f9c..a553568f50 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ReloadCommandsMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ReloadCommandsMessage.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record ReloadCommandsMessage() { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/SettingsWindowClosedMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/SettingsWindowClosedMessage.cs similarity index 67% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/SettingsWindowClosedMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/SettingsWindowClosedMessage.cs index 6627ab6192..f58637e8a5 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/SettingsWindowClosedMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/SettingsWindowClosedMessage.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record SettingsWindowClosedMessage { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ShowConfirmationMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ShowConfirmationMessage.cs similarity index 72% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ShowConfirmationMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ShowConfirmationMessage.cs index c4059fbecd..fb7c5e88a8 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ShowConfirmationMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ShowConfirmationMessage.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record ShowConfirmationMessage(Microsoft.CommandPalette.Extensions.IConfirmationArgs? Args) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ShowDetailsMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ShowDetailsMessage.cs similarity index 64% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ShowDetailsMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ShowDetailsMessage.cs index b51300d6d0..69dda7a589 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ShowDetailsMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ShowDetailsMessage.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record ShowDetailsMessage(DetailsViewModel Details) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ShowToastMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ShowToastMessage.cs similarity index 67% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ShowToastMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ShowToastMessage.cs index 0ec61dffd8..869d169858 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ShowToastMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ShowToastMessage.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record ShowToastMessage(string Message) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ShowWindowMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ShowWindowMessage.cs similarity index 67% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ShowWindowMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ShowWindowMessage.cs index 9e880c08f0..01c05ff9b7 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/ShowWindowMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/ShowWindowMessage.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record ShowWindowMessage(IntPtr Hwnd) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/TryCommandKeybindingMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/TryCommandKeybindingMessage.cs similarity index 77% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/TryCommandKeybindingMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/TryCommandKeybindingMessage.cs index 3df48ec3a0..48f7305e0a 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/TryCommandKeybindingMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/TryCommandKeybindingMessage.cs @@ -1,10 +1,10 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using Windows.System; -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record TryCommandKeybindingMessage(bool Ctrl, bool Alt, bool Shift, bool Win, VirtualKey Key) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/UpdateCommandBarMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/UpdateCommandBarMessage.cs similarity index 95% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/UpdateCommandBarMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/UpdateCommandBarMessage.cs index 9acec4bfe1..36b7653af5 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/UpdateCommandBarMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/UpdateCommandBarMessage.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.ComponentModel; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; /// /// Used to update the command bar at the bottom to reflect the commands for a list item diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/UpdateFallbackItemsMessage.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/UpdateFallbackItemsMessage.cs similarity index 67% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/UpdateFallbackItemsMessage.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/UpdateFallbackItemsMessage.cs index c7503ce1fb..8a913f7a3f 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Messages/UpdateFallbackItemsMessage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Messages/UpdateFallbackItemsMessage.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Messages; +namespace Microsoft.CmdPal.Core.ViewModels.Messages; public record UpdateFallbackItemsMessage() { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Microsoft.CmdPal.Core.ViewModels.csproj b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Microsoft.CmdPal.Core.ViewModels.csproj new file mode 100644 index 0000000000..1508994524 --- /dev/null +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Microsoft.CmdPal.Core.ViewModels.csproj @@ -0,0 +1,60 @@ + + + + + + enable + enable + false + false + $(SolutionDir)$(Platform)\$(Configuration)\WinUI3Apps\CmdPal + + preview + + SA1313; + + + + true + + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + + + + + + + + + + + + + Resources.resx + True + True + + + + + + + + diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Models/ExtensionObject`1.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Models/ExtensionObject`1.cs similarity index 83% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Models/ExtensionObject`1.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Models/ExtensionObject`1.cs index 822229addc..c90225f344 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Models/ExtensionObject`1.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/Models/ExtensionObject`1.cs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.CmdPal.UI.ViewModels.Models; +namespace Microsoft.CmdPal.Core.ViewModels.Models; public class ExtensionObject(T? value) // where T : IInspectable { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/NativeMethods.json b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/NativeMethods.json new file mode 100644 index 0000000000..59fa7259c4 --- /dev/null +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/NativeMethods.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://aka.ms/CsWin32.schema.json", + "allowMarshaling": false +} diff --git a/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/NativeMethods.txt b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/NativeMethods.txt new file mode 100644 index 0000000000..981c7446f7 --- /dev/null +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/NativeMethods.txt @@ -0,0 +1,19 @@ +GetPhysicallyInstalledSystemMemory +GlobalMemoryStatusEx +GetSystemInfo +CoCreateInstance +SetForegroundWindow +IsIconic +RegisterHotKey +SetWindowLongPtr +CallWindowProc +ShowWindow +SetForegroundWindow +SetFocus +SetActiveWindow +MonitorFromWindow +GetMonitorInfo +SHCreateStreamOnFileEx +CoAllowSetForegroundWindow +SHCreateStreamOnFileEx +SHLoadIndirectString diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/PageViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/PageViewModel.cs similarity index 96% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/PageViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/PageViewModel.cs index 681f7bc7f1..552971b96c 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/PageViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/PageViewModel.cs @@ -1,14 +1,14 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.Collections.ObjectModel; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class PageViewModel : ExtensionObjectViewModel, IPageContext { @@ -43,7 +43,7 @@ public partial class PageViewModel : ExtensionObjectViewModel, IPageContext public bool ShowSuggestion => !string.IsNullOrEmpty(TextToSuggest) && TextToSuggest != Filter; [ObservableProperty] - public partial CommandPaletteHost ExtensionHost { get; private set; } + public partial AppExtensionHost ExtensionHost { get; private set; } public bool HasStatusMessage => MostRecentStatusMessage != null; @@ -69,7 +69,7 @@ public partial class PageViewModel : ExtensionObjectViewModel, IPageContext public IconInfoViewModel Icon { get; protected set; } - public PageViewModel(IPage? model, TaskScheduler scheduler, CommandPaletteHost extensionHost) + public PageViewModel(IPage? model, TaskScheduler scheduler, AppExtensionHost extensionHost) : base((IPageContext?)null) { _pageModel = new(model); @@ -220,7 +220,7 @@ public partial class PageViewModel : ExtensionObjectViewModel, IPageContext { // Set the extensionHint to the Page Title (if we have one, and one not provided). // extensionHint ??= _pageModel?.Unsafe?.Title; - extensionHint ??= ExtensionHost.Extension?.ExtensionDisplayName ?? Title; + extensionHint ??= ExtensionHost.GetExtensionDisplayName() ?? Title; Task.Factory.StartNew( () => { @@ -263,5 +263,5 @@ public interface IPageViewModelFactoryService /// Indicates whether the page is not the top-level page. /// The command palette host that will host the page (for status messages) /// A new instance of the page view model. - PageViewModel? TryCreatePageViewModel(IPage page, bool nested, CommandPaletteHost host); + PageViewModel? TryCreatePageViewModel(IPage page, bool nested, AppExtensionHost host); } diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/PageViewModelFactory.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/PageViewModelFactory.cs similarity index 86% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/PageViewModelFactory.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/PageViewModelFactory.cs index 83dbe51624..a30a2bd76b 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/PageViewModelFactory.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/PageViewModelFactory.cs @@ -1,10 +1,10 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public class PageViewModelFactory : IPageViewModelFactoryService { @@ -15,7 +15,7 @@ public class PageViewModelFactory : IPageViewModelFactoryService _scheduler = scheduler; } - public PageViewModel? TryCreatePageViewModel(IPage page, bool nested, CommandPaletteHost host) + public PageViewModel? TryCreatePageViewModel(IPage page, bool nested, AppExtensionHost host) { return page switch { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ProgressViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ProgressViewModel.cs similarity index 92% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ProgressViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ProgressViewModel.cs index 3a2d4512ed..40ea290dd4 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ProgressViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ProgressViewModel.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class ProgressViewModel : ExtensionObjectViewModel { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/SeparatorContextItemViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/SeparatorContextItemViewModel.cs similarity index 79% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/SeparatorContextItemViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/SeparatorContextItemViewModel.cs index 7d700e3625..c6858f490d 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/SeparatorContextItemViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/SeparatorContextItemViewModel.cs @@ -2,10 +2,10 @@ // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class SeparatorContextItemViewModel() : IContextItemViewModel, ISeparatorContextItem { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ShellViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ShellViewModel.cs similarity index 72% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ShellViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ShellViewModel.cs index 294b0021c7..170103b09c 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ShellViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ShellViewModel.cs @@ -1,25 +1,22 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using System.Runtime.InteropServices; -using System.Runtime.Versioning; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Messaging; using ManagedCommon; -using Microsoft.CmdPal.Common.Services; -using Microsoft.CmdPal.UI.ViewModels.Messages; -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Messages; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -using WinRT; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class ShellViewModel : ObservableObject, IRecipient { private readonly IRootPageService _rootPageService; + private readonly IAppHostService _appHostService; private readonly TaskScheduler _scheduler; private readonly IPageViewModelFactoryService _pageViewModelFactory; private readonly Lock _invokeLock = new(); @@ -61,17 +58,22 @@ public partial class ShellViewModel : ObservableObject, private IPage? _rootPage; - private IExtensionWrapper? _activeExtension; private bool _isNested; public bool IsNested { get => _isNested; } - public ShellViewModel(TaskScheduler scheduler, IRootPageService rootPageService, IPageViewModelFactoryService pageViewModelFactory) + public ShellViewModel( + TaskScheduler scheduler, + IRootPageService rootPageService, + IPageViewModelFactoryService pageViewModelFactory, + IAppHostService appHostService) { _pageViewModelFactory = pageViewModelFactory; _scheduler = scheduler; _rootPageService = rootPageService; - _currentPage = new LoadingPageViewModel(null, _scheduler); + _appHostService = appHostService; + + _currentPage = new LoadingPageViewModel(null, _scheduler, appHostService.GetDefaultHost()); // Register to receive messages WeakReferenceMessenger.Default.Register(this); @@ -173,11 +175,6 @@ public partial class ShellViewModel : ObservableObject, } } - public void PerformTopLevelCommand(PerformCommandMessage message) - { - _rootPageService.OnPerformTopLevelCommand(message.Context); - } - public void Receive(PerformCommandMessage message) { PerformCommand(message); @@ -191,61 +188,12 @@ public partial class ShellViewModel : ObservableObject, return; } - if (!CurrentPage.IsNested) - { - // on the main page here - PerformTopLevelCommand(message); - } + var host = _appHostService.GetHostForCommand(message.Context, CurrentPage.ExtensionHost); - IExtensionWrapper? extension = null; + _rootPageService.OnPerformCommand(message.Context, !CurrentPage.IsNested, host); try { - // In the case that we're coming from a top-level command, the - // current page's host is the global instance. We only really want - // to use that as the host of last resort. - var pageHost = CurrentPage?.ExtensionHost; - if (pageHost == CommandPaletteHost.Instance) - { - pageHost = null; - } - - var messageHost = message.ExtensionHost; - - // Use the host from the current page if it has one, else use the - // one specified in the PerformMessage for a top-level command, - // else just use the global one. - CommandPaletteHost host; - - // Top level items can come through without a Extension set on the - // message. In that case, the `Context` is actually the - // TopLevelViewModel itself, and we can use that to get at the - // extension object. - extension = pageHost?.Extension ?? messageHost?.Extension ?? null; - if (extension == null && message.Context is TopLevelViewModel topLevelViewModel) - { - extension = topLevelViewModel.ExtensionHost?.Extension; - host = pageHost ?? messageHost ?? topLevelViewModel?.ExtensionHost ?? CommandPaletteHost.Instance; - } - else - { - host = pageHost ?? messageHost ?? CommandPaletteHost.Instance; - } - - if (extension != null) - { - if (messageHost != null) - { - Logger.LogDebug($"Activated top-level command from {extension.ExtensionDisplayName}"); - } - else - { - Logger.LogDebug($"Activated command from {extension.ExtensionDisplayName}"); - } - } - - SetActiveExtension(extension); - if (command is IPage page) { Logger.LogDebug($"Navigating to page"); @@ -274,18 +222,18 @@ public partial class ShellViewModel : ObservableObject, Logger.LogDebug($"Invoking command"); WeakReferenceMessenger.Default.Send(); - StartInvoke(message, invokable); + StartInvoke(message, invokable, host); } } catch (Exception ex) { // TODO: It would be better to do this as a page exception, rather // than a silent log message. - CommandPaletteHost.Instance.Log(ex.Message); + host?.Log(ex.Message); } } - private void StartInvoke(PerformCommandMessage message, IInvokableCommand invokable) + private void StartInvoke(PerformCommandMessage message, IInvokableCommand invokable, AppExtensionHost? host) { // TODO GH #525 This needs more better locking. lock (_invokeLock) @@ -298,13 +246,13 @@ public partial class ShellViewModel : ObservableObject, { _handleInvokeTask = Task.Run(() => { - SafeHandleInvokeCommandSynchronous(message, invokable); + SafeHandleInvokeCommandSynchronous(message, invokable, host); }); } } } - private void SafeHandleInvokeCommandSynchronous(PerformCommandMessage message, IInvokableCommand invokable) + private void SafeHandleInvokeCommandSynchronous(PerformCommandMessage message, IInvokableCommand invokable, AppExtensionHost? host) { try { @@ -324,7 +272,7 @@ public partial class ShellViewModel : ObservableObject, // TODO: It would be better to do this as a page exception, rather // than a silent log message. - CommandPaletteHost.Instance.Log(ex.Message); + host?.Log(ex.Message); } } @@ -399,41 +347,9 @@ public partial class ShellViewModel : ObservableObject, } } - public void SetActiveExtension(IExtensionWrapper? extension) - { - if (extension != _activeExtension) - { - // There's not really a CoDisallowSetForegroundWindow, so we don't - // need to handle that - _activeExtension = extension; - - var extensionWinRtObject = _activeExtension?.GetExtensionObject(); - if (extensionWinRtObject != null) - { - try - { - unsafe - { - var winrtObj = (IWinRTObject)extensionWinRtObject; - var intPtr = winrtObj.NativeObject.ThisPtr; - var hr = Native.CoAllowSetForegroundWindow(intPtr); - if (hr != 0) - { - Logger.LogWarning($"Error giving foreground rights: 0x{hr.Value:X8}"); - } - } - } - catch (Exception ex) - { - Logger.LogError(ex.ToString()); - } - } - } - } - public void GoHome(bool withAnimation = true, bool focusSearch = true) { - SetActiveExtension(null); + _rootPageService.GoHome(); WeakReferenceMessenger.Default.Send(new(withAnimation, focusSearch)); } @@ -442,20 +358,6 @@ public partial class ShellViewModel : ObservableObject, WeakReferenceMessenger.Default.Send(new(withAnimation, focusSearch)); } - // You may ask yourself, why aren't we using CsWin32 for this? - // The CsWin32 projected version includes some object marshalling, like so: - // - // HRESULT CoAllowSetForegroundWindow([MarshalAs(UnmanagedType.IUnknown)] object pUnk,...) - // - // And if you do it like that, then the IForegroundTransfer interface isn't marshalled correctly - internal sealed class Native - { - [DllImport("OLE32.dll", ExactSpelling = true)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - [SupportedOSPlatform("windows5.0")] - internal static extern unsafe global::Windows.Win32.Foundation.HRESULT CoAllowSetForegroundWindow(nint pUnk, [Optional] void* lpvReserved); - } - private void OnUIThread(Action action) { _ = Task.Factory.StartNew( diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/StatusMessageViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/StatusMessageViewModel.cs similarity index 87% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/StatusMessageViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/StatusMessageViewModel.cs index 32328b0eb1..fb8b333637 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/StatusMessageViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/StatusMessageViewModel.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class StatusMessageViewModel : ExtensionObjectViewModel { @@ -15,14 +15,10 @@ public partial class StatusMessageViewModel : ExtensionObjectViewModel public MessageState State { get; private set; } = MessageState.Info; - public string ExtensionPfn { get; set; } = string.Empty; - public ProgressViewModel? Progress { get; private set; } public bool HasProgress => Progress != null; - // public bool IsIndeterminate => Progress != null && Progress.IsIndeterminate; - // public double ProgressValue => (Progress?.ProgressPercent ?? 0) / 100.0; public StatusMessageViewModel(IStatusMessage message, WeakReference context) : base(context) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TagViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/TagViewModel.cs similarity index 91% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TagViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/TagViewModel.cs index 414f1882a5..98ea66f4e8 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TagViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/TagViewModel.cs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class TagViewModel(ITag _tag, WeakReference context) : ExtensionObjectViewModel(context) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ToastViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ToastViewModel.cs similarity index 81% rename from src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ToastViewModel.cs rename to src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ToastViewModel.cs index 156a47f557..719d7edd5d 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ToastViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.Core.ViewModels/ToastViewModel.cs @@ -4,9 +4,9 @@ using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Messaging; -using Microsoft.CmdPal.UI.ViewModels.Messages; +using Microsoft.CmdPal.Core.ViewModels.Messages; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class ToastViewModel : ObservableObject { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/AliasManager.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/AliasManager.cs index 2d5fd66145..131d633940 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/AliasManager.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/AliasManager.cs @@ -4,7 +4,7 @@ using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Messaging; -using Microsoft.CmdPal.UI.ViewModels.Messages; +using Microsoft.CmdPal.Core.ViewModels.Messages; namespace Microsoft.CmdPal.UI.ViewModels; @@ -38,7 +38,8 @@ public partial class AliasManager : ObservableObject if (topLevelCommand != null) { WeakReferenceMessenger.Default.Send(); - WeakReferenceMessenger.Default.Send(new(topLevelCommand)); + + WeakReferenceMessenger.Default.Send(topLevelCommand.GetPerformCommandMessage()); return true; } } diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandPaletteContentPageViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandPaletteContentPageViewModel.cs new file mode 100644 index 0000000000..e3cd8a92d7 --- /dev/null +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandPaletteContentPageViewModel.cs @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Microsoft.CmdPal.Core.ViewModels; +using Microsoft.CommandPalette.Extensions; + +namespace Microsoft.CmdPal.UI.ViewModels; + +public partial class CommandPaletteContentPageViewModel : ContentPageViewModel +{ + public CommandPaletteContentPageViewModel(IContentPage model, TaskScheduler scheduler, AppExtensionHost host) + : base(model, scheduler, host) + { + } + + public override ContentViewModel? ViewModelFromContent(IContent content, WeakReference context) + { + ContentViewModel? viewModel = content switch + { + IFormContent form => new ContentFormViewModel(form, context), + IMarkdownContent markdown => new ContentMarkdownViewModel(markdown, context), + ITreeContent tree => new ContentTreeViewModel(tree, context), + _ => null, + }; + return viewModel; + } +} diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandPaletteHost.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandPaletteHost.cs index 9aa12dc037..ab507950c5 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandPaletteHost.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandPaletteHost.cs @@ -1,35 +1,19 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using System.Collections.ObjectModel; -using System.Diagnostics; -using ManagedCommon; using Microsoft.CmdPal.Common.Services; +using Microsoft.CmdPal.Core.ViewModels; using Microsoft.CommandPalette.Extensions; -using Microsoft.CommandPalette.Extensions.Toolkit; -using Windows.Foundation; namespace Microsoft.CmdPal.UI.ViewModels; -public sealed partial class CommandPaletteHost : IExtensionHost +public sealed partial class CommandPaletteHost : AppExtensionHost, IExtensionHost { // Static singleton, so that we can access this from anywhere // Post MVVM - this should probably be like, a dependency injection thing. public static CommandPaletteHost Instance { get; } = new(); - private static readonly GlobalLogPageContext _globalLogPageContext = new(); - - private static ulong _hostingHwnd; - - public ulong HostingHwnd => _hostingHwnd; - - public string LanguageOverride => string.Empty; - - public static ObservableCollection LogMessages { get; } = []; - - public ObservableCollection StatusMessages { get; } = []; - public IExtensionWrapper? Extension { get; } private readonly ICommandProvider? _builtInProvider; @@ -48,145 +32,8 @@ public sealed partial class CommandPaletteHost : IExtensionHost _builtInProvider = builtInProvider; } - public IAsyncAction ShowStatus(IStatusMessage? message, StatusContext context) + public override string? GetExtensionDisplayName() { - if (message == null) - { - return Task.CompletedTask.AsAsyncAction(); - } - - Debug.WriteLine(message.Message); - - _ = Task.Run(() => - { - ProcessStatusMessage(message, context); - }); - - return Task.CompletedTask.AsAsyncAction(); - } - - public IAsyncAction HideStatus(IStatusMessage? message) - { - if (message == null) - { - return Task.CompletedTask.AsAsyncAction(); - } - - _ = Task.Run(() => - { - ProcessHideStatusMessage(message); - }); - return Task.CompletedTask.AsAsyncAction(); - } - - public IAsyncAction LogMessage(ILogMessage? message) - { - if (message == null) - { - return Task.CompletedTask.AsAsyncAction(); - } - - Logger.LogDebug(message.Message); - - _ = Task.Run(() => - { - ProcessLogMessage(message); - }); - - // We can't just make a LogMessageViewModel : ExtensionObjectViewModel - // because we don't necessarily know the page context. Butts. - return Task.CompletedTask.AsAsyncAction(); - } - - public void ProcessLogMessage(ILogMessage message) - { - var vm = new LogMessageViewModel(message, _globalLogPageContext); - vm.SafeInitializePropertiesSynchronous(); - - if (Extension != null) - { - vm.ExtensionPfn = Extension.PackageFamilyName; - } - - Task.Factory.StartNew( - () => - { - LogMessages.Add(vm); - }, - CancellationToken.None, - TaskCreationOptions.None, - _globalLogPageContext.Scheduler); - } - - public void ProcessStatusMessage(IStatusMessage message, StatusContext context) - { - // If this message is already in the list of messages, just bring it to the top - var oldVm = StatusMessages.Where(messageVM => messageVM.Model.Unsafe == message).FirstOrDefault(); - if (oldVm != null) - { - Task.Factory.StartNew( - () => - { - StatusMessages.Remove(oldVm); - StatusMessages.Add(oldVm); - }, - CancellationToken.None, - TaskCreationOptions.None, - _globalLogPageContext.Scheduler); - return; - } - - var vm = new StatusMessageViewModel(message, new(_globalLogPageContext)); - vm.SafeInitializePropertiesSynchronous(); - - if (Extension != null) - { - vm.ExtensionPfn = Extension.PackageFamilyName; - } - - Task.Factory.StartNew( - () => - { - StatusMessages.Add(vm); - }, - CancellationToken.None, - TaskCreationOptions.None, - _globalLogPageContext.Scheduler); - } - - public void ProcessHideStatusMessage(IStatusMessage message) - { - Task.Factory.StartNew( - () => - { - try - { - var vm = StatusMessages.Where(messageVM => messageVM.Model.Unsafe == message).FirstOrDefault(); - if (vm != null) - { - StatusMessages.Remove(vm); - } - } - catch - { - } - }, - CancellationToken.None, - TaskCreationOptions.None, - _globalLogPageContext.Scheduler); - } - - public static void SetHostHwnd(ulong hostHwnd) => _hostingHwnd = hostHwnd; - - public void DebugLog(string message) - { -#if DEBUG - this.ProcessLogMessage(new LogMessage(message)); -#endif - } - - public void Log(string message) - { - this.ProcessLogMessage(new LogMessage(message)); + return Extension?.ExtensionDisplayName; } } diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandPalettePageViewModelFactory.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandPalettePageViewModelFactory.cs new file mode 100644 index 0000000000..90e70d7fef --- /dev/null +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandPalettePageViewModelFactory.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Microsoft.CmdPal.Core.ViewModels; +using Microsoft.CommandPalette.Extensions; + +namespace Microsoft.CmdPal.UI.ViewModels; + +public class CommandPalettePageViewModelFactory + : IPageViewModelFactoryService +{ + private readonly TaskScheduler _scheduler; + + public CommandPalettePageViewModelFactory(TaskScheduler scheduler) + { + _scheduler = scheduler; + } + + public PageViewModel? TryCreatePageViewModel(IPage page, bool nested, AppExtensionHost host) + { + return page switch + { + IListPage listPage => new ListViewModel(listPage, _scheduler, host) { IsNested = nested }, + IContentPage contentPage => new CommandPaletteContentPageViewModel(contentPage, _scheduler, host), + _ => null, + }; + } +} diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandProviderWrapper.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandProviderWrapper.cs index 302fe448ab..852babe4b7 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandProviderWrapper.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandProviderWrapper.cs @@ -4,7 +4,8 @@ using ManagedCommon; using Microsoft.CmdPal.Common.Services; -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; using Microsoft.Extensions.DependencyInjection; diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandSettingsViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandSettingsViewModel.cs index f6cc2cd5a9..a23cb4621e 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandSettingsViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandSettingsViewModel.cs @@ -3,10 +3,11 @@ // See the LICENSE file in the project root for more information. using ManagedCommon; -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels.Models; +using Microsoft.CmdPal.UI.ViewModels; using Microsoft.CommandPalette.Extensions; -namespace Microsoft.CmdPal.UI.ViewModels; +namespace Microsoft.CmdPal.Core.ViewModels; public partial class CommandSettingsViewModel(ICommandSettings? _unsafeSettings, CommandProviderWrapper provider, TaskScheduler mainThread) { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/BuiltInsCommandProvider.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/BuiltInsCommandProvider.cs index 9552e108ef..3a3a9bd405 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/BuiltInsCommandProvider.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/BuiltInsCommandProvider.cs @@ -2,7 +2,7 @@ // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Messages; +using Microsoft.CmdPal.Core.ViewModels.Messages; using Microsoft.CommandPalette.Extensions; using Microsoft.CommandPalette.Extensions.Toolkit; diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/BuiltinsExtensionHost.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/BuiltinsExtensionHost.cs index f643f0fc84..9b8bd8ed48 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/BuiltinsExtensionHost.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/BuiltinsExtensionHost.cs @@ -2,15 +2,7 @@ // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using System.Diagnostics.CodeAnalysis; -using System.IO.Compression; -using System.Text.Json; -using System.Text.Json.Nodes; using Microsoft.CmdPal.Common; -using Microsoft.CmdPal.UI.ViewModels.Messages; -using Microsoft.CommandPalette.Extensions; -using Microsoft.CommandPalette.Extensions.Toolkit; -using Windows.Foundation; namespace Microsoft.CmdPal.UI.ViewModels.BuiltinCommands; diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/LogMessagesPage.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/LogMessagesPage.cs index e0be3beb90..acb04889fb 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/LogMessagesPage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/LogMessagesPage.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using System.Collections.Specialized; +using Microsoft.CmdPal.Core.ViewModels; using Microsoft.CommandPalette.Extensions; using Microsoft.CommandPalette.Extensions.Toolkit; @@ -10,7 +11,7 @@ namespace Microsoft.CmdPal.UI.ViewModels.Commands; public partial class LogMessagesPage : ListPage { - private readonly List _listItems = new(); + private readonly List _listItems = []; public LogMessagesPage() { @@ -31,7 +32,6 @@ public partial class LogMessagesPage : ListPage var li = new ListItem(new NoOpCommand()) { Title = logMessageViewModel.Message, - Subtitle = logMessageViewModel.ExtensionPfn, }; _listItems.Insert(0, li); } diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/MainListPage.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/MainListPage.cs index 04277083ef..5be7c872c3 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/MainListPage.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/MainListPage.cs @@ -6,8 +6,8 @@ using System.Collections.Immutable; using System.Collections.Specialized; using CommunityToolkit.Mvvm.Messaging; using ManagedCommon; +using Microsoft.CmdPal.Core.ViewModels.Messages; using Microsoft.CmdPal.Ext.Apps; -using Microsoft.CmdPal.UI.ViewModels.Messages; using Microsoft.CommandPalette.Extensions; using Microsoft.CommandPalette.Extensions.Toolkit; using Microsoft.Extensions.DependencyInjection; diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/NewExtensionFormBase.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/NewExtensionFormBase.cs index e68fef10a4..5a68c2a2cf 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/NewExtensionFormBase.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/NewExtensionFormBase.cs @@ -6,7 +6,7 @@ using System.Diagnostics.CodeAnalysis; using System.IO.Compression; using System.Text.Json; using System.Text.Json.Nodes; -using Microsoft.CmdPal.UI.ViewModels.Messages; +using Microsoft.CmdPal.Core.ViewModels.Messages; using Microsoft.CommandPalette.Extensions; using Microsoft.CommandPalette.Extensions.Toolkit; using Windows.Foundation; diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/OpenSettingsCommand.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/OpenSettingsCommand.cs index 91d6d3c9e3..a5af351fd4 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/OpenSettingsCommand.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/OpenSettingsCommand.cs @@ -3,7 +3,7 @@ // See the LICENSE file in the project root for more information. using CommunityToolkit.Mvvm.Messaging; -using Microsoft.CmdPal.UI.ViewModels.Messages; +using Microsoft.CmdPal.Core.ViewModels.Messages; using Microsoft.CommandPalette.Extensions; using Microsoft.CommandPalette.Extensions.Toolkit; diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/QuitAction.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/QuitAction.cs index bd3cee3159..313685f6f2 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/QuitAction.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/QuitAction.cs @@ -3,7 +3,7 @@ // See the LICENSE file in the project root for more information. using CommunityToolkit.Mvvm.Messaging; -using Microsoft.CmdPal.UI.ViewModels.Messages; +using Microsoft.CmdPal.Core.ViewModels.Messages; using Microsoft.CommandPalette.Extensions; using Microsoft.CommandPalette.Extensions.Toolkit; diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/ReloadExtensionsCommand.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/ReloadExtensionsCommand.cs index c2fb9f916b..77efb05a73 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/ReloadExtensionsCommand.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/ReloadExtensionsCommand.cs @@ -3,7 +3,7 @@ // See the LICENSE file in the project root for more information. using CommunityToolkit.Mvvm.Messaging; -using Microsoft.CmdPal.UI.ViewModels.Messages; +using Microsoft.CmdPal.Core.ViewModels.Messages; using Microsoft.CommandPalette.Extensions; using Microsoft.CommandPalette.Extensions.Toolkit; diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContentFormViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContentFormViewModel.cs index 5477242a32..d561a0e00f 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContentFormViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContentFormViewModel.cs @@ -7,8 +7,9 @@ using AdaptiveCards.ObjectModel.WinUI3; using AdaptiveCards.Templating; using CommunityToolkit.Mvvm.Messaging; using ManagedCommon; -using Microsoft.CmdPal.UI.ViewModels.Messages; -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels; +using Microsoft.CmdPal.Core.ViewModels.Messages; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; using Windows.Data.Json; diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContentMarkdownViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContentMarkdownViewModel.cs index c8508e414a..8ae0935f12 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContentMarkdownViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContentMarkdownViewModel.cs @@ -2,7 +2,8 @@ // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; namespace Microsoft.CmdPal.UI.ViewModels; diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContentTreeViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContentTreeViewModel.cs index 77734921aa..6368f86ac6 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContentTreeViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ContentTreeViewModel.cs @@ -3,7 +3,8 @@ // See the LICENSE file in the project root for more information. using System.Collections.ObjectModel; -using Microsoft.CmdPal.UI.ViewModels.Models; +using Microsoft.CmdPal.Core.ViewModels; +using Microsoft.CmdPal.Core.ViewModels.Models; using Microsoft.CommandPalette.Extensions; using Microsoft.CommandPalette.Extensions.Toolkit; @@ -37,7 +38,7 @@ public partial class ContentTreeViewModel(ITreeContent _tree, WeakReference context) + { + ContentViewModel? viewModel = content switch + { + IFormContent form => new ContentFormViewModel(form, context), + IMarkdownContent markdown => new ContentMarkdownViewModel(markdown, context), + ITreeContent tree => new ContentTreeViewModel(tree, context), + _ => null, + }; + return viewModel; + } + // TODO: Does this need to hop to a _different_ thread, so that we don't block the extension while we're fetching? private void Model_ItemsChanged(object sender, IItemsChangedEventArgs args) => FetchContent(); @@ -78,7 +93,7 @@ public partial class ContentTreeViewModel(ITreeContent _tree, WeakReference + diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Models/ExtensionWrapper.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Models/ExtensionWrapper.cs index 5b4eee44ef..5cab466b6f 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Models/ExtensionWrapper.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Models/ExtensionWrapper.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation +// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. @@ -12,7 +12,6 @@ using Windows.Win32; using Windows.Win32.System.Com; using WinRT; -// [assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling] namespace Microsoft.CmdPal.UI.ViewModels.Models; public class ExtensionWrapper : IExtensionWrapper diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ProviderSettingsViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ProviderSettingsViewModel.cs index 61bb7f946d..3c8e402364 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ProviderSettingsViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ProviderSettingsViewModel.cs @@ -6,7 +6,8 @@ using System.Diagnostics.CodeAnalysis; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Messaging; using Microsoft.CmdPal.Common.Services; -using Microsoft.CmdPal.UI.ViewModels.Messages; +using Microsoft.CmdPal.Core.ViewModels; +using Microsoft.CmdPal.Core.ViewModels.Messages; using Microsoft.CmdPal.UI.ViewModels.Properties; using Microsoft.Extensions.DependencyInjection; diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelCommandManager.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelCommandManager.cs index d9beb0995d..b4f6542c93 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelCommandManager.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelCommandManager.cs @@ -10,7 +10,8 @@ using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Messaging; using ManagedCommon; using Microsoft.CmdPal.Common.Services; -using Microsoft.CmdPal.UI.ViewModels.Messages; +using Microsoft.CmdPal.Core.ViewModels; +using Microsoft.CmdPal.Core.ViewModels.Messages; using Microsoft.CommandPalette.Extensions; using Microsoft.CommandPalette.Extensions.Toolkit; using Microsoft.Extensions.DependencyInjection; diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelViewModel.cs index 16704e6cf7..dabfdca3f6 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelViewModel.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelViewModel.cs @@ -6,7 +6,8 @@ using System.Collections.ObjectModel; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Messaging; using ManagedCommon; -using Microsoft.CmdPal.UI.ViewModels.Messages; +using Microsoft.CmdPal.Core.ViewModels; +using Microsoft.CmdPal.Core.ViewModels.Messages; using Microsoft.CmdPal.UI.ViewModels.Settings; using Microsoft.CommandPalette.Extensions; using Microsoft.CommandPalette.Extensions.Toolkit; @@ -254,7 +255,7 @@ public sealed partial class TopLevelViewModel : ObservableObject, IListItem private void UpdateTags() { - List tags = new(); + List tags = []; if (Hotkey != null) { @@ -341,4 +342,9 @@ public sealed partial class TopLevelViewModel : ObservableObject, IListItem return false; } + + public PerformCommandMessage GetPerformCommandMessage() + { + return new PerformCommandMessage(this.CommandViewModel.Model, new Core.ViewModels.Models.ExtensionObject(this)); + } } diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI/App.xaml.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI/App.xaml.cs index 1007998f7c..36c742ba7f 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI/App.xaml.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI/App.xaml.cs @@ -5,6 +5,7 @@ using ManagedCommon; using Microsoft.CmdPal.Common.Helpers; using Microsoft.CmdPal.Common.Services; +using Microsoft.CmdPal.Core.ViewModels; using Microsoft.CmdPal.Ext.Apps; using Microsoft.CmdPal.Ext.Bookmarks; using Microsoft.CmdPal.Ext.Calc; @@ -145,11 +146,12 @@ public partial class App : Application services.AddSingleton(); services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(new TelemetryForwarder()); // ViewModels services.AddSingleton(); - services.AddSingleton(); + services.AddSingleton(); return services.BuildServiceProvider(); } diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/CommandBar.xaml b/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/CommandBar.xaml index 1bbd0ab619..0edcf04a9c 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/CommandBar.xaml +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/CommandBar.xaml @@ -6,6 +6,7 @@ xmlns:animations="using:CommunityToolkit.WinUI.Animations" xmlns:cmdpalUI="using:Microsoft.CmdPal.UI" xmlns:converters="using:CommunityToolkit.WinUI.Converters" + xmlns:coreViewModels="using:Microsoft.CmdPal.Core.ViewModels" xmlns:cpcontrols="using:Microsoft.CmdPal.UI.Controls" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:help="using:Microsoft.CmdPal.UI.Helpers" @@ -87,7 +88,7 @@ ItemsSource="{x:Bind CurrentPageViewModel.StatusMessages, Mode=OneWay}" Layout="{StaticResource VerticalStackLayout}"> - + @@ -27,7 +28,7 @@ Separator="{StaticResource SeparatorContextMenuViewModelTemplate}" /> - + @@ -57,7 +58,7 @@ - + @@ -88,7 +89,7 @@ - + - + - + - + - +