Try catch DMG exception
Some checks are pending
MSBuild / build (push) Waiting to run
MSBuild / publish (push) Blocked by required conditions

This commit is contained in:
ema
2025-06-23 02:35:02 +08:00
parent 869a134587
commit c959e649a0

View File

@@ -17,6 +17,7 @@
using DiscUtils; using DiscUtils;
using DiscUtils.HfsPlus; using DiscUtils.HfsPlus;
using QuickLook.Common.Helpers;
using QuickLook.Plugin.AppViewer.PackageParsers.Ipa; using QuickLook.Plugin.AppViewer.PackageParsers.Ipa;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -35,7 +36,7 @@ public class DmgReader : IDisposable
public Dictionary<string, DmgArchive> Archives { get; } = []; public Dictionary<string, DmgArchive> Archives { get; } = [];
public Dictionary<string, object> InfoPlistDict { get; set; } public Dictionary<string, object> InfoPlistDict { get; set; } = [];
public string DisplayName { get; set; } public string DisplayName { get; set; }
@@ -90,38 +91,45 @@ public class DmgReader : IDisposable
return; return;
} }
// Find the first (and supposedly, only, HFS partition) try
foreach (var volume in VolumeManager.GetPhysicalVolumes(disk))
{ {
foreach (var fileSystem in FileSystemManager.DetectFileSystems(volume)) // Find the first (and supposedly, only, HFS partition)
foreach (var volume in VolumeManager.GetPhysicalVolumes(disk))
{ {
// Apple HFS+ foreach (var fileSystem in FileSystemManager.DetectFileSystems(volume))
if (fileSystem.Name == "HFS+")
{ {
using var hfs = (HfsPlusFileSystem)fileSystem.Open(volume); // Apple HFS+
if (fileSystem.Name == "HFS+")
{
using var hfs = (HfsPlusFileSystem)fileSystem.Open(volume);
VolumeLabel = hfs.VolumeLabel; VolumeLabel = hfs.VolumeLabel;
ListFiles(hfs, string.Empty); ListFiles(hfs, string.Empty);
}
}
}
byte[] infoPlistData = null;
foreach (var archive in Archives.Values)
{
Match m = Regex.Match(archive.Entry, @".*\.app\\Contents\\Info\.plist$");
if (m.Success)
{
ContentsEntry = Path.GetDirectoryName(archive.Entry);
infoPlistData = archive.GetBytes();
if (Plist.ReadPlist(infoPlistData) is Dictionary<string, object> dict)
{
InfoPlistDict = dict;
}
break;
} }
} }
} }
catch (Exception e)
byte[] infoPlistData = null;
foreach (var archive in Archives.Values)
{ {
Match m = Regex.Match(archive.Entry, @".*\.app\\Contents\\Info\.plist$"); ProcessHelper.WriteLog(e.ToString());
if (m.Success)
{
ContentsEntry = Path.GetDirectoryName(archive.Entry);
infoPlistData = archive.GetBytes();
if (Plist.ReadPlist(infoPlistData) is Dictionary<string, object> dict)
{
InfoPlistDict = dict;
}
break;
}
} }
{ {