From 0622f76de9550ebdaa109e8b6965f6407766a44b Mon Sep 17 00:00:00 2001 From: Rico040 <93081680+Rico040@users.noreply.github.com> Date: Fri, 10 May 2024 11:49:55 +1000 Subject: [PATCH 1/2] feat(ui): reinstall button that reruns last step --- .../dev/beefers/vendetta/manager/installer/step/Step.kt | 2 +- .../beefers/vendetta/manager/installer/step/StepRunner.kt | 6 ++++++ .../manager/ui/screen/installer/InstallerScreen.kt | 7 +++++++ .../manager/ui/viewmodel/installer/InstallerViewModel.kt | 8 ++++++++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/dev/beefers/vendetta/manager/installer/step/Step.kt b/app/src/main/java/dev/beefers/vendetta/manager/installer/step/Step.kt index 0e5deac..5177b8f 100644 --- a/app/src/main/java/dev/beefers/vendetta/manager/installer/step/Step.kt +++ b/app/src/main/java/dev/beefers/vendetta/manager/installer/step/Step.kt @@ -49,7 +49,7 @@ abstract class Step: KoinComponent { * * @param runner The host runner, used to share information between steps */ - protected abstract suspend fun run(runner: StepRunner) + abstract suspend fun run(runner: StepRunner) /** * Safely runs this step, catching any errors and timing how long it runs. diff --git a/app/src/main/java/dev/beefers/vendetta/manager/installer/step/StepRunner.kt b/app/src/main/java/dev/beefers/vendetta/manager/installer/step/StepRunner.kt index 8d6d92d..64aa1ec 100644 --- a/app/src/main/java/dev/beefers/vendetta/manager/installer/step/StepRunner.kt +++ b/app/src/main/java/dev/beefers/vendetta/manager/installer/step/StepRunner.kt @@ -109,6 +109,11 @@ class StepRunner( */ var downloadErrored by mutableStateOf(false) + /** + * Whether or not cache exist, only useful for reinstall button currently + */ + var cacheExist by mutableStateOf(true) + /** * List of steps to go through for this install * @@ -154,6 +159,7 @@ class StepRunner( */ fun clearCache() { cacheDir.deleteRecursively() + cacheExist = false } /** diff --git a/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/installer/InstallerScreen.kt b/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/installer/InstallerScreen.kt index f6d28e1..ac3bad8 100644 --- a/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/installer/InstallerScreen.kt +++ b/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/installer/InstallerScreen.kt @@ -178,6 +178,13 @@ class InstallerScreen( Text(stringResource(R.string.action_clear_cache)) } } + FilledTonalButton( + enabled = viewModel.runner.cacheExist && installSuccessful, + onClick = { viewModel.reinstall() }, + modifier = Modifier.fillMaxWidth() + ) { + Text(stringResource(R.string.action_reinstall)) + } } } } diff --git a/app/src/main/java/dev/beefers/vendetta/manager/ui/viewmodel/installer/InstallerViewModel.kt b/app/src/main/java/dev/beefers/vendetta/manager/ui/viewmodel/installer/InstallerViewModel.kt index bc388fb..d5ded84 100644 --- a/app/src/main/java/dev/beefers/vendetta/manager/ui/viewmodel/installer/InstallerViewModel.kt +++ b/app/src/main/java/dev/beefers/vendetta/manager/ui/viewmodel/installer/InstallerViewModel.kt @@ -107,6 +107,14 @@ class InstallerViewModel( } } + fun reinstall() { + screenModelScope.launch(Dispatchers.Main) { + withContext(Dispatchers.IO) { + runner.steps.last().run(runner) + } + } + } + private fun saveToAppStorage(): File { // Delete old logs to prevent junk buildup tempLogStorageDir.deleteRecursively() From d6b65dd14bc1a048ca22001b5fccbf614ffe1dcd Mon Sep 17 00:00:00 2001 From: Rico040 <93081680+Rico040@users.noreply.github.com> Date: Fri, 10 May 2024 17:09:21 +1000 Subject: [PATCH 2/2] feat(ui): if failed then try again --- .../manager/ui/screen/installer/InstallerScreen.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/installer/InstallerScreen.kt b/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/installer/InstallerScreen.kt index ac3bad8..00b7181 100644 --- a/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/installer/InstallerScreen.kt +++ b/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/installer/InstallerScreen.kt @@ -45,6 +45,7 @@ import dev.beefers.vendetta.manager.ui.widgets.dialog.BackWarningDialog import dev.beefers.vendetta.manager.ui.widgets.dialog.DownloadFailedDialog import dev.beefers.vendetta.manager.ui.widgets.installer.StepGroupCard import dev.beefers.vendetta.manager.utils.DiscordVersion +import dev.beefers.vendetta.manager.utils.navigate import okhttp3.internal.toImmutableList import org.koin.androidx.compose.get import org.koin.core.parameter.parametersOf @@ -155,6 +156,17 @@ class InstallerScreen( ) { Text(stringResource(R.string.action_launch)) } + } else { + // Show retry if fail + Button( + onClick = { + nav.pop() + nav.navigate(InstallerScreen(version)) + }, + modifier = Modifier.fillMaxWidth() + ) { + Text(stringResource(R.string.action_retry)) + } } Spacer(modifier = Modifier.height(8.dp))