Browse Source

Smaller fixes

pull/3508/head
Siegfried Pammer 5 months ago
parent
commit
247d0757d7
  1. 38
      ILSpy/Commands/ExtractPackageEntryContextMenuEntry.cs

38
ILSpy/Commands/ExtractPackageEntryContextMenuEntry.cs

@ -92,16 +92,15 @@ namespace ICSharpCode.ILSpy
} }
} }
static string GetFullPath(SharpTreeNode node) static string GetPackageFolderPath(SharpTreeNode node)
{ {
if (node is PackageFolderTreeNode) string name = "";
while (node is PackageFolderTreeNode)
{ {
string name = node.Text + "\\"; name = Path.Combine(node.Text.ToString(), name);
if (GetFullPath(node.Parent) is string parent) node = node.Parent;
return parent + "\\" + name;
return name;
} }
return null; return name;
} }
internal static void Save(DockWorkspace dockWorkspace, IEnumerable<SharpTreeNode> nodes, string path, bool isFile) internal static void Save(DockWorkspace dockWorkspace, IEnumerable<SharpTreeNode> nodes, string path, bool isFile)
@ -113,12 +112,12 @@ namespace ICSharpCode.ILSpy
{ {
if (node is AssemblyTreeNode { PackageEntry: { } assembly }) if (node is AssemblyTreeNode { PackageEntry: { } assembly })
{ {
string fileName = isFile ? path : Path.Combine(path, GetFullPath(node.Parent) + WholeProjectDecompiler.SanitizeFileName(assembly.Name)); string fileName = isFile ? path : Path.Combine(path, GetPackageFolderPath(node.Parent), assembly.Name);
SaveEntry(output, assembly, fileName); SaveEntry(output, assembly, fileName);
} }
else if (node is ResourceTreeNode { Resource: PackageEntry { } resource }) else if (node is ResourceTreeNode { Resource: PackageEntry { } resource })
{ {
string fileName = isFile ? path : Path.Combine(path, GetFullPath(node.Parent) + WholeProjectDecompiler.SanitizeFileName(resource.Name)); string fileName = isFile ? path : Path.Combine(path, GetPackageFolderPath(node.Parent), resource.Name);
SaveEntry(output, resource, fileName); SaveEntry(output, resource, fileName);
} }
else if (node is PackageFolderTreeNode) else if (node is PackageFolderTreeNode)
@ -128,17 +127,17 @@ namespace ICSharpCode.ILSpy
{ {
if (item is AssemblyTreeNode { PackageEntry: { } asm }) if (item is AssemblyTreeNode { PackageEntry: { } asm })
{ {
string fileName = Path.Combine(path, GetFullPath(item.Parent) + WholeProjectDecompiler.SanitizeFileName(asm.Name)); string fileName = Path.Combine(path, GetPackageFolderPath(item.Parent), asm.Name);
SaveEntry(output, asm, fileName); SaveEntry(output, asm, fileName);
} }
else if (item is ResourceTreeNode { Resource: PackageEntry { } entry }) else if (item is ResourceTreeNode { Resource: PackageEntry { } entry })
{ {
string fileName = Path.Combine(path, GetFullPath(item.Parent) + WholeProjectDecompiler.SanitizeFileName(entry.Name)); string fileName = Path.Combine(path, GetPackageFolderPath(item.Parent), entry.Name);
SaveEntry(output, entry, fileName); SaveEntry(output, entry, fileName);
} }
else if (item is PackageFolderTreeNode) else if (item is PackageFolderTreeNode)
{ {
Directory.CreateDirectory(Path.Combine(path, GetFullPath(item))); Directory.CreateDirectory(Path.Combine(path, GetPackageFolderPath(item)));
} }
} }
} }
@ -155,6 +154,7 @@ namespace ICSharpCode.ILSpy
static void SaveEntry(ITextOutput output, PackageEntry entry, string targetFileName) static void SaveEntry(ITextOutput output, PackageEntry entry, string targetFileName)
{ {
output.Write(entry.Name + ": "); output.Write(entry.Name + ": ");
targetFileName = WholeProjectDecompiler.SanitizeFileName(targetFileName);
using Stream stream = entry.TryOpenStream(); using Stream stream = entry.TryOpenStream();
if (stream == null) if (stream == null)
{ {
@ -214,16 +214,12 @@ namespace ICSharpCode.ILSpy
public bool IsVisible(TextViewContext context) public bool IsVisible(TextViewContext context)
{ {
if (context.SelectedTreeNodes is [AssemblyTreeNode { PackageEntry: null } asm]) if (context.SelectedTreeNodes is [AssemblyTreeNode { LoadedAssembly.IsLoaded: true, LoadedAssembly.HasLoadError: false, PackageEntry: null } asm])
{ {
try // Using .GetAwaiter().GetResult() is no problem here, since we already checked IsLoaded and HasLoadError.
{ var loadResult = asm.LoadedAssembly.GetLoadResultAsync().GetAwaiter().GetResult();
if (asm.LoadedAssembly.GetLoadResultAsync().GetAwaiter().GetResult().Package is { Kind: PackageKind.Bundle }) if (loadResult.Package is { Kind: PackageKind.Bundle })
return true; return true;
}
catch
{
}
} }
return false; return false;
} }

Loading…
Cancel
Save