From 1a2e5160e3a26bafcdca2880683e4b7156340eea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Wed, 29 May 2024 22:08:57 +0200 Subject: [PATCH] Force uninstall-then-reinstall operations to always queue, ignoring any parallel setting (fix #2063) --- .../SoftwarePages/NewInstalledPackagesPage.cs | 4 ++-- .../SoftwarePages/NewSoftwareUpdatesPage.cs | 4 ++-- .../Operations/OperationControl.xaml.cs | 5 ++++- .../Operations/PackageOperations.cs | 18 +++++++++--------- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/UniGetUI/Interface/SoftwarePages/NewInstalledPackagesPage.cs b/src/UniGetUI/Interface/SoftwarePages/NewInstalledPackagesPage.cs index e87ebd705..2bdc2cd04 100644 --- a/src/UniGetUI/Interface/SoftwarePages/NewInstalledPackagesPage.cs +++ b/src/UniGetUI/Interface/SoftwarePages/NewInstalledPackagesPage.cs @@ -474,8 +474,8 @@ private void MenuUninstallThenReinstall_Invoked(object sender, RoutedEventArgs a var package = PackageList.SelectedItem as Package; if (!Initialized || package == null) return; - MainApp.Instance.AddOperationToList(new UninstallPackageOperation(package)); - MainApp.Instance.AddOperationToList(new InstallPackageOperation(package)); + MainApp.Instance.AddOperationToList(new UninstallPackageOperation(package, IgnoreParallelInstalls: true)); + MainApp.Instance.AddOperationToList(new InstallPackageOperation(package, IgnoreParallelInstalls: true)); } private void MenuIgnorePackage_Invoked(object sender, RoutedEventArgs args) diff --git a/src/UniGetUI/Interface/SoftwarePages/NewSoftwareUpdatesPage.cs b/src/UniGetUI/Interface/SoftwarePages/NewSoftwareUpdatesPage.cs index 9d84bf718..505906653 100644 --- a/src/UniGetUI/Interface/SoftwarePages/NewSoftwareUpdatesPage.cs +++ b/src/UniGetUI/Interface/SoftwarePages/NewSoftwareUpdatesPage.cs @@ -496,8 +496,8 @@ private void MenuUpdateAfterUninstall_Invoked(object sender, RoutedEventArgs e) var package = PackageList.SelectedItem as Package; if (!Initialized || package == null) return; - MainApp.Instance.AddOperationToList(new UninstallPackageOperation(package)); - MainApp.Instance.AddOperationToList(new InstallPackageOperation(package)); + MainApp.Instance.AddOperationToList(new UninstallPackageOperation(package, IgnoreParallelInstalls: true)); + MainApp.Instance.AddOperationToList(new InstallPackageOperation(package, IgnoreParallelInstalls: true)); } private void MenuUninstall_Invoked(object sender, RoutedEventArgs e) diff --git a/src/UniGetUI/PackageEngine/Operations/OperationControl.xaml.cs b/src/UniGetUI/PackageEngine/Operations/OperationControl.xaml.cs index 5b7f55a00..2f253ea36 100644 --- a/src/UniGetUI/PackageEngine/Operations/OperationControl.xaml.cs +++ b/src/UniGetUI/PackageEngine/Operations/OperationControl.xaml.cs @@ -175,8 +175,11 @@ public OperationStatus Status } } } - public AbstractOperation() + protected bool IGNORE_PARALLEL_OPERATION_SETTINGS = false; + public AbstractOperation(bool IgnoreParallelInstalls = false) { + IGNORE_PARALLEL_OPERATION_SETTINGS = IgnoreParallelInstalls; + InitializeComponent(); OutputDialog = new ContentDialog(); diff --git a/src/UniGetUI/PackageEngine/Operations/PackageOperations.cs b/src/UniGetUI/PackageEngine/Operations/PackageOperations.cs index f88132d44..34ef99a93 100644 --- a/src/UniGetUI/PackageEngine/Operations/PackageOperations.cs +++ b/src/UniGetUI/PackageEngine/Operations/PackageOperations.cs @@ -36,7 +36,7 @@ public abstract class PackageOperation : AbstractOperation public Package Package; protected InstallationOptions Options; - public PackageOperation(Package package, InstallationOptions options) + public PackageOperation(Package package, InstallationOptions options, bool IgnoreParallelInstalls = false) : base(IgnoreParallelInstalls) { Package = package; Options = options; @@ -45,7 +45,7 @@ public PackageOperation(Package package, InstallationOptions options) protected override async Task WaitForAvailability() { - if (Settings.Get("AllowParallelInstalls") || Settings.Get("AllowParallelInstallsForManager" + Package.Manager.Name)) + if (!IGNORE_PARALLEL_OPERATION_SETTINGS && (Settings.Get("AllowParallelInstalls") || Settings.Get($"AllowParallelInstallsForManager{Package.Manager.Name}"))) { Logger.Debug("Parallel installs are allowed. Skipping queue check"); return; @@ -75,14 +75,14 @@ protected override async Task WaitForAvailability() Package.SetTag(PackageTag.BeingProcessed); } - public PackageOperation(Package package) : this(package, new InstallationOptions(package)) { } + public PackageOperation(Package package, bool IgnoreParallelInstalls = false) : this(package, new InstallationOptions(package), IgnoreParallelInstalls) { } } public class InstallPackageOperation : PackageOperation { - public InstallPackageOperation(Package package, InstallationOptions options) : base(package, options) { } - public InstallPackageOperation(Package package) : base(package) { } + public InstallPackageOperation(Package package, InstallationOptions options, bool IgnoreParallelInstalls = false) : base(package, options, IgnoreParallelInstalls) { } + public InstallPackageOperation(Package package, bool IgnoreParallelInstalls = false) : base(package, IgnoreParallelInstalls) { } protected override Process BuildProcessInstance(ProcessStartInfo startInfo) { if (Options.RunAsAdministrator || Settings.Get("AlwaysElevate" + Package.Manager.Name)) @@ -227,8 +227,8 @@ protected override async void Initialize() public class UpdatePackageOperation : PackageOperation { - public UpdatePackageOperation(Package package, InstallationOptions options) : base(package, options) { } - public UpdatePackageOperation(Package package) : base(package) { } + public UpdatePackageOperation(Package package, InstallationOptions options, bool IgnoreParallelInstalls = false) : base(package, options, IgnoreParallelInstalls) { } + public UpdatePackageOperation(Package package, bool IgnoreParallelInstalls = false) : base(package, IgnoreParallelInstalls) { } protected override Process BuildProcessInstance(ProcessStartInfo startInfo) { if (Options.RunAsAdministrator || Settings.Get("AlwaysElevate" + Package.Manager.Name)) @@ -379,8 +379,8 @@ protected override async void Initialize() public class UninstallPackageOperation : PackageOperation { - public UninstallPackageOperation(Package package, InstallationOptions options) : base(package, options) { } - public UninstallPackageOperation(Package package) : base(package) { } + public UninstallPackageOperation(Package package, InstallationOptions options, bool IgnoreParallelInstalls = false) : base(package, options, IgnoreParallelInstalls) { } + public UninstallPackageOperation(Package package, bool IgnoreParallelInstalls = false) : base(package, IgnoreParallelInstalls) { } protected override Process BuildProcessInstance(ProcessStartInfo startInfo) { if (Options.RunAsAdministrator || Settings.Get("AlwaysElevate" + Package.Manager.Name))