From 8779b263ab8cc2315005fb7228e7ee41429ddaf8 Mon Sep 17 00:00:00 2001 From: Ivan Iskandar <12537387+ivaniskandar@users.noreply.github.com> Date: Fri, 8 Dec 2023 10:17:01 +0700 Subject: [PATCH] Downloader: Don't queue chapters on GlobalScope (#10217) This fixes auto-download on library update not working on certain cases. --- .../tachiyomi/data/download/Downloader.kt | 26 +++++++------------ 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt index 1dd117f41..30f11c4d1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt @@ -47,7 +47,6 @@ import tachiyomi.core.storage.extension import tachiyomi.core.util.lang.launchIO import tachiyomi.core.util.lang.launchNow import tachiyomi.core.util.lang.withIOContext -import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.system.ImageUtil import tachiyomi.core.util.system.logcat import tachiyomi.domain.category.interactor.GetCategories @@ -265,24 +264,21 @@ class Downloader( * @param chapters the list of chapters to download. * @param autoStart whether to start the downloader after enqueing the chapters. */ - fun queueChapters(manga: Manga, chapters: List, autoStart: Boolean) = launchIO { - if (chapters.isEmpty()) { - return@launchIO - } + fun queueChapters(manga: Manga, chapters: List, autoStart: Boolean) { + if (chapters.isEmpty()) return - val source = sourceManager.get(manga.source) as? HttpSource ?: return@launchIO + val source = sourceManager.get(manga.source) as? HttpSource ?: return val wasEmpty = queueState.value.isEmpty() - val chaptersWithoutDir = chapters + val chaptersToQueue = chapters.asSequence() // Filter out those already downloaded. .filter { provider.findChapterDir(it.name, it.scanlator, manga.title, source) == null } // Add chapters to queue from the start. .sortedByDescending { it.sourceOrder } - - val chaptersToQueue = chaptersWithoutDir // Filter out those already enqueued. .filter { chapter -> queueState.value.none { it.chapter.id == chapter.id } } // Create a download for each one. .map { Download(source, manga, it) } + .toList() if (chaptersToQueue.isNotEmpty()) { addAllToQueue(chaptersToQueue) @@ -299,13 +295,11 @@ class Downloader( queuedDownloads > DOWNLOADS_QUEUED_WARNING_THRESHOLD || maxDownloadsFromSource > CHAPTERS_PER_SOURCE_QUEUE_WARNING_THRESHOLD ) { - withUIContext { - notifier.onWarning( - context.stringResource(MR.strings.download_queue_size_warning), - WARNING_NOTIF_TIMEOUT_MS, - NotificationHandler.openUrl(context, LibraryUpdateNotifier.HELP_WARNING_URL), - ) - } + notifier.onWarning( + context.stringResource(MR.strings.download_queue_size_warning), + WARNING_NOTIF_TIMEOUT_MS, + NotificationHandler.openUrl(context, LibraryUpdateNotifier.HELP_WARNING_URL), + ) } DownloadJob.start(context) }