make inspector version a server api, split up output subtypes and tweak some option names
This commit is contained in:
@@ -2,7 +2,7 @@ using Microsoft.AspNetCore.SignalR;
|
||||
|
||||
namespace Il2CppInspector.Redux.FrontendCore;
|
||||
|
||||
internal class Il2CppHub : Hub
|
||||
public class Il2CppHub : Hub
|
||||
{
|
||||
private const string ContextKey = "context";
|
||||
|
||||
@@ -51,4 +51,8 @@ internal class Il2CppHub : Hub
|
||||
{
|
||||
await State.ExportIl2CppFiles(Client, outputDirectory);
|
||||
}
|
||||
public async Task<string> GetInspectorVersion()
|
||||
{
|
||||
return await UiContext.GetInspectorVersion();
|
||||
}
|
||||
}
|
||||
10
Il2CppInspector.Redux.FrontendCore/Outputs/CSharpLayout.cs
Normal file
10
Il2CppInspector.Redux.FrontendCore/Outputs/CSharpLayout.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace Il2CppInspector.Redux.FrontendCore.Outputs;
|
||||
|
||||
public enum CSharpLayout
|
||||
{
|
||||
SingleFile,
|
||||
Namespace,
|
||||
Assembly,
|
||||
Class,
|
||||
Tree
|
||||
}
|
||||
@@ -7,28 +7,13 @@ public class CSharpStubOutput : IOutputFormatProvider
|
||||
{
|
||||
public static string Id => "cs";
|
||||
|
||||
private enum CSharpLayout
|
||||
{
|
||||
SingleFile,
|
||||
Namespace,
|
||||
Assembly,
|
||||
Class,
|
||||
Tree
|
||||
}
|
||||
|
||||
private enum TypeSortingMode
|
||||
{
|
||||
Alphabetical,
|
||||
TypeDefinitionIndex
|
||||
}
|
||||
|
||||
private class Settings(Dictionary<string, string> settings)
|
||||
{
|
||||
public readonly CSharpLayout Layout = settings.GetAsEnumOrDefault("layout", CSharpLayout.SingleFile);
|
||||
public readonly bool FlattenHierarchy = settings.GetAsBooleanOrDefault("flatten", false);
|
||||
public readonly TypeSortingMode SortingMode = settings.GetAsEnumOrDefault("sorting", TypeSortingMode.Alphabetical);
|
||||
public readonly bool FlattenHierarchy = settings.GetAsBooleanOrDefault("flattenhierarchy", false);
|
||||
public readonly TypeSortingMode SortingMode = settings.GetAsEnumOrDefault("sortingmode", TypeSortingMode.Alphabetical);
|
||||
public readonly bool SuppressMetadata = settings.GetAsBooleanOrDefault("suppressmetadata", false);
|
||||
public readonly bool MustCompile = settings.GetAsBooleanOrDefault("compilable", false);
|
||||
public readonly bool MustCompile = settings.GetAsBooleanOrDefault("mustcompile", false);
|
||||
public readonly bool SeperateAssemblyAttributes = settings.GetAsBooleanOrDefault("seperateassemblyattributes", true);
|
||||
}
|
||||
|
||||
|
||||
@@ -9,14 +9,6 @@ public class DisassemblerMetadataOutput : IOutputFormatProvider
|
||||
{
|
||||
public static string Id => "disassemblermetadata";
|
||||
|
||||
private enum DisassemblerType
|
||||
{
|
||||
IDA,
|
||||
Ghidra,
|
||||
BinaryNinja,
|
||||
None
|
||||
}
|
||||
|
||||
private class Settings(Dictionary<string, string> dict)
|
||||
{
|
||||
public readonly DisassemblerType Disassembler = dict.GetAsEnumOrDefault("disassembler", DisassemblerType.IDA);
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace Il2CppInspector.Redux.FrontendCore.Outputs;
|
||||
|
||||
public enum DisassemblerType
|
||||
{
|
||||
IDA,
|
||||
Ghidra,
|
||||
BinaryNinja,
|
||||
None
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace Il2CppInspector.Redux.FrontendCore.Outputs;
|
||||
|
||||
public enum TypeSortingMode
|
||||
{
|
||||
Alphabetical,
|
||||
TypeDefinitionIndex
|
||||
}
|
||||
@@ -10,7 +10,7 @@ public class VsSolutionOutput : IOutputFormatProvider
|
||||
private class Settings(Dictionary<string, string> settings)
|
||||
{
|
||||
public readonly string UnityPath = settings.GetValueOrDefault("unitypath", "");
|
||||
public readonly string UnityAssembliesPath = settings.GetValueOrDefault("assembliespath", "");
|
||||
public readonly string UnityAssembliesPath = settings.GetValueOrDefault("unityassembliespath", "");
|
||||
}
|
||||
|
||||
public async Task Export(AppModel model, UiClient client, string outputPath, Dictionary<string, string> settingsDict)
|
||||
|
||||
@@ -41,7 +41,4 @@ public class UiClient(ISingleClientProxy client)
|
||||
|
||||
public async Task OnImportCompleted(CancellationToken cancellationToken = default)
|
||||
=> await client.SendAsync(nameof(OnImportCompleted), cancellationToken);
|
||||
|
||||
public async Task SetInspectorVersion(string version, CancellationToken cancellationToken = default)
|
||||
=> await client.SendAsync(nameof(SetInspectorVersion), version, cancellationToken);
|
||||
}
|
||||
@@ -47,10 +47,8 @@ public class UiContext
|
||||
|
||||
try
|
||||
{
|
||||
var file = FileFormatStream.Load(stream, _loadOptions, client.EventHandler);
|
||||
|
||||
if (file == null)
|
||||
throw new InvalidOperationException("Failed to determine binary file format.");
|
||||
var file = FileFormatStream.Load(stream, _loadOptions, client.EventHandler)
|
||||
?? throw new InvalidOperationException("Failed to determine binary file format.");
|
||||
|
||||
if (file.NumImages == 0)
|
||||
throw new InvalidOperationException("Failed to find any binary images in the file");
|
||||
@@ -122,7 +120,6 @@ public class UiContext
|
||||
public async Task Initialize(UiClient client, CancellationToken cancellationToken = default)
|
||||
{
|
||||
await client.ShowSuccessToast("SignalR initialized!", cancellationToken);
|
||||
await client.SetInspectorVersion(typeof(UiContext).Assembly.GetAssemblyVersion() ?? "<unknown>", cancellationToken);
|
||||
}
|
||||
|
||||
public async Task LoadInputFiles(UiClient client, List<string> inputFiles,
|
||||
@@ -200,16 +197,16 @@ public class UiContext
|
||||
{
|
||||
var model = _appModels[0];
|
||||
|
||||
foreach (var queuedExport in _queuedExports)
|
||||
foreach (var (formatId, outputDirectory, settings) in _queuedExports)
|
||||
{
|
||||
try
|
||||
{
|
||||
var outputFormat = OutputFormatRegistry.GetOutputFormat(queuedExport.FormatId);
|
||||
await outputFormat.Export(model, client, queuedExport.OutputDirectory, queuedExport.Settings);
|
||||
var outputFormat = OutputFormatRegistry.GetOutputFormat(formatId);
|
||||
await outputFormat.Export(model, client, outputDirectory, settings);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
await client.ShowErrorToast($"Export for format {queuedExport.FormatId} failed: {ex}",
|
||||
await client.ShowErrorToast($"Export for format {formatId} failed: {ex}",
|
||||
cancellationToken);
|
||||
}
|
||||
}
|
||||
@@ -246,4 +243,9 @@ public class UiContext
|
||||
}, cancellationToken);
|
||||
}
|
||||
}
|
||||
|
||||
public static Task<string> GetInspectorVersion()
|
||||
{
|
||||
return Task.FromResult(typeof(UiContext).Assembly.GetAssemblyVersion() ?? "<unknown>");
|
||||
}
|
||||
}
|
||||
@@ -6,14 +6,11 @@
|
||||
$effect(() => {
|
||||
if (signalRState.api === undefined) return;
|
||||
|
||||
const unregisterSetInspectorVersion =
|
||||
signalRState.api.client.onSetInspectorVersion(async (version) => {
|
||||
if (inspectorVersion === undefined) {
|
||||
signalRState.api.server.getInspectorVersion().then((version) => {
|
||||
inspectorVersion = version;
|
||||
});
|
||||
|
||||
return () => {
|
||||
unregisterSetInspectorVersion();
|
||||
};
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
@@ -45,12 +45,6 @@ export class SignalRClientApi {
|
||||
return this.registerHandler("OnImportCompleted", handler);
|
||||
}
|
||||
|
||||
onSetInspectorVersion(
|
||||
handler: (version: string) => Promise<void>,
|
||||
): () => void {
|
||||
return this.registerHandler("SetInspectorVersion", handler);
|
||||
}
|
||||
|
||||
private registerHandler(
|
||||
name: string,
|
||||
handler: (...args: any[]) => Promise<void>,
|
||||
|
||||
@@ -41,4 +41,8 @@ export class SignalRServerApi {
|
||||
async exportIl2CppFiles(targetDirectory: string) {
|
||||
return await this.connection.send("ExportIl2CppFiles", targetDirectory);
|
||||
}
|
||||
|
||||
async getInspectorVersion(): Promise<string> {
|
||||
return await this.connection.invoke<string>("GetInspectorVersion");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ let mockFormatSettings: {
|
||||
{
|
||||
type: "option",
|
||||
name: {
|
||||
id: "flatten",
|
||||
id: "flattenhierarchy",
|
||||
label: "Don't nest folders (flatten hierarchy)",
|
||||
},
|
||||
default: false,
|
||||
@@ -55,7 +55,7 @@ let mockFormatSettings: {
|
||||
{
|
||||
type: "combobox",
|
||||
name: {
|
||||
id: "sorting",
|
||||
id: "sortingmode",
|
||||
label: "Type sorting",
|
||||
},
|
||||
default: "alphabetical",
|
||||
@@ -85,7 +85,7 @@ let mockFormatSettings: {
|
||||
{
|
||||
type: "option",
|
||||
name: {
|
||||
id: "compilable",
|
||||
id: "mustcompile",
|
||||
label: "Attempt to generate output that compiles",
|
||||
},
|
||||
default: false,
|
||||
@@ -117,7 +117,7 @@ let mockFormatSettings: {
|
||||
{
|
||||
type: "filepath",
|
||||
name: {
|
||||
id: "assembliespath",
|
||||
id: "unityassembliespath",
|
||||
label: "Unity script assemblies path",
|
||||
},
|
||||
directoryPath: true,
|
||||
|
||||
Reference in New Issue
Block a user