Prefer to get page tokens from MPV

This commit is contained in:
FooIbar committed 2024-11-09 19:44:12 +08:00
1 parent e3f4c24983
commit 40caa7b1eb
3 files changed
+16 -15

No files matched your search

@@ -18,6 +18,7 @@ object EhCookieStore : CookiesStorage {
const val KEY_IPB_MEMBER_ID = "ipb_member_id"
const val KEY_IPB_PASS_HASH = "ipb_pass_hash"
const val KEY_IGNEOUS = "igneous"
private const val KEY_HATH_PERKS = "hath_perks"
private const val KEY_CONTENT_WARNING = "nw"
private const val CONTENT_WARNING_NOT_SHOW = "1"
private const val KEY_UTMP_NAME = "__utmp"
@@ -35,6 +36,8 @@ object EhCookieStore : CookiesStorage {
fun getUserId() = getCookies(EhUrl.HOST_E)?.get(KEY_IPB_MEMBER_ID)
fun getHathPerks() = getCookies(EhUrl.HOST_E)?.get(KEY_HATH_PERKS)?.substringBefore('-')
fun getIdentityCookies(): List<Pair<String, String?>> {
val eCookies = getCookies(EhUrl.HOST_E)
val exCookies = getCookies(EhUrl.HOST_EX)
@@ -87,6 +87,9 @@ object EhUtils {
val isExHentai: Boolean
get() = Settings.gallerySite.value == EhUrl.SITE_EX
val isMpvAvailable
get() = EhCookieStore.getHathPerks()?.contains('q') == true
fun getCategory(type: String?): Int {
for (entry in CATEGORY_STRINGS) {
for (str in entry.first) {
@@ -25,6 +25,7 @@ import com.hippo.ehviewer.client.EhUrl
import com.hippo.ehviewer.client.EhUrl.getGalleryDetailUrl
import com.hippo.ehviewer.client.EhUrl.getGalleryMultiPageViewerUrl
import com.hippo.ehviewer.client.EhUrl.referer
import com.hippo.ehviewer.client.EhUtils
import com.hippo.ehviewer.client.data.GalleryInfo
import com.hippo.ehviewer.client.ehRequest
import com.hippo.ehviewer.client.exception.QuotaExceededException
@@ -327,8 +328,10 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS
spiderInfo
}
private val isMpvAvailable = EhUtils.isMpvAvailable
suspend fun getPTokenFromMultiPageViewer(index: Int): String? {
val spiderInfo = spiderInfo
if (!isMpvAvailable) return null
val url = getGalleryMultiPageViewerUrl(
galleryInfo.gid,
galleryInfo.token,
@@ -347,8 +350,6 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS
}
suspend fun getPTokenFromInternet(index: Int): String? {
val spiderInfo = spiderInfo
// Check previewIndex
var previewIndex: Int
previewIndex = if (spiderInfo.previewPerPage >= 0) {
@@ -538,25 +539,19 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS
private suspend fun doInJob(index: Int, force: Boolean, orgImg: Boolean, skipHath: Boolean) {
suspend fun getPToken(index: Int): String? {
if (index !in 0 until size) return null
return spiderInfo.pTokenMap[index].takeIf { it != TOKEN_FAILED }
?: getPTokenFromInternet(index)
?: getPTokenFromInternet(index)
return spiderInfo.pTokenMap[index]
?: getPTokenFromMultiPageViewer(index)
?: getPTokenFromInternet(index)
// Preview size may changed, so try to get pToken twice
?: getPTokenFromInternet(index)
}
val previousPToken: String?
val pToken: String
pTokenLock.withLock {
if (force) {
if (spiderInfo.pTokenMap[index] == TOKEN_FAILED) {
spiderInfo.pTokenMap.remove(index)
}
} else if (index in spiderDen) {
if (!force && index in spiderDen) {
return updatePageState(index, STATE_FINISHED)
}
pToken = getPToken(index)
?: return updatePageState(index, STATE_FAILED, PTOKEN_FAILED_MESSAGE).also {
spiderInfo.pTokenMap[index] = TOKEN_FAILED
}
pToken = getPToken(index) ?: return updatePageState(index, STATE_FAILED, PTOKEN_FAILED_MESSAGE)
previousPToken = getPToken(index - 1)
// The lock for delay should be acquired before anything else to maintain FIFO order