Skip to content

Commit 438cc3e

Browse files
Handle WinGet malfunction false positives
1 parent d6dfec8 commit 438cc3e

3 files changed

Lines changed: 89 additions & 28 deletions

File tree

src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/NativeWinGetHelper.cs

Lines changed: 86 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -276,8 +276,13 @@ var nativePackage in TaskRecycler<IReadOnlyList<CatalogPackage>>.RunOrAttach(
276276
)
277277
)
278278
{
279-
if (nativePackage.IsUpdateAvailable)
279+
try
280280
{
281+
if (!nativePackage.IsUpdateAvailable)
282+
{
283+
continue;
284+
}
285+
281286
IManagerSource source;
282287
source = Manager.SourcesHelper.Factory.GetSourceOrDefault(
283288
nativePackage.DefaultInstallVersion.PackageCatalog.Info.Name
@@ -311,6 +316,10 @@ var nativePackage in TaskRecycler<IReadOnlyList<CatalogPackage>>.RunOrAttach(
311316
);
312317
}
313318
}
319+
catch (Exception ex)
320+
{
321+
LogSkippedPackage(logger, nativePackage, "listing available updates", ex);
322+
}
314323
}
315324

316325
logger.Close(0);
@@ -328,41 +337,92 @@ var nativePackage in TaskRecycler<IReadOnlyList<CatalogPackage>>.RunOrAttach(
328337
)
329338
)
330339
{
331-
IManagerSource source;
332-
var availableVersions = nativePackage.AvailableVersions?.ToArray() ?? [];
333-
if (availableVersions.Length > 0)
340+
try
334341
{
335-
var installPackage = nativePackage.GetPackageVersionInfo(availableVersions[0]);
336-
source = Manager.SourcesHelper.Factory.GetSourceOrDefault(
337-
installPackage.PackageCatalog.Info.Name
342+
IManagerSource source;
343+
var availableVersions = nativePackage.AvailableVersions?.ToArray() ?? [];
344+
if (availableVersions.Length > 0)
345+
{
346+
var installPackage = nativePackage.GetPackageVersionInfo(availableVersions[0]);
347+
source = Manager.SourcesHelper.Factory.GetSourceOrDefault(
348+
installPackage.PackageCatalog.Info.Name
349+
);
350+
}
351+
else
352+
{
353+
source = Manager.GetLocalSource(nativePackage.Id);
354+
}
355+
356+
string version = nativePackage.InstalledVersion.Version;
357+
if (version == "Unknown")
358+
version = WinGetPkgOperationHelper.GetLastInstalledVersion(nativePackage.Id);
359+
360+
logger.Log(
361+
$"Found package {nativePackage.Name} {nativePackage.Id} on source {source.Name}"
362+
);
363+
var UniGetUIPackage = new Package(
364+
nativePackage.Name,
365+
nativePackage.Id,
366+
version,
367+
source,
368+
Manager
338369
);
370+
NativePackageHandler.AddPackage(UniGetUIPackage, nativePackage);
371+
packages.Add(UniGetUIPackage);
339372
}
340-
else
373+
catch (Exception ex)
341374
{
342-
source = Manager.GetLocalSource(nativePackage.Id);
375+
LogSkippedPackage(logger, nativePackage, "listing installed packages", ex);
343376
}
344-
345-
string version = nativePackage.InstalledVersion.Version;
346-
if (version == "Unknown")
347-
version = WinGetPkgOperationHelper.GetLastInstalledVersion(nativePackage.Id);
348-
349-
logger.Log(
350-
$"Found package {nativePackage.Name} {nativePackage.Id} on source {source.Name}"
351-
);
352-
var UniGetUIPackage = new Package(
353-
nativePackage.Name,
354-
nativePackage.Id,
355-
version,
356-
source,
357-
Manager
358-
);
359-
NativePackageHandler.AddPackage(UniGetUIPackage, nativePackage);
360-
packages.Add(UniGetUIPackage);
361377
}
362378
logger.Close(0);
363379
return packages;
364380
}
365381

382+
private static void LogSkippedPackage(
383+
INativeTaskLogger logger,
384+
CatalogPackage nativePackage,
385+
string operation,
386+
Exception ex
387+
)
388+
{
389+
string packageDescription = DescribePackage(nativePackage);
390+
logger.Error($"Skipping WinGet package while {operation}: {packageDescription}");
391+
logger.Error(ex);
392+
Logger.Warn(
393+
$"Skipping WinGet package while {operation}: {packageDescription}. {ex.GetType().Name}: {ex.Message}"
394+
);
395+
}
396+
397+
private static string DescribePackage(CatalogPackage nativePackage)
398+
{
399+
try
400+
{
401+
string id = nativePackage.Id;
402+
if (!string.IsNullOrWhiteSpace(id))
403+
{
404+
return id;
405+
}
406+
}
407+
catch
408+
{
409+
}
410+
411+
try
412+
{
413+
string name = nativePackage.Name;
414+
if (!string.IsNullOrWhiteSpace(name))
415+
{
416+
return name;
417+
}
418+
}
419+
catch
420+
{
421+
}
422+
423+
return "<unknown package>";
424+
}
425+
366426
private IReadOnlyList<CatalogPackage> GetLocalWinGetPackages()
367427
{
368428
var logger = Manager.TaskLogger.CreateNew(LoggableTaskType.OtherTask);

src/UniGetUI.PackageEngine.Managers.WinGet/WinGet.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ protected override IReadOnlyList<Package> GetInstalledPackages_UnSafe()
218218
try
219219
{
220220
var packages = WinGetHelper.Instance.GetInstalledPackages_UnSafe();
221-
NO_PACKAGES_HAVE_BEEN_LOADED = !packages.Any();
221+
NO_PACKAGES_HAVE_BEEN_LOADED = false;
222222
return packages;
223223
}
224224
catch (Exception)

src/UniGetUI/Pages/SoftwarePages/InstalledPackagesPage.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,8 @@ protected override void WhenPackagesLoaded(ReloadReason reason)
324324
}
325325

326326
if (
327-
WinGet.NO_PACKAGES_HAVE_BEEN_LOADED /* && !Settings.Get(Settings.K.DisableWinGetMalfunctionDetector)*/
327+
WinGet.NO_PACKAGES_HAVE_BEEN_LOADED
328+
&& !Settings.Get(Settings.K.DisableWinGetMalfunctionDetector)
328329
)
329330
{
330331
var infoBar = MainApp.Instance.MainWindow.WinGetWarningBanner;

0 commit comments

Comments
 (0)