diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt index ebae08cc5f..c794dd55b4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt @@ -10,6 +10,9 @@ import eu.kanade.tachiyomi.data.download.model.DownloadQueue import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.model.Page +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch import rx.Observable import timber.log.Timber import uy.kohesive.injekt.injectLazy @@ -228,28 +231,34 @@ class DownloadManager(val context: Context) { * @param source the source of the chapters. */ fun deleteChapters(chapters: List, manga: Manga, source: Source) { - val wasPaused = isPaused() - if (chapters.isEmpty()) { - DownloadService.stop(context) - downloader.queue.clear() - return - } - downloader.pause() - downloader.queue.remove(chapters) - if (!wasPaused && downloader.queue.isNotEmpty()) { - downloader.start() - } else if (downloader.queue.isEmpty() && DownloadService.isRunning(context)) { - DownloadService.stop(context) - } else if (downloader.queue.isEmpty()) { - DownloadService.callListeners(false) - downloader.stop() - } - queue.remove(chapters) - val chapterDirs = provider.findChapterDirs(chapters, manga, source) + provider.findTempChapterDirs(chapters, manga, source) - chapterDirs.forEach { it.delete() } - cache.removeChapters(chapters, manga) - if (cache.getDownloadCount(manga, true) == 0) { // Delete manga directory if empty - chapterDirs.firstOrNull()?.parentFile?.delete() + GlobalScope.launch(Dispatchers.IO) { + val wasPaused = isPaused() + if (chapters.isEmpty()) { + DownloadService.stop(context) + downloader.queue.clear() + return@launch + } + downloader.pause() + downloader.queue.remove(chapters) + if (!wasPaused && downloader.queue.isNotEmpty()) { + downloader.start() + } else if (downloader.queue.isEmpty() && DownloadService.isRunning(context)) { + DownloadService.stop(context) + } else if (downloader.queue.isEmpty()) { + DownloadService.callListeners(false) + downloader.stop() + } + queue.remove(chapters) + val chapterDirs = + provider.findChapterDirs(chapters, manga, source) + provider.findTempChapterDirs( + chapters, manga, source + ) + chapterDirs.forEach { it.delete() } + cache.removeChapters(chapters, manga) + if (cache.getDownloadCount(manga, true) == 0) { // Delete manga directory if empty + chapterDirs.firstOrNull()?.parentFile?.delete() + } + queue.updateListeners() } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt index 23254f5b92..41e5520d42 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt @@ -57,6 +57,7 @@ class DownloadService : Service() { it.downloadStatusChanged(downloading ?: downloadManager.hasQueue()) } } + /** * Starts this service. * diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/model/DownloadQueue.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/model/DownloadQueue.kt index c3e2c72bb7..5325af0bbb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/model/DownloadQueue.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/model/DownloadQueue.kt @@ -45,6 +45,10 @@ List by queue { } } + fun updateListeners() { + downloadListeners.forEach { it.updateDownloads() } + } + fun remove(chapter: Chapter) { find { it.chapter.id == chapter.id }?.let { remove(it) } } @@ -138,5 +142,6 @@ List by queue { interface DownloadListener { fun updateDownload(download: Download) + fun updateDownloads() } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt index bd3ff0e994..ee1ab8f2b7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt @@ -165,6 +165,15 @@ class MangaDetailsPresenter( } } + override fun updateDownloads() { + scope.launch(Dispatchers.Default) { + updateChapters(chapters) + withContext(Dispatchers.Main) { + controller.updateChapters(chapters) + } + } + } + /** * Converts a chapter from the database to an extended model, allowing to store new fields. */ @@ -266,12 +275,8 @@ class MangaDetailsPresenter( */ fun deleteChapter(chapter: ChapterItem) { downloadManager.deleteChapters(listOf(chapter), manga, source) - val downloads = downloadManager.queue.toMutableList() - downloads.remove(chapter.download) - downloadManager.reorderQueue(downloads) - this.chapters.find { it.id == chapter.id }?.apply { - status = Download.NOT_DOWNLOADED + status = Download.QUEUE download = null } @@ -284,10 +289,9 @@ class MangaDetailsPresenter( */ fun deleteChapters(chapters: List, update: Boolean = true) { downloadManager.deleteChapters(chapters, manga, source) - chapters.forEach { chapter -> this.chapters.find { it.id == chapter.id }?.apply { - status = Download.NOT_DOWNLOADED + status = Download.QUEUE download = null } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChaptersPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChaptersPresenter.kt index 9309054b30..c1d4c41ed5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChaptersPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChaptersPresenter.kt @@ -82,6 +82,15 @@ class RecentChaptersPresenter( } } + override fun updateDownloads() { + scope.launch { + setDownloadedChapters(chapters) + withContext(Dispatchers.Main) { + controller.onNextRecentChapters(chapters) + } + } + } + override fun onUpdateManga(manga: LibraryManga) { getUpdates() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recents/RecentsPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recents/RecentsPresenter.kt index 96be9624d0..857fd7362b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recents/RecentsPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recents/RecentsPresenter.kt @@ -241,6 +241,15 @@ class RecentsPresenter( } } + override fun updateDownloads() { + scope.launch { + setDownloadedChapters(recentItems) + withContext(Dispatchers.Main) { + controller.showLists(recentItems) + } + } + } + override fun onUpdateManga(manga: LibraryManga) { if (manga.id == null && !LibraryUpdateService.isRunning()) { scope.launch(Dispatchers.Main) { controller.setRefreshing(false) }