fix(merged-manga): Fix download ahead for merged entries (#1132)

* Fix download ahead for merged entries

* correctly handle merged manga
This commit is contained in:
Cuong-Tran 2025-09-10 12:04:29 +07:00 committed by GitHub
parent 004b63dfb5
commit 8f2ab5b87e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -34,6 +34,7 @@ import eu.kanade.tachiyomi.source.online.all.MergedSource
import eu.kanade.tachiyomi.ui.reader.chapter.ReaderChapterItem import eu.kanade.tachiyomi.ui.reader.chapter.ReaderChapterItem
import eu.kanade.tachiyomi.ui.reader.loader.ChapterLoader import eu.kanade.tachiyomi.ui.reader.loader.ChapterLoader
import eu.kanade.tachiyomi.ui.reader.loader.DownloadPageLoader import eu.kanade.tachiyomi.ui.reader.loader.DownloadPageLoader
import eu.kanade.tachiyomi.ui.reader.loader.HttpPageLoader
import eu.kanade.tachiyomi.ui.reader.model.InsertPage import eu.kanade.tachiyomi.ui.reader.model.InsertPage
import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
@ -615,8 +616,12 @@ class ReaderViewModel @JvmOverloads constructor(
return return
} }
/**
* This code is likely deprecated since once `chapter.pageLoader` is initialized with [HttpPageLoader],
* it would set `chapter.state` to `Loading` or `Loaded` and return early already.
*/
if (chapter.pageLoader?.isLocal == false) { if (chapter.pageLoader?.isLocal == false) {
val manga = manga ?: return val manga = state.value.mergedManga?.get(chapter.chapter.manga_id) ?: manga ?: return
val dbChapter = chapter.chapter val dbChapter = chapter.chapter
val isDownloaded = downloadManager.isChapterDownloaded( val isDownloaded = downloadManager.isChapterDownloaded(
dbChapter.name, dbChapter.name,
@ -699,14 +704,19 @@ class ReaderViewModel @JvmOverloads constructor(
if (getCurrentChapter()?.pageLoader !is DownloadPageLoader) return if (getCurrentChapter()?.pageLoader !is DownloadPageLoader) return
val nextChapter = state.value.viewerChapters?.nextChapter?.chapter ?: return val nextChapter = state.value.viewerChapters?.nextChapter?.chapter ?: return
// KMK -->
val mangas = state.value.mergedManga ?: mapOf(manga.id to manga)
val nextChapterManga = mangas[nextChapter.manga_id] ?: return
// KMK <--
viewModelScope.launchIO { viewModelScope.launchIO {
val isNextChapterDownloaded = downloadManager.isChapterDownloaded( val isNextChapterDownloaded = downloadManager.isChapterDownloaded(
nextChapter.name, nextChapter.name,
nextChapter.scanlator, nextChapter.scanlator,
// SY --> // KMK -->
manga.ogTitle, nextChapterManga.ogTitle,
// SY <-- nextChapterManga.source,
manga.source, // KMK <--
) )
if (!isNextChapterDownloaded) return@launchIO if (!isNextChapterDownloaded) return@launchIO
@ -718,10 +728,15 @@ class ReaderViewModel @JvmOverloads constructor(
} }
}.take(downloadAheadAmount) }.take(downloadAheadAmount)
downloadManager.downloadChapters( // KMK -->
manga, chaptersToDownload.groupBy { it.mangaId }.forEach { (mangaId, chapters) ->
chaptersToDownload, val chapterManga = mangas[mangaId] ?: return@forEach
) downloadManager.downloadChapters(
chapterManga,
chapters,
)
}
// KMK <--
} }
} }