From a55e27c657c2618637baea2a46fa4847a0afcd5d Mon Sep 17 00:00:00 2001 From: arkon Date: Wed, 11 Jan 2023 20:00:50 -0500 Subject: [PATCH] Don't prompt to add to library multiple times Fixes #8842 (cherry picked from commit 82ea643c7d2ee75acc7fc17e2b9d492b57fb7a42) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt --- .../kanade/tachiyomi/ui/manga/MangaScreenModel.kt | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt index eacd0049e..ed58ea561 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt @@ -173,7 +173,7 @@ class MangaInfoScreenModel( val source: Source? get() = successState?.source - private val isFavoritedManga: Boolean + private val isFavorited: Boolean get() = manga?.favorite ?: false private val processedChapters: Sequence? @@ -688,7 +688,7 @@ class MangaInfoScreenModel( coroutineScope.launchIO { val manga = state.manga - if (isFavoritedManga) { + if (isFavorited) { // Remove from library if (updateManga.awaitUpdateFavorite(manga.id, false)) { // Remove covers and update last modified in db @@ -1068,22 +1068,28 @@ class MangaInfoScreenModel( chapters: List, startNow: Boolean, ) { + val successState = successState ?: return + if (startNow) { val chapterId = chapters.singleOrNull()?.id ?: return downloadManager.startDownloadNow(chapterId) } else { downloadChapters(chapters) } - if (!isFavoritedManga) { + + if (!isFavorited && !successState.hasPromptedToAddBefore) { coroutineScope.launch { val result = snackbarHostState.showSnackbar( message = context.getString(R.string.snack_add_to_library), actionLabel = context.getString(R.string.action_add), withDismissAction = true, ) - if (result == SnackbarResult.ActionPerformed && !isFavoritedManga) { + if (result == SnackbarResult.ActionPerformed && !isFavorited) { toggleFavorite() } + updateSuccessState { successState -> + successState.copy(hasPromptedToAddBefore = true) + } } } } @@ -1585,6 +1591,7 @@ sealed class MangaScreenState { val trackItems: List = emptyList(), val isRefreshingData: Boolean = false, val dialog: MangaInfoScreenModel.Dialog? = null, + val hasPromptedToAddBefore: Boolean = false, // SY --> val meta: RaisedSearchMetadata?, val mergedData: MergedMangaData?,