@@ -272,7 +272,7 @@ public IReadOnlyList<Package> GetAvailableUpdates_UnSafe()
272272 List < Package > packages = [ ] ;
273273 foreach (
274274 var nativePackage in TaskRecycler < IReadOnlyList < CatalogPackage > > . RunOrAttach (
275- GetLocalWinGetPackages
275+ GetWinGetPackagesForUpdates
276276 )
277277 )
278278 {
@@ -283,6 +283,14 @@ var nativePackage in TaskRecycler<IReadOnlyList<CatalogPackage>>.RunOrAttach(
283283 continue ;
284284 }
285285
286+ if ( nativePackage . DefaultInstallVersion is null )
287+ {
288+ Logger . Warn (
289+ $ "WinGet package { nativePackage . Id } has IsUpdateAvailable=true but DefaultInstallVersion is null, skipping"
290+ ) ;
291+ continue ;
292+ }
293+
286294 IManagerSource source ;
287295 source = Manager . SourcesHelper . Factory . GetSourceOrDefault (
288296 nativePackage . DefaultInstallVersion . PackageCatalog . Info . Name
@@ -467,6 +475,56 @@ private IReadOnlyList<CatalogPackage> GetLocalWinGetPackages()
467475 return foundPackages ;
468476 }
469477
478+ private IReadOnlyList < CatalogPackage > GetWinGetPackagesForUpdates ( )
479+ {
480+ var logger = Manager . TaskLogger . CreateNew ( LoggableTaskType . OtherTask ) ;
481+ logger . Log ( "OtherTask: GetWinGetPackagesForUpdates" ) ;
482+
483+ try
484+ {
485+ CreateCompositePackageCatalogOptions createCompositePackageCatalogOptions = Factory . CreateCreateCompositePackageCatalogOptions ( ) ;
486+ foreach ( var catalogRef in WinGetManager . GetPackageCatalogs ( ) . ToArray ( ) )
487+ {
488+ logger . Log ( $ "Adding catalog { catalogRef . Info . Name } to composite catalog") ;
489+ createCompositePackageCatalogOptions . Catalogs . Add ( catalogRef ) ;
490+ }
491+
492+ createCompositePackageCatalogOptions . CompositeSearchBehavior = CompositeSearchBehavior . RemotePackagesFromAllCatalogs ;
493+ var updateSearchCatalogRef = WinGetManager . CreateCompositePackageCatalog ( createCompositePackageCatalogOptions ) ;
494+ updateSearchCatalogRef . AcceptSourceAgreements = true ;
495+ var connectResult = updateSearchCatalogRef . Connect ( ) ;
496+
497+ if ( connectResult . Status != ConnectResultStatus . Ok )
498+ {
499+ logger . Error ( "Failed to connect to update catalog. Aborting." ) ;
500+ throw new InvalidOperationException ( "WinGet: Failed to connect to update catalog." ) ;
501+ }
502+
503+ FindPackagesOptions findPackagesOptions = Factory . CreateFindPackagesOptions ( ) ;
504+ PackageMatchFilter filter = Factory . CreatePackageMatchFilter ( ) ;
505+ filter . Field = PackageMatchField . Id ;
506+ filter . Option = PackageFieldMatchOption . StartsWithCaseInsensitive ;
507+ filter . Value = "" ;
508+ findPackagesOptions . Filters . Add ( filter ) ;
509+
510+ var taskResult = connectResult . PackageCatalog . FindPackages ( findPackagesOptions ) ;
511+ List < CatalogPackage > foundPackages = [ ] ;
512+ foreach ( var match in taskResult . Matches . ToArray ( ) )
513+ {
514+ if ( match . CatalogPackage . InstalledVersion is not null )
515+ foundPackages . Add ( match . CatalogPackage ) ;
516+ }
517+
518+ logger . Close ( 0 ) ;
519+ return foundPackages ;
520+ }
521+ catch
522+ {
523+ logger . Close ( 1 ) ;
524+ throw ;
525+ }
526+ }
527+
470528 public IReadOnlyList < IManagerSource > GetSources_UnSafe ( )
471529 {
472530 List < ManagerSource > sources = [ ] ;
0 commit comments