From 7b8474907f5f713d58efe7739baa814ec9ec9fb4 Mon Sep 17 00:00:00 2001 From: GabrielDuf Date: Mon, 13 Jul 2026 08:52:19 -0400 Subject: [PATCH 1/2] Fix uninstall-then-update/reinstall running the uninstall twice (#5036) --- .../Views/SoftwarePages/InstalledPackagesPage.cs | 2 +- .../Views/SoftwarePages/SoftwareUpdatesPage.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/UniGetUI.Avalonia/Views/SoftwarePages/InstalledPackagesPage.cs b/src/UniGetUI.Avalonia/Views/SoftwarePages/InstalledPackagesPage.cs index c7db88f6ec..17bd0182db 100644 --- a/src/UniGetUI.Avalonia/Views/SoftwarePages/InstalledPackagesPage.cs +++ b/src/UniGetUI.Avalonia/Views/SoftwarePages/InstalledPackagesPage.cs @@ -381,7 +381,7 @@ private static async Task LaunchUninstallThenReinstall(IPackage? package) reinstallOp.OperationFailed += (_, _) => TelemetryHandler.InstallPackage(package, TEL_OP_RESULT.FAILED, TEL_InstallReferral.ALREADY_INSTALLED); AvaloniaOperationRegistry.Add(uninstallOp); AvaloniaOperationRegistry.Add(reinstallOp); - _ = uninstallOp.MainThread(); + // uninstallOp runs as reinstallOp's prerequisite; launching it directly too would execute it twice concurrently _ = reinstallOp.MainThread(); } diff --git a/src/UniGetUI.Avalonia/Views/SoftwarePages/SoftwareUpdatesPage.cs b/src/UniGetUI.Avalonia/Views/SoftwarePages/SoftwareUpdatesPage.cs index 594f750560..27fa38c008 100644 --- a/src/UniGetUI.Avalonia/Views/SoftwarePages/SoftwareUpdatesPage.cs +++ b/src/UniGetUI.Avalonia/Views/SoftwarePages/SoftwareUpdatesPage.cs @@ -368,7 +368,7 @@ private static async Task LaunchUninstallThenUpdate(IPackage? package) updateOp.OperationFailed += (_, _) => TelemetryHandler.UpdatePackage(package, TEL_OP_RESULT.FAILED); AvaloniaOperationRegistry.Add(uninstallOp); AvaloniaOperationRegistry.Add(updateOp); - _ = uninstallOp.MainThread(); + // uninstallOp runs as updateOp's prerequisite; launching it directly too would execute it twice concurrently _ = updateOp.MainThread(); } From 1699f54944b6e7dba4bf24562e8e066c5e0a8d97 Mon Sep 17 00:00:00 2001 From: GabrielDuf Date: Mon, 13 Jul 2026 09:25:29 -0400 Subject: [PATCH 2/2] Install the new version instead of updating in uninstall-then-update (#5036) --- .../Views/SoftwarePages/SoftwareUpdatesPage.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/UniGetUI.Avalonia/Views/SoftwarePages/SoftwareUpdatesPage.cs b/src/UniGetUI.Avalonia/Views/SoftwarePages/SoftwareUpdatesPage.cs index 27fa38c008..fa7bfe845b 100644 --- a/src/UniGetUI.Avalonia/Views/SoftwarePages/SoftwareUpdatesPage.cs +++ b/src/UniGetUI.Avalonia/Views/SoftwarePages/SoftwareUpdatesPage.cs @@ -363,7 +363,8 @@ private static async Task LaunchUninstallThenUpdate(IPackage? package) var uninstallOp = new UninstallPackageOperation(package, uninstallOpts); uninstallOp.OperationSucceeded += (_, _) => TelemetryHandler.UninstallPackage(package, TEL_OP_RESULT.SUCCESS); uninstallOp.OperationFailed += (_, _) => TelemetryHandler.UninstallPackage(package, TEL_OP_RESULT.FAILED); - var updateOp = new UpdatePackageOperation(package, updateOpts, req: uninstallOp); + // Once uninstalled the package is gone, so the second step must install the new version fresh; a plain update would fail with "no installed package found". + var updateOp = new InstallPackageOperation(package, updateOpts, req: uninstallOp); updateOp.OperationSucceeded += (_, _) => TelemetryHandler.UpdatePackage(package, TEL_OP_RESULT.SUCCESS); updateOp.OperationFailed += (_, _) => TelemetryHandler.UpdatePackage(package, TEL_OP_RESULT.FAILED); AvaloniaOperationRegistry.Add(uninstallOp);