diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt index fc0199d38ce..0ee4b801526 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt @@ -7,8 +7,10 @@ import androidx.compose.animation.graphics.vector.AnimatedImageVector import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.HelpOutline +import androidx.compose.material3.SnackbarDuration import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.SnackbarResult import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState @@ -101,7 +103,12 @@ data object LibraryTab : Tab { category != null -> MR.strings.updating_category else -> MR.strings.updating_library } - snackbarHostState.showSnackbar(context.stringResource(msgRes)) + val actionLabel = context.stringResource(MR.strings.action_cancel).takeIf { started } + val snackBarResult = + snackbarHostState.showSnackbar(context.stringResource(msgRes), actionLabel, duration = SnackbarDuration.Short) + if (snackBarResult == SnackbarResult.ActionPerformed) { + LibraryUpdateJob.stop(context) + } } started } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesScreenModel.kt index 9836ee27443..02928315cd0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesScreenModel.kt @@ -192,6 +192,8 @@ class UpdatesScreenModel( return started } + fun cancelLibraryUpdate() = LibraryUpdateJob.stop(Injekt.get()) + /** * Update status of chapters. * diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesTab.kt index 2d99959d959..c34f9b261b1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesTab.kt @@ -3,6 +3,8 @@ package eu.kanade.tachiyomi.ui.updates import androidx.compose.animation.graphics.res.animatedVectorResource import androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter import androidx.compose.animation.graphics.vector.AnimatedImageVector +import androidx.compose.material3.SnackbarDuration +import androidx.compose.material3.SnackbarResult import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect @@ -109,7 +111,16 @@ data object UpdatesTab : Tab { } else { MR.strings.update_already_running } - screenModel.snackbarHostState.showSnackbar(context.stringResource(msg)) + val actionLabel = context.stringResource(MR.strings.action_cancel).takeIf { event.started } + val snackbarResult = + screenModel.snackbarHostState.showSnackbar( + context.stringResource(msg), + actionLabel, + duration = SnackbarDuration.Short + ) + if (snackbarResult == SnackbarResult.ActionPerformed) { + screenModel.cancelLibraryUpdate() + } } } }