mirror of
https://github.com/packwiz/packwiz-installer.git
synced 2025-04-18 20:46:30 +02:00
Add option to automatically close after a user-supplied amount of time (#42)
* Add option to automatically close after a user-specific amount of time Add the -t/--timeout command line option to specific a number of seconds to wait before automatically closing if there is no update or user-interactivity required. * Also use timeout setting when prompting about optional mods after/during an update Additionally, clears the TODO comment. * Change default timeout to 10 seconds
This commit is contained in:
parent
84bbbe0770
commit
4e415c1e1a
@ -103,10 +103,13 @@ class Main(args: Array<String>) {
|
||||
val manifestFile = ui.wrap("Invalid manifest file path") {
|
||||
packFolder / (cmd.getOptionValue("meta-file") ?: "packwiz.json")
|
||||
}
|
||||
val timeout = ui.wrap("Invalid timeout value") {
|
||||
cmd.getOptionValue("timeout")?.toLong() ?: 10
|
||||
}
|
||||
|
||||
// Start update process!
|
||||
try {
|
||||
UpdateManager(UpdateManager.Options(packFile, manifestFile, packFolder, multimcFolder, side), ui)
|
||||
UpdateManager(UpdateManager.Options(packFile, manifestFile, packFolder, multimcFolder, side, timeout), ui)
|
||||
} catch (e: Exception) {
|
||||
ui.showErrorAndExit("Update process failed", e)
|
||||
}
|
||||
@ -123,6 +126,7 @@ class Main(args: Array<String>) {
|
||||
options.addOption(null, "pack-folder", true, "Folder to install the pack to (defaults to the JAR directory)")
|
||||
options.addOption(null, "multimc-folder", true, "The MultiMC pack folder (defaults to the parent of the pack directory)")
|
||||
options.addOption(null, "meta-file", true, "JSON file to store pack metadata, relative to the pack folder (defaults to packwiz.json)")
|
||||
options.addOption("t", "timeout", true, "Seconds to wait before automatically launching when asking about optional mods (defaults to 10)")
|
||||
}
|
||||
|
||||
// TODO: link these somehow so they're only defined once?
|
||||
|
@ -48,7 +48,8 @@ class UpdateManager internal constructor(private val opts: Options, val ui: IUse
|
||||
val manifestFile: PackwizFilePath,
|
||||
val packFolder: PackwizFilePath,
|
||||
val multimcFolder: PackwizFilePath,
|
||||
val side: Side
|
||||
val side: Side,
|
||||
val timeout: Long,
|
||||
)
|
||||
|
||||
// TODO: make this return a value based on results?
|
||||
@ -157,7 +158,7 @@ class UpdateManager internal constructor(private val opts: Options, val ui: IUse
|
||||
// todo: --force?
|
||||
ui.submitProgress(InstallProgress("Modpack is already up to date!", 1, 1))
|
||||
if (manifest.cachedFiles.any { it.value.isOptional }) {
|
||||
ui.awaitOptionalButton(false)
|
||||
ui.awaitOptionalButton(false, opts.timeout)
|
||||
}
|
||||
if (!ui.optionsButtonPressed) {
|
||||
return
|
||||
@ -206,7 +207,7 @@ class UpdateManager internal constructor(private val opts: Options, val ui: IUse
|
||||
if (manifest.indexFileHash == indexHash && invalidatedFiles.isEmpty()) {
|
||||
ui.submitProgress(InstallProgress("Modpack files are already up to date!", 1, 1))
|
||||
if (manifest.cachedFiles.any { it.value.isOptional }) {
|
||||
ui.awaitOptionalButton(false)
|
||||
ui.awaitOptionalButton(false, opts.timeout)
|
||||
}
|
||||
if (!ui.optionsButtonPressed) {
|
||||
return
|
||||
@ -338,7 +339,7 @@ class UpdateManager internal constructor(private val opts: Options, val ui: IUse
|
||||
if (!ui.optionsButtonPressed) {
|
||||
// TODO: this is so ugly
|
||||
ui.submitProgress(InstallProgress("Reconfigure optional mods?", 0,1))
|
||||
ui.awaitOptionalButton(true)
|
||||
ui.awaitOptionalButton(true, opts.timeout)
|
||||
if (ui.cancelButtonPressed) {
|
||||
showCancellationDialog()
|
||||
return
|
||||
|
@ -25,7 +25,7 @@ interface IUserInterface {
|
||||
|
||||
fun showUpdateConfirmationDialog(oldVersions: List<Pair<String, String?>>, newVersions: List<Pair<String, String?>>): UpdateConfirmationResult = UpdateConfirmationResult.CANCELLED
|
||||
|
||||
fun awaitOptionalButton(showCancel: Boolean)
|
||||
fun awaitOptionalButton(showCancel: Boolean, timeout: Long)
|
||||
|
||||
enum class ExceptionListResult {
|
||||
CONTINUE, CANCEL, IGNORE
|
||||
|
@ -63,7 +63,7 @@ class CLIHandler : IUserInterface {
|
||||
return ExceptionListResult.CANCEL
|
||||
}
|
||||
|
||||
override fun awaitOptionalButton(showCancel: Boolean) {
|
||||
override fun awaitOptionalButton(showCancel: Boolean, timeout: Long) {
|
||||
// Do nothing
|
||||
}
|
||||
}
|
@ -7,11 +7,13 @@ import link.infra.packwiz.installer.ui.data.IOptionDetails
|
||||
import link.infra.packwiz.installer.ui.data.InstallProgress
|
||||
import link.infra.packwiz.installer.util.Log
|
||||
import java.awt.EventQueue
|
||||
import java.util.Timer
|
||||
import java.util.concurrent.CompletableFuture
|
||||
import java.util.concurrent.CountDownLatch
|
||||
import javax.swing.JDialog
|
||||
import javax.swing.JOptionPane
|
||||
import javax.swing.UIManager
|
||||
import kotlin.concurrent.timer
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
class GUIHandler : IUserInterface {
|
||||
@ -220,12 +222,28 @@ class GUIHandler : IUserInterface {
|
||||
return future.get()
|
||||
}
|
||||
|
||||
override fun awaitOptionalButton(showCancel: Boolean) {
|
||||
override fun awaitOptionalButton(showCancel: Boolean, timeout: Long) {
|
||||
EventQueue.invokeAndWait {
|
||||
frmPackwizlauncher.showOk(!showCancel)
|
||||
}
|
||||
visibleCountdownLatch.await()
|
||||
|
||||
var closeTimer: Timer? = null
|
||||
if (timeout >= 0) {
|
||||
var count = 0
|
||||
closeTimer = timer("timeout", true, 0, 1000) {
|
||||
if (count >= timeout) {
|
||||
optionalSelectedLatch.countDown()
|
||||
cancel()
|
||||
} else {
|
||||
frmPackwizlauncher.timeoutOk(timeout - count)
|
||||
count += 1
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
optionalSelectedLatch.await()
|
||||
closeTimer?.cancel()
|
||||
EventQueue.invokeLater {
|
||||
frmPackwizlauncher.hideOk()
|
||||
}
|
||||
|
@ -121,4 +121,8 @@ class InstallWindow(private val handler: GUIHandler) : JFrame() {
|
||||
}
|
||||
buttonsPanel.revalidate()
|
||||
}
|
||||
|
||||
fun timeoutOk(remaining: Long) {
|
||||
btnOk.text = "Continue ($remaining)"
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user