Explorar o código

Fix related to cancelling queued chapters (#8528)

Tachi removes the downloaded chapter (if it exists) when you just cancelled a download from queue.

PR fixes that

Also removes redundant return
AntsyLich %!s(int64=2) %!d(string=hai) anos
pai
achega
ba2a528886

+ 5 - 25
app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt

@@ -214,22 +214,9 @@ class DownloadManager(
         return cache.getDownloadCount(manga)
     }
 
-    /**
-     * Calls delete chapter, which deletes a temp download.
-     *
-     * @param download the download to cancel.
-     */
-    fun deletePendingDownload(download: Download) {
-        deleteChapters(listOf(download.chapter.toDomainChapter()!!), download.manga, download.source, true)
-    }
-
-    fun deletePendingDownloads(vararg downloads: Download) {
-        val downloadsByManga = downloads.groupBy { it.manga.id }
-        downloadsByManga.map { entry ->
-            val manga = entry.value.first().manga
-            val source = entry.value.first().source
-            deleteChapters(entry.value.map { it.chapter.toDomainChapter()!! }, manga, source, true)
-        }
+    fun deletePendingDownloads(downloads: List<Download>) {
+        val domainChapters = downloads.map { it.chapter.toDomainChapter()!! }
+        removeFromDownloadQueue(domainChapters)
     }
 
     /**
@@ -238,14 +225,9 @@ class DownloadManager(
      * @param chapters the list of chapters to delete.
      * @param manga the manga of the chapters.
      * @param source the source of the chapters.
-     * @param isCancelling true if it's simply cancelling a download
      */
-    fun deleteChapters(chapters: List<Chapter>, manga: Manga, source: Source, isCancelling: Boolean = false): List<Chapter> {
-        val filteredChapters = if (isCancelling) {
-            chapters
-        } else {
-            getChaptersToDelete(chapters, manga)
-        }
+    fun deleteChapters(chapters: List<Chapter>, manga: Manga, source: Source) {
+        val filteredChapters = getChaptersToDelete(chapters, manga)
 
         if (filteredChapters.isNotEmpty()) {
             launchIO {
@@ -269,8 +251,6 @@ class DownloadManager(
                 }
             }
         }
-
-        return filteredChapters
     }
 
     private fun removeFromDownloadQueue(chapters: List<Chapter>) {

+ 1 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadController.kt

@@ -479,7 +479,7 @@ class DownloadController :
                     presenter.reorder(selectedSeries + otherSeries)
                 }
                 R.id.cancel_download -> {
-                    presenter.cancelDownload(item.download)
+                    presenter.cancelDownloads(listOf(item.download))
                 }
                 R.id.cancel_series -> {
                     val allDownloadsForSeries = adapter?.currentItems

+ 1 - 5
app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadPresenter.kt

@@ -72,11 +72,7 @@ class DownloadPresenter : BasePresenter<DownloadController>() {
         downloadManager.reorderQueue(downloads)
     }
 
-    fun cancelDownload(download: Download) {
-        downloadManager.deletePendingDownload(download)
-    }
-
     fun cancelDownloads(downloads: List<Download>) {
-        downloadManager.deletePendingDownloads(*downloads.toTypedArray())
+        downloadManager.deletePendingDownloads(downloads)
     }
 }

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

@@ -658,7 +658,7 @@ class MangaInfoScreenModel(
 
     fun cancelDownload(chapterId: Long) {
         val activeDownload = downloadManager.queue.find { chapterId == it.chapter.id } ?: return
-        downloadManager.deletePendingDownload(activeDownload)
+        downloadManager.deletePendingDownloads(listOf(activeDownload))
         updateDownloadState(activeDownload.apply { status = Download.State.NOT_DOWNLOADED })
     }
 

+ 2 - 2
app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt

@@ -490,8 +490,8 @@ class ReaderPresenter(
      * if setting is enabled and [currentChapter] is queued for download
      */
     private fun deleteChapterFromDownloadQueue(currentChapter: ReaderChapter): Download? {
-        return downloadManager.getChapterDownloadOrNull(currentChapter.chapter.toDomainChapter()!!)?.apply {
-            downloadManager.deletePendingDownload(this)
+        return downloadManager.getChapterDownloadOrNull(currentChapter.chapter.toDomainChapter()!!)?.also {
+            downloadManager.deletePendingDownloads(listOf(it))
         }
     }
 

+ 1 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesPresenter.kt

@@ -199,7 +199,7 @@ class UpdatesPresenter(
 
     private fun cancelDownload(chapterId: Long) {
         val activeDownload = downloadManager.queue.find { chapterId == it.chapter.id } ?: return
-        downloadManager.deletePendingDownload(activeDownload)
+        downloadManager.deletePendingDownloads(listOf(activeDownload))
         updateDownloadState(activeDownload.apply { status = Download.State.NOT_DOWNLOADED })
     }