From ea601755148efcd19c91a51b371df6ce3ad46343 Mon Sep 17 00:00:00 2001 From: comp500 Date: Sun, 11 Aug 2019 01:14:39 +0100 Subject: [PATCH] Make handleExceptionAndExit better, fix some stuff --- .../infra/packwiz/installer/DownloadTask.java | 23 ++++++++++--------- .../packwiz/installer/UpdateManager.java | 21 +++++++++-------- .../packwiz/installer/ui/IUserInterface.java | 5 +--- .../packwiz/installer/ui/InstallWindow.java | 6 +++++ 4 files changed, 30 insertions(+), 25 deletions(-) diff --git a/src/main/java/link/infra/packwiz/installer/DownloadTask.java b/src/main/java/link/infra/packwiz/installer/DownloadTask.java index 22e40a8..2e3e011 100644 --- a/src/main/java/link/infra/packwiz/installer/DownloadTask.java +++ b/src/main/java/link/infra/packwiz/installer/DownloadTask.java @@ -5,6 +5,7 @@ import link.infra.packwiz.installer.metadata.ManifestFile; import link.infra.packwiz.installer.metadata.hash.GeneralHashingSource; import link.infra.packwiz.installer.metadata.hash.Hash; import link.infra.packwiz.installer.metadata.hash.HashUtils; +import link.infra.packwiz.installer.ui.IExceptionDetails; import link.infra.packwiz.installer.ui.IOptionDetails; import okio.Buffer; import okio.Okio; @@ -19,7 +20,7 @@ import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.List; -class DownloadTask implements IOptionDetails { +class DownloadTask implements IOptionDetails, IExceptionDetails { final IndexFile.File metadata; ManifestFile.File cachedFile = null; private Exception failure = null; @@ -30,7 +31,7 @@ class DownloadTask implements IOptionDetails { private boolean newOptional = true; private final UpdateManager.Options.Side downloadSide; - public DownloadTask(IndexFile.File metadata, String defaultFormat, UpdateManager.Options.Side downloadSide) { + private DownloadTask(IndexFile.File metadata, String defaultFormat, UpdateManager.Options.Side downloadSide) { this.metadata = metadata; if (metadata.hashFormat == null || metadata.hashFormat.length() == 0) { metadata.hashFormat = defaultFormat; @@ -38,12 +39,12 @@ class DownloadTask implements IOptionDetails { this.downloadSide = downloadSide; } - public void invalidate() { + void invalidate() { invalidated = true; alreadyUpToDate = false; } - public void updateFromCache(ManifestFile.File cachedFile) { + void updateFromCache(ManifestFile.File cachedFile) { if (failure != null) return; if (cachedFile == null) { this.cachedFile = new ManifestFile.File(); @@ -53,7 +54,7 @@ class DownloadTask implements IOptionDetails { this.cachedFile = cachedFile; if (!invalidated) { - Hash currHash = null; + Hash currHash; try { currHash = HashUtils.getHash(metadata.hashFormat, metadata.hash); } catch (Exception e) { @@ -73,7 +74,7 @@ class DownloadTask implements IOptionDetails { } } - public void downloadMetadata(IndexFile parentIndexFile, URI indexUri) { + void downloadMetadata(IndexFile parentIndexFile, URI indexUri) { if (failure != null) return; if (metadataRequired) { try { @@ -100,7 +101,7 @@ class DownloadTask implements IOptionDetails { } } - public void download(String packFolder, URI indexUri) { + void download(String packFolder, URI indexUri) { if (failure != null) return; // Ensure it is removed @@ -188,18 +189,18 @@ class DownloadTask implements IOptionDetails { return failure; } - public boolean isOptional() { + boolean isOptional() { if (metadata.linkedFile != null) { return metadata.linkedFile.isOptional(); } return false; } - public boolean isNewOptional() { + boolean isNewOptional() { return isOptional() && this.newOptional; } - public boolean correctSide() { + boolean correctSide() { if (metadata.linkedFile != null) { return metadata.linkedFile.side.hasSide(downloadSide); } @@ -231,7 +232,7 @@ class DownloadTask implements IOptionDetails { cachedFile.optionValue = value; } - public static List createTasksFromIndex(IndexFile index, String defaultFormat, UpdateManager.Options.Side downloadSide) { + static List createTasksFromIndex(IndexFile index, String defaultFormat, UpdateManager.Options.Side downloadSide) { ArrayList tasks = new ArrayList<>(); for (IndexFile.File file : index.files) { tasks.add(new DownloadTask(file, defaultFormat, downloadSide)); diff --git a/src/main/java/link/infra/packwiz/installer/UpdateManager.java b/src/main/java/link/infra/packwiz/installer/UpdateManager.java index e6bf70e..fcde616 100644 --- a/src/main/java/link/infra/packwiz/installer/UpdateManager.java +++ b/src/main/java/link/infra/packwiz/installer/UpdateManager.java @@ -13,6 +13,7 @@ import link.infra.packwiz.installer.metadata.hash.GeneralHashingSource; import link.infra.packwiz.installer.metadata.hash.Hash; import link.infra.packwiz.installer.metadata.hash.HashUtils; import link.infra.packwiz.installer.request.HandlerManager; +import link.infra.packwiz.installer.ui.IExceptionDetails; import link.infra.packwiz.installer.ui.IUserInterface; import link.infra.packwiz.installer.ui.InstallProgress; import okio.Okio; @@ -28,15 +29,15 @@ import java.util.stream.Collectors; public class UpdateManager { - public final Options opts; + private final Options opts; public final IUserInterface ui; private boolean cancelled; public static class Options { - public URI downloadURI = null; - public String manifestFile = "packwiz.json"; // TODO: make configurable - public String packFolder = "."; - public Side side = Side.CLIENT; + URI downloadURI = null; + String manifestFile = "packwiz.json"; // TODO: make configurable + String packFolder = "."; + Side side = Side.CLIENT; public enum Side { @SerializedName("client") @@ -88,13 +89,13 @@ public class UpdateManager { } } - public UpdateManager(Options opts, IUserInterface ui) { + UpdateManager(Options opts, IUserInterface ui) { this.opts = opts; this.ui = ui; this.start(); } - protected void start() { + private void start() { this.checkOptions(); ui.submitProgress(new InstallProgress("Loading manifest file...")); @@ -190,11 +191,11 @@ public class UpdateManager { } - protected void checkOptions() { + private void checkOptions() { // TODO: implement } - protected void processIndex(URI indexUri, Hash indexHash, String hashFormat, ManifestFile manifest, List invalidatedUris) { + private void processIndex(URI indexUri, Hash indexHash, String hashFormat, ManifestFile manifest, List invalidatedUris) { if (manifest.indexFileHash != null && manifest.indexFileHash.equals(indexHash) && invalidatedUris.isEmpty()) { System.out.println("Modpack files are already up to date!"); return; @@ -287,7 +288,7 @@ public class UpdateManager { // TODO: collect all exceptions, present in one dialog // TODO: quit if there are exceptions or just remove failed tasks before presenting options - List failedTasks = tasks.stream().filter(t -> t.getException() != null).collect(Collectors.toList()); + List failedTasks = tasks.stream().filter(t -> t.getException() != null).collect(Collectors.toList()); List optionTasks = tasks.stream().filter(t -> t.getException() == null).filter(DownloadTask::correctSide).filter(DownloadTask::isOptional).collect(Collectors.toList()); // If options changed, present all options again diff --git a/src/main/java/link/infra/packwiz/installer/ui/IUserInterface.java b/src/main/java/link/infra/packwiz/installer/ui/IUserInterface.java index e6b2607..ae09b6a 100644 --- a/src/main/java/link/infra/packwiz/installer/ui/IUserInterface.java +++ b/src/main/java/link/infra/packwiz/installer/ui/IUserInterface.java @@ -8,10 +8,7 @@ public interface IUserInterface { void show(); void handleException(Exception e); - - /** - * This might not exit straight away, return after calling this! - */ + default void handleExceptionAndExit(Exception e) { handleException(e); System.exit(1); diff --git a/src/main/java/link/infra/packwiz/installer/ui/InstallWindow.java b/src/main/java/link/infra/packwiz/installer/ui/InstallWindow.java index 625c4c9..903cd68 100644 --- a/src/main/java/link/infra/packwiz/installer/ui/InstallWindow.java +++ b/src/main/java/link/infra/packwiz/installer/ui/InstallWindow.java @@ -101,6 +101,12 @@ public class InstallWindow implements IUserInterface { JOptionPane.showMessageDialog(null, "A fatal error occurred: \n" + e.getClass().getCanonicalName() + ": " + e.getMessage(), title, JOptionPane.ERROR_MESSAGE); System.exit(1); }); + // Pause forever, so it blocks while we wait for System.exit to take effect + try { + Thread.currentThread().join(); + } catch (InterruptedException ex) { + // no u + } } @Override