diff --git a/app/src/main/java/eu/kanade/domain/SYDomainModule.kt b/app/src/main/java/eu/kanade/domain/SYDomainModule.kt index 23796671d..8c23dfeed 100644 --- a/app/src/main/java/eu/kanade/domain/SYDomainModule.kt +++ b/app/src/main/java/eu/kanade/domain/SYDomainModule.kt @@ -98,7 +98,7 @@ class SYDomainModule : InjektModule { addFactory { CreateSortTag(get(), get()) } addFactory { DeleteSortTag(get(), get()) } addFactory { ReorderSortTag(get(), get()) } - addFactory { GetPagePreviews(get()) } + addFactory { GetPagePreviews(get(), get()) } // Required for [MetadataSource] addFactory { GetManga(get()) } diff --git a/app/src/main/java/eu/kanade/domain/manga/interactor/GetPagePreviews.kt b/app/src/main/java/eu/kanade/domain/manga/interactor/GetPagePreviews.kt index 3ff9cec10..e1a7640e3 100644 --- a/app/src/main/java/eu/kanade/domain/manga/interactor/GetPagePreviews.kt +++ b/app/src/main/java/eu/kanade/domain/manga/interactor/GetPagePreviews.kt @@ -1,5 +1,6 @@ package eu.kanade.domain.manga.interactor +import eu.kanade.domain.history.interactor.GetNextChapters import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.PagePreview import eu.kanade.tachiyomi.data.cache.PagePreviewCache @@ -9,17 +10,20 @@ import exh.source.getMainSource class GetPagePreviews( private val pagePreviewCache: PagePreviewCache, + private val getChapters: GetNextChapters, ) { suspend fun await(manga: Manga, source: Source, page: Int): Result { @Suppress("NAME_SHADOWING") val source = source.getMainSource() ?: return Result.Unused + val chapters = getChapters.await(manga.id, false) + val chapterIds = chapters.map { it.id } return try { val pagePreviews = try { - pagePreviewCache.getPageListFromCache(manga, page) + pagePreviewCache.getPageListFromCache(manga, chapterIds, page) } catch (e: Exception) { - source.getPagePreviewList(manga.toSManga(), page).also { - pagePreviewCache.putPageListToCache(manga, it) + source.getPagePreviewList(manga.toSManga(), chapters.map { it.toSChapter() }, page).also { + pagePreviewCache.putPageListToCache(manga, chapterIds, it) } } Result.Success( diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/cache/PagePreviewCache.kt b/app/src/main/java/eu/kanade/tachiyomi/data/cache/PagePreviewCache.kt index 09533a3df..a5914fd82 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/cache/PagePreviewCache.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/cache/PagePreviewCache.kt @@ -81,9 +81,9 @@ class PagePreviewCache(private val context: Context) { * @param manga the manga. * @return the list of pages. */ - fun getPageListFromCache(manga: Manga, page: Int): PagePreviewPage { + fun getPageListFromCache(manga: Manga, chapterIds: List, page: Int): PagePreviewPage { // Get the key for the manga. - val key = DiskUtil.hashKeyForDisk(getKey(manga, page)) + val key = DiskUtil.hashKeyForDisk(getKey(manga, chapterIds, page)) // Convert JSON string to list of objects. Throws an exception if snapshot is null return diskCache.get(key).use { @@ -97,7 +97,7 @@ class PagePreviewCache(private val context: Context) { * @param manga the manga. * @param pages list of pages. */ - fun putPageListToCache(manga: Manga, pages: PagePreviewPage) { + fun putPageListToCache(manga: Manga, chapterIds: List, pages: PagePreviewPage) { // Convert list of pages to json string. val cachedValue = json.encodeToString(pages) @@ -106,7 +106,7 @@ class PagePreviewCache(private val context: Context) { try { // Get editor from md5 key. - val key = DiskUtil.hashKeyForDisk(getKey(manga, pages.page)) + val key = DiskUtil.hashKeyForDisk(getKey(manga, chapterIds, pages.page)) editor = diskCache.edit(key) ?: return // Write page preview urls to cache. @@ -211,7 +211,7 @@ class PagePreviewCache(private val context: Context) { } } - private fun getKey(manga: Manga, page: Int): String { - return "${manga.id}_$page" + private fun getKey(manga: Manga, chapterIds: List, page: Int): String { + return "${manga.id}_${chapterIds.joinToString(separator = "-")}_$page" } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt index 4d24f8eb3..fb53041fb 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt @@ -1144,11 +1144,12 @@ class EHentai( override suspend fun getPagePreviewList( manga: SManga, + chapters: List, page: Int, ): PagePreviewPage { val doc = client.newCall( exGet( - (baseUrl + manga.url) + (baseUrl + (chapters.lastOrNull()?.url ?: manga.url)) .toHttpUrl() .newBuilder() .removeAllQueryParameters("nw") diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/NHentai.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/NHentai.kt index dce9788c8..40ee4a835 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/NHentai.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/NHentai.kt @@ -10,6 +10,7 @@ import eu.kanade.tachiyomi.source.PagePreviewInfo import eu.kanade.tachiyomi.source.PagePreviewPage import eu.kanade.tachiyomi.source.PagePreviewSource import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.source.online.MetadataSource @@ -172,7 +173,7 @@ class NHentai(delegate: HttpSource, val context: Context) : return "$baseUrl/g/${uri.pathSegments[1]}/" } - override suspend fun getPagePreviewList(manga: SManga, page: Int): PagePreviewPage { + override suspend fun getPagePreviewList(manga: SManga, chapters: List, page: Int): PagePreviewPage { val metadata = fetchOrLoadMetadata(manga.id()) { client.newCall(mangaDetailsRequest(manga)).await() } diff --git a/source-api/src/main/java/eu/kanade/tachiyomi/source/PagePreviewSource.kt b/source-api/src/main/java/eu/kanade/tachiyomi/source/PagePreviewSource.kt index d58568182..6504b490c 100644 --- a/source-api/src/main/java/eu/kanade/tachiyomi/source/PagePreviewSource.kt +++ b/source-api/src/main/java/eu/kanade/tachiyomi/source/PagePreviewSource.kt @@ -1,6 +1,7 @@ package eu.kanade.tachiyomi.source import eu.kanade.tachiyomi.network.ProgressListener +import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow @@ -11,7 +12,7 @@ import okhttp3.Response interface PagePreviewSource : Source { - suspend fun getPagePreviewList(manga: SManga, page: Int): PagePreviewPage + suspend fun getPagePreviewList(manga: SManga, chapters: List, page: Int): PagePreviewPage suspend fun fetchPreviewImage(page: PagePreviewInfo, cacheControl: CacheControl? = null): Response }