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 69ae458310..5075f9ae15 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 @@ -338,21 +338,21 @@ class Downloader( download.status = Download.State.DOWNLOADING - // Get all the URLs to the source images, fetch pages if necessary - pageList.filter { it.imageUrl.isNullOrEmpty() }.forEach { page -> - page.status = Page.State.LOAD_PAGE - try { - page.imageUrl = download.source.fetchImageUrl(page).awaitSingle() - } catch (e: Throwable) { - page.status = Page.State.ERROR - } - } - // Start downloading images, consider we can have downloaded images already // Concurrently do 2 pages at a time pageList.asFlow() .flatMapMerge(concurrency = 2) { page -> flow { + // Fetch image URL if necessary + if (page.imageUrl.isNullOrEmpty()) { + page.status = Page.State.LOAD_PAGE + try { + page.imageUrl = download.source.fetchImageUrl(page).awaitSingle() + } catch (e: Throwable) { + page.status = Page.State.ERROR + } + } + withIOContext { getOrDownloadImage(page, download, tmpDir) } emit(page) }.flowOn(Dispatchers.IO)