From 302b57d4ac203e79f2f57b5f15595a20916df791 Mon Sep 17 00:00:00 2001
From: FooIbar <118464521+FooIbar@users.noreply.github.com>
Date: Fri, 16 Aug 2024 23:53:27 +0800
Subject: [PATCH] Fix normal preview in exhentai
Remove force e-hentai thumb option due to infeasible.
---
.../kotlin/com/hippo/ehviewer/Settings.kt | 1 -
.../ehviewer/client/EhCacheKeyFactory.kt | 30 +++++++++++--------
.../kotlin/com/hippo/ehviewer/client/EhUrl.kt | 12 +++-----
.../ehviewer/client/data/GalleryPreview.kt | 6 ++--
.../client/parser/GalleryDetailParser.kt | 8 ++---
.../com/hippo/ehviewer/coil/Extensions.kt | 2 +-
.../hippo/ehviewer/coil/MergeInterceptor.kt | 3 +-
.../hippo/ehviewer/ui/settings/EhScreen.kt | 5 ----
app/src/main/res/values-zh-rCN/strings.xml | 2 --
app/src/main/res/values-zh-rTW/strings.xml | 2 --
app/src/main/res/values/strings.xml | 2 --
11 files changed, 31 insertions(+), 42 deletions(-)
diff --git a/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt b/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt
index ca7cd4133..2a8db80cb 100644
--- a/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt
+++ b/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt
@@ -142,7 +142,6 @@ object Settings : DataStorePreferences(null) {
var launchPage by intPref("launch_page_2", 0)
var commentThreshold by intPref("comment_threshold", -101)
var hardwareBitmapThreshold by intPref("hardware_bitmap_threshold", 16384)
- var forceEhThumb by boolPref("force_eh_thumb", false)
var showComments by boolPref("show_gallery_comments", true)
var requestNews by boolPref("request_news", false).observed { updateWhenRequestNewsChanges() }
var hideHvEvents by boolPref("hide_hv_events", false)
diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/EhCacheKeyFactory.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/EhCacheKeyFactory.kt
index c1bfc37db..73a76bdfa 100644
--- a/app/src/main/kotlin/com/hippo/ehviewer/client/EhCacheKeyFactory.kt
+++ b/app/src/main/kotlin/com/hippo/ehviewer/client/EhCacheKeyFactory.kt
@@ -15,32 +15,36 @@
*/
package com.hippo.ehviewer.client
-import com.hippo.ehviewer.Settings
import com.hippo.ehviewer.client.data.GalleryInfo
import com.hippo.ehviewer.client.data.GalleryPreview
import com.hippo.ehviewer.client.data.NormalGalleryPreview
// ExHentai Large Preview: https://s.exhentai.org/t/***
-// ExHentai Normal Preview: https://s.exhentai.org/m/***
-// EHentai Normal Preview: https://ehgt.org/m/***
+// ExHentai Normal Preview: https://*.hath.network/cm/[timed token]/[gid]-[index].jpg
+// EHentai Normal Preview: https://ehgt.org/m/[permanent token]/[gid]-[index].jpg
// EHentai Large Preview: https://ehgt.org/***
private const val URL_PREFIX_THUMB_E = "https://ehgt.org/"
-private const val URL_PREFIX_THUMB_EX = "https://s.exhentai.org/"
-private const val URL_PREFIX_LARGE_THUMB_EX = URL_PREFIX_THUMB_EX + "t/"
+private const val URL_PREFIX_THUMB_EX = "https://s.exhentai.org/t/"
+private const val NORMAL_PREVIEW_PREFIX = "$"
+private val NormalPreviewKeyRegex = Regex("/(\\d+-\\d+)\\.jpg$")
fun getImageKey(gid: Long, index: Int): String = "image:$gid:$index"
-fun getThumbKey(url: String): String = url.removePrefix(URL_PREFIX_THUMB_E).removePrefix(URL_PREFIX_LARGE_THUMB_EX).removePrefix(URL_PREFIX_THUMB_EX)
+fun getThumbKey(url: String): String = url.removePrefix(thumbPrefix)
-val GalleryPreview.url
- get() = if (exThumb) {
- if (this is NormalGalleryPreview) URL_PREFIX_THUMB_EX else URL_PREFIX_LARGE_THUMB_EX
+val String.isNormalPreviewKey
+ get() = startsWith(NORMAL_PREVIEW_PREFIX)
+
+val GalleryPreview.imageKey
+ get() = if (this is NormalGalleryPreview) {
+ NormalPreviewKeyRegex.find(url)?.run { NORMAL_PREVIEW_PREFIX + groupValues[1] }
} else {
- URL_PREFIX_THUMB_E
- } + imageKey
+ getThumbKey(url)
+ }
val GalleryInfo.thumbUrl
- get() = (if (exThumb) URL_PREFIX_LARGE_THUMB_EX else URL_PREFIX_THUMB_E) + thumbKey!!
+ get() = thumbPrefix + thumbKey!!
-val exThumb get() = EhUtils.isExHentai && !Settings.forceEhThumb
+private val thumbPrefix
+ get() = if (EhUtils.isExHentai) URL_PREFIX_THUMB_EX else URL_PREFIX_THUMB_E
diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/EhUrl.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/EhUrl.kt
index 836270725..56a7a6f8f 100644
--- a/app/src/main/kotlin/com/hippo/ehviewer/client/EhUrl.kt
+++ b/app/src/main/kotlin/com/hippo/ehviewer/client/EhUrl.kt
@@ -60,14 +60,10 @@ object EhUrl {
}
val apiUrl: String
- get() = if (Settings.forceEhThumb) {
- API_E
- } else {
- when (Settings.gallerySite) {
- SITE_E -> API_E
- SITE_EX -> API_EX
- else -> API_E
- }
+ get() = when (Settings.gallerySite) {
+ SITE_E -> API_E
+ SITE_EX -> API_EX
+ else -> API_E
}
val referer: String
diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryPreview.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryPreview.kt
index 4416e985b..1d142165b 100644
--- a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryPreview.kt
+++ b/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryPreview.kt
@@ -19,19 +19,19 @@ import android.os.Parcelable
import kotlinx.parcelize.Parcelize
interface GalleryPreview : Parcelable {
- val imageKey: String
+ val url: String
val position: Int
}
@Parcelize
data class LargeGalleryPreview(
- override val imageKey: String,
+ override val url: String,
override val position: Int,
) : GalleryPreview
@Parcelize
data class NormalGalleryPreview(
- override val imageKey: String,
+ override val url: String,
override val position: Int,
val offsetX: Int,
val clipWidth: Int,
diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryDetailParser.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryDetailParser.kt
index e3e2347d9..ed5168c98 100644
--- a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryDetailParser.kt
+++ b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryDetailParser.kt
@@ -458,9 +458,9 @@ object GalleryDetailParser {
check(PATTERN_LARGE_PREVIEW.containsMatchIn(body))
return PATTERN_LARGE_PREVIEW.findAll(body).unzip {
val position = it.groupValues[2].toInt() - 1
- val imageKey = getThumbKey(it.groupValues[3].trim())
+ val url = it.groupValues[3].trim()
val pageUrl = it.groupValues[1].trim()
- LargeGalleryPreview(imageKey, position) to pageUrl
+ LargeGalleryPreview(url, position) to pageUrl
}.run {
first.toList() to second.toList()
}
@@ -470,12 +470,12 @@ object GalleryDetailParser {
check(PATTERN_NORMAL_PREVIEW.containsMatchIn(body))
return PATTERN_NORMAL_PREVIEW.findAll(body).unzip {
val position = it.groupValues[6].toInt() - 1
- val imageKey = getThumbKey(it.groupValues[3].trim())
+ val url = it.groupValues[3].trim()
val xOffset = it.groupValues[4].toIntOrNull() ?: 0
val width = it.groupValues[1].toInt()
val height = it.groupValues[2].toInt()
val pageUrl = it.groupValues[5].trim()
- NormalGalleryPreview(imageKey, position, xOffset, width, height) to pageUrl
+ NormalGalleryPreview(url, position, xOffset, width, height) to pageUrl
}.run {
first.toList() to second.toList()
}
diff --git a/app/src/main/kotlin/com/hippo/ehviewer/coil/Extensions.kt b/app/src/main/kotlin/com/hippo/ehviewer/coil/Extensions.kt
index 0bb1b4ecc..7ab263562 100644
--- a/app/src/main/kotlin/com/hippo/ehviewer/coil/Extensions.kt
+++ b/app/src/main/kotlin/com/hippo/ehviewer/coil/Extensions.kt
@@ -16,7 +16,7 @@ import com.hippo.ehviewer.client.CHROME_ACCEPT_LANGUAGE
import com.hippo.ehviewer.client.data.GalleryInfo
import com.hippo.ehviewer.client.data.GalleryPreview
import com.hippo.ehviewer.client.data.NormalGalleryPreview
-import com.hippo.ehviewer.client.url
+import com.hippo.ehviewer.client.imageKey
import com.hippo.ehviewer.spider.DownloadInfoMagics.encodeMagicRequestOrUrl
import io.ktor.http.HttpHeaders
diff --git a/app/src/main/kotlin/com/hippo/ehviewer/coil/MergeInterceptor.kt b/app/src/main/kotlin/com/hippo/ehviewer/coil/MergeInterceptor.kt
index f7fc58f88..7b318b317 100644
--- a/app/src/main/kotlin/com/hippo/ehviewer/coil/MergeInterceptor.kt
+++ b/app/src/main/kotlin/com/hippo/ehviewer/coil/MergeInterceptor.kt
@@ -3,6 +3,7 @@ package com.hippo.ehviewer.coil
import coil3.intercept.Interceptor
import coil3.request.ImageResult
import com.hippo.ehviewer.Settings
+import com.hippo.ehviewer.client.isNormalPreviewKey
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
import kotlinx.coroutines.CancellableContinuation
@@ -41,7 +42,7 @@ object MergeInterceptor : Interceptor {
override suspend fun intercept(chain: Interceptor.Chain): ImageResult {
val req = chain.request
- val key = req.memoryCacheKey?.takeIf { it.startsWith("m/") || Settings.preloadThumbAggressively } ?: return withContext(req.interceptorCoroutineContext) { chain.proceed() }
+ val key = req.memoryCacheKey?.takeIf { it.isNormalPreviewKey || Settings.preloadThumbAggressively } ?: return withContext(req.interceptorCoroutineContext) { chain.proceed() }
suspendCancellableCoroutine { continuation ->
synchronized(pendingContinuationMapLock) {
diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/EhScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/EhScreen.kt
index ffd73719f..a633c3dc8 100644
--- a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/EhScreen.kt
+++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/EhScreen.kt
@@ -333,11 +333,6 @@ fun EhScreen(navigator: DestinationsNavigator) {
entryValueRes = R.array.thumb_resolution_entry_values,
value = thumbResolution,
)
- SwitchPreference(
- title = stringResource(id = R.string.settings_eh_force_eh_thumb),
- summary = stringResource(id = R.string.settings_eh_force_eh_thumb_summary),
- value = Settings::forceEhThumb,
- )
var showGalleryPages by Settings.showGalleryPages.asMutableState()
SwitchPref(
checked = showGalleryPages,
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 17a2c09ba..822eb5d6a 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -303,8 +303,6 @@
缩略图分辨率
%s,指定分辨率可能使获取缩略图失败
自动
- 强制使用 e-hentai 缩略图/API服务器
- 若 exhentai 加载失败可尝试此项\n注意此项将使用 e-hentai 设置加载图像
显示日文标题
需同时在 EHentai 网站设置中启用 Japanese Title
显示画廊页数
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 9180d9d30..0bc79b194 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -303,8 +303,6 @@
縮圖解析度
%s,指定解析度可能會使縮圖取得失敗
自動
- 強制 e-hentai 縮圖/API 伺服器
- 若exhentai載入遇到問題可嘗試此項\n注意,此項將使用 e-hentai 設定來載入圖片。
顯示日文標題
需同時在 EHentai 網站設定中啟用 Japanese Title
顯示圖庫頁數
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 55ebd32f9..67a288038 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -319,8 +319,6 @@
Thumb resolution
Currently %s. Certain resolutions might cause getting thumb failed
Auto
- Force e-hentai thumb/API server
- Try this if you have trouble loading from exhentai\nNote this will use e-hentai settings to load images
Show Japanese title
Require enabling Japanese Title in Settings on EHentai website
Show gallery pages