소스 검색

Don't prompt to add to library multiple times

Fixes #8842
arkon 2 년 전
부모
커밋
82ea643c7d
1개의 변경된 파일11개의 추가작업 그리고 4개의 파일을 삭제
  1. 11 4
      app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt

+ 11 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt

@@ -109,7 +109,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<ChapterItem>?
@@ -258,7 +258,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
@@ -577,22 +577,28 @@ class MangaInfoScreenModel(
         chapters: List<Chapter>,
         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)
+                }
             }
         }
     }
@@ -1008,6 +1014,7 @@ sealed class MangaScreenState {
         val trackItems: List<TrackItem> = emptyList(),
         val isRefreshingData: Boolean = false,
         val dialog: MangaInfoScreenModel.Dialog? = null,
+        val hasPromptedToAddBefore: Boolean = false,
     ) : MangaScreenState() {
 
         val processedChapters: Sequence<ChapterItem>