Downloader: Don't queue chapters on GlobalScope (#10217)

This fixes auto-download on library update not working on certain cases.
This commit is contained in:
Ivan Iskandar 2023-12-08 10:17:01 +07:00 committed by GitHub
parent 3135db4bb2
commit 8779b263ab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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<Chapter>, autoStart: Boolean) = launchIO {
if (chapters.isEmpty()) {
return@launchIO
}
fun queueChapters(manga: Manga, chapters: List<Chapter>, 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)
}