From f06c8ef2cb45421d1174ce01b50ae9ac6c688e90 Mon Sep 17 00:00:00 2001
From: Jobobby04 <jobobby04@users.noreply.github.com>
Date: Thu, 10 Nov 2022 22:49:23 -0500
Subject: [PATCH] Fix page previews only showing previews when the manga first
 loaded

---
 app/src/main/java/eu/kanade/domain/SYDomainModule.kt |  2 +-
 .../domain/manga/interactor/GetPagePreviews.kt       | 10 +++++++---
 .../kanade/tachiyomi/data/cache/PagePreviewCache.kt  | 12 ++++++------
 .../eu/kanade/tachiyomi/source/online/all/EHentai.kt |  3 ++-
 .../eu/kanade/tachiyomi/source/online/all/NHentai.kt |  3 ++-
 .../eu/kanade/tachiyomi/source/PagePreviewSource.kt  |  3 ++-
 6 files changed, 20 insertions(+), 13 deletions(-)

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<MetadataSource.GetMangaId> { 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<PagePreviewSource>() ?: 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<Long>, 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<Long>, 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<Long>, 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<SChapter>,
         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<SChapter>, 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<SChapter>, page: Int): PagePreviewPage
 
     suspend fun fetchPreviewImage(page: PagePreviewInfo, cacheControl: CacheControl? = null): Response
 }