From dca36cf721ac233b97a3695f2e34c90a89952a77 Mon Sep 17 00:00:00 2001 From: GabrielDuf Date: Fri, 3 Apr 2026 08:25:44 -0400 Subject: [PATCH 1/3] Fix missing WinGet updates --- .../ClientHelpers/NativeWinGetHelper.cs | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/NativeWinGetHelper.cs b/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/NativeWinGetHelper.cs index 185f39522..37f9aa67a 100644 --- a/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/NativeWinGetHelper.cs +++ b/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/NativeWinGetHelper.cs @@ -272,7 +272,7 @@ public IReadOnlyList GetAvailableUpdates_UnSafe() List packages = []; foreach ( var nativePackage in TaskRecycler>.RunOrAttach( - GetLocalWinGetPackages + GetWinGetPackagesForUpdates ) ) { @@ -283,6 +283,14 @@ var nativePackage in TaskRecycler>.RunOrAttach( continue; } + if (nativePackage.DefaultInstallVersion is null) + { + Logger.Warn( + $"WinGet package {nativePackage.Id} has IsUpdateAvailable=true but DefaultInstallVersion is null, skipping" + ); + continue; + } + IManagerSource source; source = Manager.SourcesHelper.Factory.GetSourceOrDefault( nativePackage.DefaultInstallVersion.PackageCatalog.Info.Name @@ -467,6 +475,48 @@ private IReadOnlyList GetLocalWinGetPackages() return foundPackages; } + private IReadOnlyList GetWinGetPackagesForUpdates() + { + var logger = Manager.TaskLogger.CreateNew(LoggableTaskType.OtherTask); + logger.Log("OtherTask: GetWinGetPackagesForUpdates"); + + CreateCompositePackageCatalogOptions createCompositePackageCatalogOptions = Factory.CreateCreateCompositePackageCatalogOptions(); + foreach (var catalogRef in WinGetManager.GetPackageCatalogs().ToArray()) + { + logger.Log($"Adding catalog {catalogRef.Info.Name} to composite catalog"); + createCompositePackageCatalogOptions.Catalogs.Add(catalogRef); + } + + createCompositePackageCatalogOptions.CompositeSearchBehavior = CompositeSearchBehavior.RemotePackagesFromAllCatalogs; + var updateSearchCatalogRef = WinGetManager.CreateCompositePackageCatalog(createCompositePackageCatalogOptions); + var connectResult = updateSearchCatalogRef.Connect(); + + if (connectResult.Status != ConnectResultStatus.Ok) + { + logger.Error("Failed to connect to update catalog. Returning empty list."); + logger.Close(1); + return []; + } + + FindPackagesOptions findPackagesOptions = Factory.CreateFindPackagesOptions(); + PackageMatchFilter filter = Factory.CreatePackageMatchFilter(); + filter.Field = PackageMatchField.Id; + filter.Option = PackageFieldMatchOption.StartsWithCaseInsensitive; + filter.Value = ""; + findPackagesOptions.Filters.Add(filter); + + var taskResult = connectResult.PackageCatalog.FindPackages(findPackagesOptions); + List foundPackages = []; + foreach (var match in taskResult.Matches.ToArray()) + { + if (match.CatalogPackage.InstalledVersion is not null) + foundPackages.Add(match.CatalogPackage); + } + + logger.Close(0); + return foundPackages; + } + public IReadOnlyList GetSources_UnSafe() { List sources = []; From 777f4d4a654bed9fef60377402520fb8aeefb692 Mon Sep 17 00:00:00 2001 From: GabrielDuf Date: Fri, 3 Apr 2026 08:58:04 -0400 Subject: [PATCH 2/3] Apply Copilot suggestions to GetWinGetPackagesForUpdates --- .../ClientHelpers/NativeWinGetHelper.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/NativeWinGetHelper.cs b/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/NativeWinGetHelper.cs index 37f9aa67a..b8639bba2 100644 --- a/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/NativeWinGetHelper.cs +++ b/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/NativeWinGetHelper.cs @@ -489,13 +489,14 @@ private IReadOnlyList GetWinGetPackagesForUpdates() createCompositePackageCatalogOptions.CompositeSearchBehavior = CompositeSearchBehavior.RemotePackagesFromAllCatalogs; var updateSearchCatalogRef = WinGetManager.CreateCompositePackageCatalog(createCompositePackageCatalogOptions); + updateSearchCatalogRef.AcceptSourceAgreements = true; var connectResult = updateSearchCatalogRef.Connect(); if (connectResult.Status != ConnectResultStatus.Ok) { - logger.Error("Failed to connect to update catalog. Returning empty list."); + logger.Error("Failed to connect to update catalog. Aborting."); logger.Close(1); - return []; + throw new InvalidOperationException("WinGet: Failed to connect to update catalog."); } FindPackagesOptions findPackagesOptions = Factory.CreateFindPackagesOptions(); From 7fc70ab9dae8141f28b0fe2ec2c29d1e8f5d7cc0 Mon Sep 17 00:00:00 2001 From: GabrielDuf Date: Fri, 3 Apr 2026 09:10:31 -0400 Subject: [PATCH 3/3] Ensure task logger is always closed in GetWinGetPackagesForUpdates --- .../ClientHelpers/NativeWinGetHelper.cs | 65 ++++++++++--------- 1 file changed, 36 insertions(+), 29 deletions(-) diff --git a/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/NativeWinGetHelper.cs b/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/NativeWinGetHelper.cs index b8639bba2..586fc001e 100644 --- a/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/NativeWinGetHelper.cs +++ b/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/NativeWinGetHelper.cs @@ -480,42 +480,49 @@ private IReadOnlyList GetWinGetPackagesForUpdates() var logger = Manager.TaskLogger.CreateNew(LoggableTaskType.OtherTask); logger.Log("OtherTask: GetWinGetPackagesForUpdates"); - CreateCompositePackageCatalogOptions createCompositePackageCatalogOptions = Factory.CreateCreateCompositePackageCatalogOptions(); - foreach (var catalogRef in WinGetManager.GetPackageCatalogs().ToArray()) + try { - logger.Log($"Adding catalog {catalogRef.Info.Name} to composite catalog"); - createCompositePackageCatalogOptions.Catalogs.Add(catalogRef); - } + CreateCompositePackageCatalogOptions createCompositePackageCatalogOptions = Factory.CreateCreateCompositePackageCatalogOptions(); + foreach (var catalogRef in WinGetManager.GetPackageCatalogs().ToArray()) + { + logger.Log($"Adding catalog {catalogRef.Info.Name} to composite catalog"); + createCompositePackageCatalogOptions.Catalogs.Add(catalogRef); + } - createCompositePackageCatalogOptions.CompositeSearchBehavior = CompositeSearchBehavior.RemotePackagesFromAllCatalogs; - var updateSearchCatalogRef = WinGetManager.CreateCompositePackageCatalog(createCompositePackageCatalogOptions); - updateSearchCatalogRef.AcceptSourceAgreements = true; - var connectResult = updateSearchCatalogRef.Connect(); + createCompositePackageCatalogOptions.CompositeSearchBehavior = CompositeSearchBehavior.RemotePackagesFromAllCatalogs; + var updateSearchCatalogRef = WinGetManager.CreateCompositePackageCatalog(createCompositePackageCatalogOptions); + updateSearchCatalogRef.AcceptSourceAgreements = true; + var connectResult = updateSearchCatalogRef.Connect(); - if (connectResult.Status != ConnectResultStatus.Ok) - { - logger.Error("Failed to connect to update catalog. Aborting."); - logger.Close(1); - throw new InvalidOperationException("WinGet: Failed to connect to update catalog."); - } + if (connectResult.Status != ConnectResultStatus.Ok) + { + logger.Error("Failed to connect to update catalog. Aborting."); + throw new InvalidOperationException("WinGet: Failed to connect to update catalog."); + } - FindPackagesOptions findPackagesOptions = Factory.CreateFindPackagesOptions(); - PackageMatchFilter filter = Factory.CreatePackageMatchFilter(); - filter.Field = PackageMatchField.Id; - filter.Option = PackageFieldMatchOption.StartsWithCaseInsensitive; - filter.Value = ""; - findPackagesOptions.Filters.Add(filter); + FindPackagesOptions findPackagesOptions = Factory.CreateFindPackagesOptions(); + PackageMatchFilter filter = Factory.CreatePackageMatchFilter(); + filter.Field = PackageMatchField.Id; + filter.Option = PackageFieldMatchOption.StartsWithCaseInsensitive; + filter.Value = ""; + findPackagesOptions.Filters.Add(filter); - var taskResult = connectResult.PackageCatalog.FindPackages(findPackagesOptions); - List foundPackages = []; - foreach (var match in taskResult.Matches.ToArray()) + var taskResult = connectResult.PackageCatalog.FindPackages(findPackagesOptions); + List foundPackages = []; + foreach (var match in taskResult.Matches.ToArray()) + { + if (match.CatalogPackage.InstalledVersion is not null) + foundPackages.Add(match.CatalogPackage); + } + + logger.Close(0); + return foundPackages; + } + catch { - if (match.CatalogPackage.InstalledVersion is not null) - foundPackages.Add(match.CatalogPackage); + logger.Close(1); + throw; } - - logger.Close(0); - return foundPackages; } public IReadOnlyList GetSources_UnSafe()