diff --git a/src/modules/cmdpal/exts/Microsoft.CmdPal.Ext.WinGet/Pages/InstallPackageCommand.cs b/src/modules/cmdpal/exts/Microsoft.CmdPal.Ext.WinGet/Pages/InstallPackageCommand.cs index 22fccadefa..1aa22bfa26 100644 --- a/src/modules/cmdpal/exts/Microsoft.CmdPal.Ext.WinGet/Pages/InstallPackageCommand.cs +++ b/src/modules/cmdpal/exts/Microsoft.CmdPal.Ext.WinGet/Pages/InstallPackageCommand.cs @@ -17,7 +17,6 @@ namespace Microsoft.CmdPal.Ext.WinGet.Pages; public partial class InstallPackageCommand : InvokableCommand { private readonly CatalogPackage _package; - private readonly StatusMessage _installBanner = new(); private IAsyncOperationWithProgress? _installAction; private IAsyncOperationWithProgress? _unInstallAction; @@ -43,6 +42,8 @@ public partial class InstallPackageCommand : InvokableCommand private static readonly CompositeFormat UninstallPackageFinishing = System.Text.CompositeFormat.Parse(Properties.Resources.winget_uninstall_package_finishing); private static readonly CompositeFormat DownloadProgress = System.Text.CompositeFormat.Parse(Properties.Resources.winget_download_progress); + internal bool SkipDependencies { get; set; } + public InstallPackageCommand(CatalogPackage package, bool isInstalled) { _package = package; @@ -96,6 +97,9 @@ public partial class InstallPackageCommand : InvokableCommand var installOptions = WinGetStatics.WinGetFactory.CreateInstallOptions(); installOptions.PackageInstallScope = PackageInstallScope.Any; + + installOptions.SkipDependencies = SkipDependencies; + _installAction = WinGetStatics.Manager.InstallPackageAsync(_package, installOptions); var handler = new AsyncOperationProgressHandler(OnInstallProgress); diff --git a/src/modules/cmdpal/exts/Microsoft.CmdPal.Ext.WinGet/Pages/InstallPackageListItem.cs b/src/modules/cmdpal/exts/Microsoft.CmdPal.Ext.WinGet/Pages/InstallPackageListItem.cs index df97f39b25..8b1a98d136 100644 --- a/src/modules/cmdpal/exts/Microsoft.CmdPal.Ext.WinGet/Pages/InstallPackageListItem.cs +++ b/src/modules/cmdpal/exts/Microsoft.CmdPal.Ext.WinGet/Pages/InstallPackageListItem.cs @@ -31,7 +31,7 @@ public partial class InstallPackageListItem : ListItem { _package = package; - PackageVersionInfo version = _package.DefaultInstallVersion; + var version = _package.DefaultInstallVersion; var versionTagText = "Unknown"; if (version != null) { @@ -49,16 +49,24 @@ public partial class InstallPackageListItem : ListItem private Details? BuildDetails(PackageVersionInfo? version) { - CatalogPackageMetadata? metadata = version?.GetCatalogPackageMetadata(); + var metadata = version?.GetCatalogPackageMetadata(); if (metadata != null) { + if (metadata.Tags.Where(t => t.Equals(WinGetExtensionPage.ExtensionsTag, StringComparison.OrdinalIgnoreCase)).Any()) + { + if (_installCommand != null) + { + _installCommand.SkipDependencies = true; + } + } + var description = string.IsNullOrEmpty(metadata.Description) ? metadata.ShortDescription : metadata.Description; var detailsBody = $""" {description} """; IconInfo heroIcon = new(string.Empty); - IReadOnlyList icons = metadata.Icons; + var icons = metadata.Icons; if (icons.Count > 0) { // There's also a .Theme property we could probably use to @@ -89,21 +97,23 @@ public partial class InstallPackageListItem : ListItem { Properties.Resources.winget_publisher, (metadata.Publisher, metadata.PublisherUrl) }, { Properties.Resources.winget_copyright, (metadata.Copyright, metadata.CopyrightUrl) }, { Properties.Resources.winget_license, (metadata.License, metadata.LicenseUrl) }, - { Properties.Resources.winget_release_notes, (metadata.ReleaseNotes, string.Empty) }, + { Properties.Resources.winget_publisher_support, (string.Empty, metadata.PublisherSupportUrl) }, // The link to the release notes will only show up if there is an // actual URL for the release notes { Properties.Resources.winget_view_release_notes, (string.IsNullOrEmpty(metadata.ReleaseNotesUrl) ? string.Empty : Properties.Resources.winget_view_online, metadata.ReleaseNotesUrl) }, - { Properties.Resources.winget_publisher_support, (string.Empty, metadata.PublisherSupportUrl) }, + + // These can be l o n g + { Properties.Resources.winget_release_notes, (metadata.ReleaseNotes, string.Empty) }, }; - Documentation[] docs = metadata.Documentations.ToArray(); - foreach (Documentation? item in docs) + var docs = metadata.Documentations.ToArray(); + foreach (var item in docs) { simpleData.Add(item.DocumentLabel, (string.Empty, item.DocumentUrl)); } UriCreationOptions options = default; - foreach (KeyValuePair kv in simpleData) + foreach (var kv in simpleData) { var text = string.IsNullOrEmpty(kv.Value.Item1) ? kv.Value.Item2 : kv.Value.Item1; var target = kv.Value.Item2; @@ -136,8 +146,8 @@ public partial class InstallPackageListItem : ListItem private async void UpdatedInstalledStatus() { - CheckInstalledStatusResult status = await _package.CheckInstalledStatusAsync(); - bool isInstalled = _package.InstalledVersion != null; + var status = await _package.CheckInstalledStatusAsync(); + var isInstalled = _package.InstalledVersion != null; // might be an uninstall command InstallPackageCommand installCommand = new(_package, isInstalled); @@ -155,8 +165,8 @@ public partial class InstallPackageListItem : ListItem if (WinGetStatics.AppSearchCallback != null) { - Func callback = WinGetStatics.AppSearchCallback; - ICommandItem? installedApp = callback(_package.DefaultInstallVersion == null ? _package.Name : _package.DefaultInstallVersion.DisplayName); + var callback = WinGetStatics.AppSearchCallback; + var installedApp = callback(_package.DefaultInstallVersion == null ? _package.Name : _package.DefaultInstallVersion.DisplayName); if (installedApp != null) { this.Command = installedApp.Command; @@ -193,11 +203,11 @@ public partial class InstallPackageListItem : ListItem Stopwatch s = new(); Logger.LogDebug($"Starting RefreshPackageCatalogAsync"); s.Start(); - PackageCatalogReference[] refs = WinGetStatics.AvailableCatalogs.ToArray(); + var refs = WinGetStatics.AvailableCatalogs.ToArray(); - foreach (PackageCatalogReference? catalog in refs) + foreach (var catalog in refs) { - global::Windows.Foundation.IAsyncOperationWithProgress operation = catalog.RefreshPackageCatalogAsync(); + var operation = catalog.RefreshPackageCatalogAsync(); operation.Wait(); }