summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/cuchaz/enigma')
-rw-r--r--src/main/java/cuchaz/enigma/Main.java21
-rw-r--r--src/main/java/cuchaz/enigma/gui/GuiController.java41
-rw-r--r--src/main/java/cuchaz/enigma/gui/dialog/ProgressDialog.java7
3 files changed, 37 insertions, 32 deletions
diff --git a/src/main/java/cuchaz/enigma/Main.java b/src/main/java/cuchaz/enigma/Main.java
index 1f2cb84..b778946 100644
--- a/src/main/java/cuchaz/enigma/Main.java
+++ b/src/main/java/cuchaz/enigma/Main.java
@@ -62,16 +62,17 @@ public class Main {
62 62
63 if (options.has(jar)) { 63 if (options.has(jar)) {
64 Path jarPath = options.valueOf(jar); 64 Path jarPath = options.valueOf(jar);
65 controller.openJar(jarPath); 65 controller.openJar(jarPath)
66 } 66 .whenComplete((v, t) -> {
67 67 if (options.has(mappings)) {
68 if (options.has(mappings)) { 68 Path mappingsPath = options.valueOf(mappings);
69 Path mappingsPath = options.valueOf(mappings); 69 if (Files.isDirectory(mappingsPath)) {
70 if (Files.isDirectory(mappingsPath)) { 70 controller.openMappings(MappingFormat.ENIGMA_DIRECTORY, mappingsPath);
71 controller.openMappings(MappingFormat.ENIGMA_DIRECTORY, mappingsPath); 71 } else {
72 } else { 72 controller.openMappings(MappingFormat.ENIGMA_FILE, mappingsPath);
73 controller.openMappings(MappingFormat.ENIGMA_FILE, mappingsPath); 73 }
74 } 74 }
75 });
75 } 76 }
76 } catch (OptionException e) { 77 } catch (OptionException e) {
77 System.out.println("Invalid arguments: " + e.getMessage()); 78 System.out.println("Invalid arguments: " + e.getMessage());
diff --git a/src/main/java/cuchaz/enigma/gui/GuiController.java b/src/main/java/cuchaz/enigma/gui/GuiController.java
index 209b5d1..092a07e 100644
--- a/src/main/java/cuchaz/enigma/gui/GuiController.java
+++ b/src/main/java/cuchaz/enigma/gui/GuiController.java
@@ -42,6 +42,7 @@ import java.nio.file.Path;
42import java.util.Collection; 42import java.util.Collection;
43import java.util.List; 43import java.util.List;
44import java.util.Optional; 44import java.util.Optional;
45import java.util.concurrent.CompletableFuture;
45import java.util.concurrent.ExecutorService; 46import java.util.concurrent.ExecutorService;
46import java.util.concurrent.Executors; 47import java.util.concurrent.Executors;
47import java.util.stream.Collectors; 48import java.util.stream.Collectors;
@@ -78,10 +79,10 @@ public class GuiController {
78 return project != null && project.getMapper().isDirty(); 79 return project != null && project.getMapper().isDirty();
79 } 80 }
80 81
81 public void openJar(final Path jarPath) { 82 public CompletableFuture<Void> openJar(final Path jarPath) {
82 this.gui.onStartOpenJar(); 83 this.gui.onStartOpenJar();
83 84
84 ProgressDialog.runOffThread(gui.getFrame(), progress -> { 85 return ProgressDialog.runOffThread(gui.getFrame(), progress -> {
85 project = enigma.openJar(jarPath, progress); 86 project = enigma.openJar(jarPath, progress);
86 87
87 indexTreeBuilder = new IndexTreeBuilder(project.getJarIndex()); 88 indexTreeBuilder = new IndexTreeBuilder(project.getJarIndex());
@@ -101,12 +102,12 @@ public class GuiController {
101 this.gui.onCloseJar(); 102 this.gui.onCloseJar();
102 } 103 }
103 104
104 public void openMappings(MappingFormat format, Path path) { 105 public CompletableFuture<Void> openMappings(MappingFormat format, Path path) {
105 if (project == null) return; 106 if (project == null) return CompletableFuture.completedFuture(null);
106 107
107 gui.setMappingsFile(path); 108 gui.setMappingsFile(path);
108 109
109 ProgressDialog.runOffThread(gui.getFrame(), progress -> { 110 return ProgressDialog.runOffThread(gui.getFrame(), progress -> {
110 try { 111 try {
111 EntryTree<EntryMapping> mappings = format.read(path, progress); 112 EntryTree<EntryMapping> mappings = format.read(path, progress);
112 project.setMappings(mappings); 113 project.setMappings(mappings);
@@ -122,16 +123,14 @@ public class GuiController {
122 }); 123 });
123 } 124 }
124 125
125 public void saveMappings(Path path) { 126 public CompletableFuture<Void> saveMappings(Path path) {
126 if (project == null) return; 127 return saveMappings(path, loadedMappingFormat);
127
128 saveMappings(path, loadedMappingFormat);
129 } 128 }
130 129
131 public void saveMappings(Path path, MappingFormat format) { 130 public CompletableFuture<Void> saveMappings(Path path, MappingFormat format) {
132 if (project == null) return; 131 if (project == null) return CompletableFuture.completedFuture(null);
133 132
134 ProgressDialog.runOffThread(this.gui.getFrame(), progress -> { 133 return ProgressDialog.runOffThread(this.gui.getFrame(), progress -> {
135 EntryRemapper mapper = project.getMapper(); 134 EntryRemapper mapper = project.getMapper();
136 135
137 MappingDelta<EntryMapping> delta = mapper.takeMappingDelta(); 136 MappingDelta<EntryMapping> delta = mapper.takeMappingDelta();
@@ -158,16 +157,16 @@ public class GuiController {
158 refreshCurrentClass(); 157 refreshCurrentClass();
159 } 158 }
160 159
161 public void dropMappings() { 160 public CompletableFuture<Void> dropMappings() {
162 if (project == null) return; 161 if (project == null) return CompletableFuture.completedFuture(null);
163 162
164 ProgressDialog.runOffThread(this.gui.getFrame(), progress -> project.dropMappings(progress)); 163 return ProgressDialog.runOffThread(this.gui.getFrame(), progress -> project.dropMappings(progress));
165 } 164 }
166 165
167 public void exportSource(final Path path) { 166 public CompletableFuture<Void> exportSource(final Path path) {
168 if (project == null) return; 167 if (project == null) return CompletableFuture.completedFuture(null);
169 168
170 ProgressDialog.runOffThread(this.gui.getFrame(), progress -> { 169 return ProgressDialog.runOffThread(this.gui.getFrame(), progress -> {
171 EnigmaProject.JarExport jar = project.exportRemappedJar(progress); 170 EnigmaProject.JarExport jar = project.exportRemappedJar(progress);
172 EnigmaProject.SourceExport source = jar.decompile(progress); 171 EnigmaProject.SourceExport source = jar.decompile(progress);
173 172
@@ -175,10 +174,10 @@ public class GuiController {
175 }); 174 });
176 } 175 }
177 176
178 public void exportJar(final Path path) { 177 public CompletableFuture<Void> exportJar(final Path path) {
179 if (project == null) return; 178 if (project == null) return CompletableFuture.completedFuture(null);
180 179
181 ProgressDialog.runOffThread(this.gui.getFrame(), progress -> { 180 return ProgressDialog.runOffThread(this.gui.getFrame(), progress -> {
182 EnigmaProject.JarExport jar = project.exportRemappedJar(progress); 181 EnigmaProject.JarExport jar = project.exportRemappedJar(progress);
183 jar.write(path, progress); 182 jar.write(path, progress);
184 }); 183 });
diff --git a/src/main/java/cuchaz/enigma/gui/dialog/ProgressDialog.java b/src/main/java/cuchaz/enigma/gui/dialog/ProgressDialog.java
index c135d03..cf5c2c8 100644
--- a/src/main/java/cuchaz/enigma/gui/dialog/ProgressDialog.java
+++ b/src/main/java/cuchaz/enigma/gui/dialog/ProgressDialog.java
@@ -17,6 +17,7 @@ import cuchaz.enigma.utils.Utils;
17 17
18import javax.swing.*; 18import javax.swing.*;
19import java.awt.*; 19import java.awt.*;
20import java.util.concurrent.CompletableFuture;
20 21
21public class ProgressDialog implements ProgressListener, AutoCloseable { 22public class ProgressDialog implements ProgressListener, AutoCloseable {
22 23
@@ -57,15 +58,19 @@ public class ProgressDialog implements ProgressListener, AutoCloseable {
57 this.frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); 58 this.frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
58 } 59 }
59 60
60 public static void runOffThread(final JFrame parent, final ProgressRunnable runnable) { 61 public static CompletableFuture<Void> runOffThread(final JFrame parent, final ProgressRunnable runnable) {
62 CompletableFuture<Void> future = new CompletableFuture<>();
61 new Thread(() -> 63 new Thread(() ->
62 { 64 {
63 try (ProgressDialog progress = new ProgressDialog(parent)) { 65 try (ProgressDialog progress = new ProgressDialog(parent)) {
64 runnable.run(progress); 66 runnable.run(progress);
67 future.complete(null);
65 } catch (Exception ex) { 68 } catch (Exception ex) {
69 future.completeExceptionally(ex);
66 throw new Error(ex); 70 throw new Error(ex);
67 } 71 }
68 }).start(); 72 }).start();
73 return future;
69 } 74 }
70 75
71 @Override 76 @Override