Skip to content

Commit 247d075

Browse files
Smaller fixes
1 parent 373b004 commit 247d075

File tree

1 file changed

+17
-21
lines changed

1 file changed

+17
-21
lines changed

ILSpy/Commands/ExtractPackageEntryContextMenuEntry.cs

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -92,16 +92,15 @@ public void Execute(TextViewContext context)
9292
}
9393
}
9494

95-
static string GetFullPath(SharpTreeNode node)
95+
static string GetPackageFolderPath(SharpTreeNode node)
9696
{
97-
if (node is PackageFolderTreeNode)
97+
string name = "";
98+
while (node is PackageFolderTreeNode)
9899
{
99-
string name = node.Text + "\\";
100-
if (GetFullPath(node.Parent) is string parent)
101-
return parent + "\\" + name;
102-
return name;
100+
name = Path.Combine(node.Text.ToString(), name);
101+
node = node.Parent;
103102
}
104-
return null;
103+
return name;
105104
}
106105

107106
internal static void Save(DockWorkspace dockWorkspace, IEnumerable<SharpTreeNode> nodes, string path, bool isFile)
@@ -113,12 +112,12 @@ internal static void Save(DockWorkspace dockWorkspace, IEnumerable<SharpTreeNode
113112
{
114113
if (node is AssemblyTreeNode { PackageEntry: { } assembly })
115114
{
116-
string fileName = isFile ? path : Path.Combine(path, GetFullPath(node.Parent) + WholeProjectDecompiler.SanitizeFileName(assembly.Name));
115+
string fileName = isFile ? path : Path.Combine(path, GetPackageFolderPath(node.Parent), assembly.Name);
117116
SaveEntry(output, assembly, fileName);
118117
}
119118
else if (node is ResourceTreeNode { Resource: PackageEntry { } resource })
120119
{
121-
string fileName = isFile ? path : Path.Combine(path, GetFullPath(node.Parent) + WholeProjectDecompiler.SanitizeFileName(resource.Name));
120+
string fileName = isFile ? path : Path.Combine(path, GetPackageFolderPath(node.Parent), resource.Name);
122121
SaveEntry(output, resource, fileName);
123122
}
124123
else if (node is PackageFolderTreeNode)
@@ -128,17 +127,17 @@ internal static void Save(DockWorkspace dockWorkspace, IEnumerable<SharpTreeNode
128127
{
129128
if (item is AssemblyTreeNode { PackageEntry: { } asm })
130129
{
131-
string fileName = Path.Combine(path, GetFullPath(item.Parent) + WholeProjectDecompiler.SanitizeFileName(asm.Name));
130+
string fileName = Path.Combine(path, GetPackageFolderPath(item.Parent), asm.Name);
132131
SaveEntry(output, asm, fileName);
133132
}
134133
else if (item is ResourceTreeNode { Resource: PackageEntry { } entry })
135134
{
136-
string fileName = Path.Combine(path, GetFullPath(item.Parent) + WholeProjectDecompiler.SanitizeFileName(entry.Name));
135+
string fileName = Path.Combine(path, GetPackageFolderPath(item.Parent), entry.Name);
137136
SaveEntry(output, entry, fileName);
138137
}
139138
else if (item is PackageFolderTreeNode)
140139
{
141-
Directory.CreateDirectory(Path.Combine(path, GetFullPath(item)));
140+
Directory.CreateDirectory(Path.Combine(path, GetPackageFolderPath(item)));
142141
}
143142
}
144143
}
@@ -155,6 +154,7 @@ internal static void Save(DockWorkspace dockWorkspace, IEnumerable<SharpTreeNode
155154
static void SaveEntry(ITextOutput output, PackageEntry entry, string targetFileName)
156155
{
157156
output.Write(entry.Name + ": ");
157+
targetFileName = WholeProjectDecompiler.SanitizeFileName(targetFileName);
158158
using Stream stream = entry.TryOpenStream();
159159
if (stream == null)
160160
{
@@ -214,16 +214,12 @@ public void Execute(TextViewContext context)
214214

215215
public bool IsVisible(TextViewContext context)
216216
{
217-
if (context.SelectedTreeNodes is [AssemblyTreeNode { PackageEntry: null } asm])
217+
if (context.SelectedTreeNodes is [AssemblyTreeNode { LoadedAssembly.IsLoaded: true, LoadedAssembly.HasLoadError: false, PackageEntry: null } asm])
218218
{
219-
try
220-
{
221-
if (asm.LoadedAssembly.GetLoadResultAsync().GetAwaiter().GetResult().Package is { Kind: PackageKind.Bundle })
222-
return true;
223-
}
224-
catch
225-
{
226-
}
219+
// Using .GetAwaiter().GetResult() is no problem here, since we already checked IsLoaded and HasLoadError.
220+
var loadResult = asm.LoadedAssembly.GetLoadResultAsync().GetAwaiter().GetResult();
221+
if (loadResult.Package is { Kind: PackageKind.Bundle })
222+
return true;
227223
}
228224
return false;
229225
}

0 commit comments

Comments
 (0)