From 2c02703101497a9c52303ee94db04835c822c718 Mon Sep 17 00:00:00 2001 From: comp500 Date: Tue, 15 Dec 2020 20:24:49 +0000 Subject: [PATCH] Ask the user if they want to continue launching, if update/install fails --- .../link/infra/packwiz/installer/Main.kt | 2 +- .../infra/packwiz/installer/UpdateManager.kt | 1 + .../packwiz/installer/ui/IUserInterface.kt | 4 +- .../packwiz/installer/ui/cli/CLIHandler.kt | 4 ++ .../packwiz/installer/ui/gui/GUIHandler.kt | 38 ++++++++++++++----- 5 files changed, 37 insertions(+), 12 deletions(-) diff --git a/src/main/kotlin/link/infra/packwiz/installer/Main.kt b/src/main/kotlin/link/infra/packwiz/installer/Main.kt index 1b7b91e..77fe877 100644 --- a/src/main/kotlin/link/infra/packwiz/installer/Main.kt +++ b/src/main/kotlin/link/infra/packwiz/installer/Main.kt @@ -60,7 +60,7 @@ class Main(args: Array) { val title = cmd.getOptionValue("title") if (title != null) { - ui.setTitle(title) + ui.title = title } ui.show() diff --git a/src/main/kotlin/link/infra/packwiz/installer/UpdateManager.kt b/src/main/kotlin/link/infra/packwiz/installer/UpdateManager.kt index 7cb9543..6c88db2 100644 --- a/src/main/kotlin/link/infra/packwiz/installer/UpdateManager.kt +++ b/src/main/kotlin/link/infra/packwiz/installer/UpdateManager.kt @@ -118,6 +118,7 @@ class UpdateManager internal constructor(private val opts: Options, val ui: IUse gson.fromJson(FileReader(Paths.get(opts.packFolder, opts.manifestFile).toString()), ManifestFile::class.java) } catch (e: FileNotFoundException) { + ui.firstInstall = true ManifestFile() } catch (e: JsonSyntaxException) { ui.showErrorAndExit("Invalid local manifest file, try deleting ${opts.manifestFile}", e) diff --git a/src/main/kotlin/link/infra/packwiz/installer/ui/IUserInterface.kt b/src/main/kotlin/link/infra/packwiz/installer/ui/IUserInterface.kt index b83864a..4248aa4 100644 --- a/src/main/kotlin/link/infra/packwiz/installer/ui/IUserInterface.kt +++ b/src/main/kotlin/link/infra/packwiz/installer/ui/IUserInterface.kt @@ -13,7 +13,7 @@ interface IUserInterface { } fun showErrorAndExit(message: String, e: Exception?): Nothing - fun setTitle(title: String) {} + var title: String fun submitProgress(progress: InstallProgress) // Return true if the installation was cancelled! fun showOptions(options: List): Boolean @@ -33,4 +33,6 @@ interface IUserInterface { var optionsButtonPressed: Boolean var cancelButtonPressed: Boolean + + var firstInstall: Boolean } \ No newline at end of file diff --git a/src/main/kotlin/link/infra/packwiz/installer/ui/cli/CLIHandler.kt b/src/main/kotlin/link/infra/packwiz/installer/ui/cli/CLIHandler.kt index 81a14bd..c1ab48a 100644 --- a/src/main/kotlin/link/infra/packwiz/installer/ui/cli/CLIHandler.kt +++ b/src/main/kotlin/link/infra/packwiz/installer/ui/cli/CLIHandler.kt @@ -13,6 +13,10 @@ class CLIHandler : IUserInterface { override var optionsButtonPressed = false @Volatile override var cancelButtonPressed = false + @Volatile + override var firstInstall = false + + override var title: String = "" override fun showErrorAndExit(message: String, e: Exception?): Nothing { if (e != null) { diff --git a/src/main/kotlin/link/infra/packwiz/installer/ui/gui/GUIHandler.kt b/src/main/kotlin/link/infra/packwiz/installer/ui/gui/GUIHandler.kt index e2cd51b..5ca24cb 100644 --- a/src/main/kotlin/link/infra/packwiz/installer/ui/gui/GUIHandler.kt +++ b/src/main/kotlin/link/infra/packwiz/installer/ui/gui/GUIHandler.kt @@ -20,8 +20,14 @@ class GUIHandler : IUserInterface { override var optionsButtonPressed = false @Volatile override var cancelButtonPressed = false + @Volatile + override var firstInstall = false - private var title = "Updating modpack..." + override var title = "packwiz-installer" + set(value) { + field = value + EventQueue.invokeLater { frmPackwizlauncher.title = value } + } init { EventQueue.invokeAndWait { @@ -45,29 +51,41 @@ class GUIHandler : IUserInterface { } override fun showErrorAndExit(message: String, e: Exception?): Nothing { + val buttons = arrayOf("Quit", if (firstInstall) "Continue without installing" else "Continue without updating") if (e != null) { Log.fatal(message, e) EventQueue.invokeAndWait { - JOptionPane.showMessageDialog(null, + val result = JOptionPane.showOptionDialog(frmPackwizlauncher, "$message: $e", - title, JOptionPane.ERROR_MESSAGE) + title, + JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE, null, buttons, buttons[0]) + if (result == 1) { + Log.info("User selected to continue without installing/updating, exiting with code 0...") + exitProcess(0) + } else { + Log.info("User selected to quit, exiting with code 1...") + exitProcess(1) + } } } else { Log.fatal(message) EventQueue.invokeAndWait { - JOptionPane.showMessageDialog(null, + val result = JOptionPane.showOptionDialog(frmPackwizlauncher, message, - title, JOptionPane.ERROR_MESSAGE) + title, + JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE, null, buttons, buttons[0]) + if (result == 1) { + Log.info("User selected to continue without installing/updating, exiting with code 0...") + exitProcess(0) + } else { + Log.info("User selected to quit, exiting with code 1...") + exitProcess(1) + } } } exitProcess(1) } - override fun setTitle(title: String) { - this.title = title - EventQueue.invokeLater { frmPackwizlauncher.title = title } - } - override fun submitProgress(progress: InstallProgress) { val sb = StringBuilder() if (progress.hasProgress) {