Browse Source

Fix bookmarked chapters being deleted after manually marked as read

Fixes #9520
arkon 1 year ago
parent
commit
8735f3566f
1 changed files with 26 additions and 22 deletions
  1. 26 22
      app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt

+ 26 - 22
app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt

@@ -214,19 +214,21 @@ class DownloadManager(
      * @param source the source of the chapters.
      */
     fun deleteChapters(chapters: List<Chapter>, manga: Manga, source: Source) {
-        val filteredChapters = getChaptersToDelete(chapters, manga)
-        if (filteredChapters.isNotEmpty()) {
-            launchIO {
-                removeFromDownloadQueue(filteredChapters)
-
-                val (mangaDir, chapterDirs) = provider.findChapterDirs(filteredChapters, manga, source)
-                chapterDirs.forEach { it.delete() }
-                cache.removeChapters(filteredChapters, manga)
-
-                // Delete manga directory if empty
-                if (mangaDir?.listFiles()?.isEmpty() == true) {
-                    deleteManga(manga, source, removeQueued = false)
-                }
+        launchIO {
+            val filteredChapters = getChaptersToDelete(chapters, manga)
+            if (filteredChapters.isEmpty()) {
+                return@launchIO
+            }
+
+            removeFromDownloadQueue(filteredChapters)
+
+            val (mangaDir, chapterDirs) = provider.findChapterDirs(filteredChapters, manga, source)
+            chapterDirs.forEach { it.delete() }
+            cache.removeChapters(filteredChapters, manga)
+
+            // Delete manga directory if empty
+            if (mangaDir?.listFiles()?.isEmpty() == true) {
+                deleteManga(manga, source, removeQueued = false)
             }
         }
     }
@@ -278,7 +280,7 @@ class DownloadManager(
      * @param chapters the list of chapters to delete.
      * @param manga the manga of the chapters.
      */
-    fun enqueueChaptersToDelete(chapters: List<Chapter>, manga: Manga) {
+    suspend fun enqueueChaptersToDelete(chapters: List<Chapter>, manga: Manga) {
         pendingDeleter.addChapters(getChaptersToDelete(chapters, manga), manga)
     }
 
@@ -351,22 +353,24 @@ class DownloadManager(
         }
     }
 
-    private fun getChaptersToDelete(chapters: List<Chapter>, manga: Manga): List<Chapter> {
+    private suspend fun getChaptersToDelete(chapters: List<Chapter>, manga: Manga): List<Chapter> {
         // Retrieve the categories that are set to exclude from being deleted on read
         val categoriesToExclude = downloadPreferences.removeExcludeCategories().get().map(String::toLong)
 
-        val categoriesForManga = runBlocking { getCategories.await(manga.id) }
+        val categoriesForManga = getCategories.await(manga.id)
             .map { it.id }
-            .takeUnless { it.isEmpty() }
-            ?: listOf(0)
-
-        return if (categoriesForManga.intersect(categoriesToExclude).isNotEmpty()) {
+            .ifEmpty { listOf(0) }
+        val filteredCategoryManga = if (categoriesForManga.intersect(categoriesToExclude).isNotEmpty()) {
             chapters.filterNot { it.read }
-        } else if (!downloadPreferences.removeBookmarkedChapters().get()) {
-            chapters.filterNot { it.bookmark }
         } else {
             chapters
         }
+
+        return if (!downloadPreferences.removeBookmarkedChapters().get()) {
+            filteredCategoryManga.filterNot { it.bookmark }
+        } else {
+            filteredCategoryManga
+        }
     }
 
     fun statusFlow(): Flow<Download> = queueState