From 8fe48686e9ff1f54dab117cf0ebdcee9a5f84d42 Mon Sep 17 00:00:00 2001 From: Katy Coe Date: Mon, 10 Feb 2020 07:01:19 +0100 Subject: [PATCH] GUI: Export asynchronously --- Il2CppInspector.GUI/MainWindow.xaml | 26 ++++++++- Il2CppInspector.GUI/MainWindow.xaml.cs | 81 ++++++++++++++------------ 2 files changed, 68 insertions(+), 39 deletions(-) diff --git a/Il2CppInspector.GUI/MainWindow.xaml b/Il2CppInspector.GUI/MainWindow.xaml index e317318..bfde9a2 100644 --- a/Il2CppInspector.GUI/MainWindow.xaml +++ b/Il2CppInspector.GUI/MainWindow.xaml @@ -6,7 +6,8 @@ xmlns:local="clr-namespace:Il2CppInspectorGUI" xmlns:gif="https://github.com/XamlAnimatedGif/XamlAnimatedGif" mc:Ignorable="d" - Title="Il2CppInspector" Height="630" Width="990" Background="White"> + Title="Il2CppInspector" Height="630" Width="990" Background="White" + WindowStartupLocation="CenterScreen"> @@ -352,8 +353,27 @@ + + + + + + + - @@ -375,7 +395,7 @@ - + Getting things ready... diff --git a/Il2CppInspector.GUI/MainWindow.xaml.cs b/Il2CppInspector.GUI/MainWindow.xaml.cs index bacfa8c..95d1ea9 100644 --- a/Il2CppInspector.GUI/MainWindow.xaml.cs +++ b/Il2CppInspector.GUI/MainWindow.xaml.cs @@ -109,7 +109,6 @@ namespace Il2CppInspectorGUI if (await app.LoadBinaryAsync(openFileDialog.FileName)) { // Binary loaded successfully areaBusyIndicator.Visibility = Visibility.Hidden; - rectModalLightBoxBackground.Visibility = Visibility.Hidden; lstImages.ItemsSource = app.Il2CppModels; lstImages.SelectedIndex = 0; @@ -126,7 +125,6 @@ namespace Il2CppInspectorGUI /// Reset binary and metadata files and start again /// private void BtnBack_OnClick(object sender, RoutedEventArgs e) { - rectModalLightBoxBackground.Visibility = Visibility.Visible; lstImages.ItemsSource = null; btnSelectBinaryFile.Visibility = Visibility.Hidden; btnSelectMetadataFile.Visibility = Visibility.Visible; @@ -238,8 +236,7 @@ namespace Il2CppInspectorGUI /// /// Perform export /// - private void BtnExport_OnClick(object sender, RoutedEventArgs e) { - var app = (App) Application.Current; + private async void BtnExport_OnClick(object sender, RoutedEventArgs e) { var model = (Il2CppModel) lstImages.SelectedItem; var unityPath = txtUnityPath.Text; @@ -298,42 +295,47 @@ namespace Il2CppInspectorGUI if (!needsFolder && saveFileDialog.ShowDialog() == false) return; + + txtBusyStatus.Text = createSolution ? "Creating Visual Studio solution..." : "Exporting C# type definitions..."; + areaBusyIndicator.Visibility = Visibility.Visible; + var outPath = needsFolder ? saveFolderDialog.SelectedPath : saveFileDialog.FileName; - if (createSolution) - writer.WriteSolution(outPath, unityPath, unityAssembliesPath); + await Task.Run(() => { + if (createSolution) + writer.WriteSolution(outPath, unityPath, unityAssembliesPath); + else + switch (layout, sortOrder) { + case ("single", "index"): + writer.WriteSingleFile(outPath, t => t.Index); + break; + case ("single", "name"): + writer.WriteSingleFile(outPath, t => t.Name); + break; - else - switch (layout, sortOrder) { - case ("single", "index"): - writer.WriteSingleFile(outPath, t => t.Index); - break; - case ("single", "name"): - writer.WriteSingleFile(outPath, t => t.Name); - break; + case ("namespace", "index"): + writer.WriteFilesByNamespace(outPath, t => t.Index, flattenHierarchy); + break; + case ("namespace", "name"): + writer.WriteFilesByNamespace(outPath, t => t.Name, flattenHierarchy); + break; - case ("namespace", "index"): - writer.WriteFilesByNamespace(outPath, t => t.Index, flattenHierarchy); - break; - case ("namespace", "name"): - writer.WriteFilesByNamespace(outPath, t => t.Name, flattenHierarchy); - break; + case ("assembly", "index"): + writer.WriteFilesByAssembly(outPath, t => t.Index, separateAssemblyAttributesFiles); + break; + case ("assembly", "name"): + writer.WriteFilesByAssembly(outPath, t => t.Name, separateAssemblyAttributesFiles); + break; - case ("assembly", "index"): - writer.WriteFilesByAssembly(outPath, t => t.Index, separateAssemblyAttributesFiles); - break; - case ("assembly", "name"): - writer.WriteFilesByAssembly(outPath, t => t.Name, separateAssemblyAttributesFiles); - break; + case ("class", _): + writer.WriteFilesByClass(outPath, flattenHierarchy); + break; - case ("class", _): - writer.WriteFilesByClass(outPath, flattenHierarchy); - break; - - case ("tree", _): - writer.WriteFilesByClassTree(outPath, separateAssemblyAttributesFiles); - break; - } + case ("tree", _): + writer.WriteFilesByClassTree(outPath, separateAssemblyAttributesFiles); + break; + } + }); break; // IDA Python script @@ -350,10 +352,17 @@ namespace Il2CppInspectorGUI var outFile = scriptSaveFileDialog.FileName; - var idaWriter = new IDAPythonScript(model); - idaWriter.WriteScriptToFile(outFile); + txtBusyStatus.Text = "Generating IDAPython script..."; + areaBusyIndicator.Visibility = Visibility.Visible; + + await Task.Run(() => { + var idaWriter = new IDAPythonScript(model); + idaWriter.WriteScriptToFile(outFile); + }); break; } + + areaBusyIndicator.Visibility = Visibility.Hidden; } private IEnumerable constructExcludedNamespaces(IEnumerable nodes) {