Allow ExchangeSite on Http 500 (#1905)
* Allow ExchangeSite on Http 500 * Fixup --------- Co-authored-by: Dude so hot <djohn@fbi.gov>
This commit is contained in:
1 parent
4052007de8
commit
dd0482cb26
5 files changed
+46
-15
No files matched your search
@@ -30,6 +30,7 @@ import coil3.gif.AnimatedImageDecoder
|
||||
import coil3.gif.GifDecoder
|
||||
import coil3.network.ConnectivityChecker
|
||||
import coil3.network.NetworkFetcher
|
||||
import coil3.network.ktor3.asNetworkClient
|
||||
import coil3.request.ErrorResult
|
||||
import coil3.request.ImageRequest
|
||||
import coil3.request.crossfade
|
||||
@@ -43,6 +44,7 @@ import com.hippo.ehviewer.coil.HardwareBitmapInterceptor
|
||||
import com.hippo.ehviewer.coil.MapExtraInfoInterceptor
|
||||
import com.hippo.ehviewer.coil.MergeInterceptor
|
||||
import com.hippo.ehviewer.coil.QrCodeInterceptor
|
||||
import com.hippo.ehviewer.coil.exchangeSite
|
||||
import com.hippo.ehviewer.coil.limitConcurrency
|
||||
import com.hippo.ehviewer.dailycheck.checkDawn
|
||||
import com.hippo.ehviewer.dao.SearchDatabase
|
||||
@@ -161,7 +163,12 @@ class EhApplication :
|
||||
interceptorCoroutineContext(Dispatchers.Default)
|
||||
components {
|
||||
serviceLoaderEnabled(false)
|
||||
add(NetworkFetcher.Factory({ ktorClient.limitConcurrency() }) { ConnectivityChecker.ONLINE })
|
||||
add(
|
||||
NetworkFetcher.Factory(
|
||||
networkClient = { ktorClient.asNetworkClient().limitConcurrency().exchangeSite() },
|
||||
connectivityChecker = { ConnectivityChecker.ONLINE },
|
||||
),
|
||||
)
|
||||
add(MergeInterceptor)
|
||||
add(DownloadThumbInterceptor)
|
||||
if (isAtLeastO) {
|
||||
|
||||
@@ -44,16 +44,15 @@ val String.isV2PreviewKey
|
||||
get() = startsWith('$')
|
||||
|
||||
val GalleryInfo.thumbUrl
|
||||
get() = thumbKey!!.let {
|
||||
if (it.endsWith("webp")) {
|
||||
if (useExThumb) URL_PREFIX_THUMB_EX else URL_PREFIX_THUMB_E
|
||||
} else {
|
||||
v1ThumbPrefix
|
||||
} + it
|
||||
}
|
||||
get() = keyToUrl(thumbKey!!)
|
||||
|
||||
val v1ThumbPrefix
|
||||
get() = if (useExThumb) URL_PREFIX_V1_THUMB_EX else URL_PREFIX_THUMB_E
|
||||
fun keyToUrl(key: String, exSite: Boolean = useExThumb) = if (key.endsWith("webp")) {
|
||||
if (exSite) URL_PREFIX_THUMB_EX else URL_PREFIX_THUMB_E
|
||||
} else {
|
||||
if (exSite) URL_PREFIX_V1_THUMB_EX else URL_PREFIX_THUMB_E
|
||||
} + key
|
||||
|
||||
fun flipThumbSite(url: String) = keyToUrl(getThumbKey(url), !useExThumb)
|
||||
|
||||
private val useExThumb
|
||||
get() = EhUtils.isExHentai && !Settings.forceEhThumb.value
|
||||
@@ -16,7 +16,7 @@
|
||||
package com.hippo.ehviewer.client.data
|
||||
|
||||
import android.os.Parcelable
|
||||
import com.hippo.ehviewer.client.v1ThumbPrefix
|
||||
import com.hippo.ehviewer.client.keyToUrl
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
sealed interface GalleryPreview : Parcelable {
|
||||
@@ -30,7 +30,7 @@ data class V1GalleryPreview(
|
||||
override val imageKey: String,
|
||||
override val position: Int,
|
||||
) : GalleryPreview {
|
||||
override val url get() = v1ThumbPrefix + imageKey
|
||||
override val url get() = keyToUrl(imageKey)
|
||||
}
|
||||
|
||||
@Parcelize
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.hippo.ehviewer.coil
|
||||
|
||||
import coil3.network.HttpException
|
||||
import coil3.network.NetworkClient
|
||||
import coil3.network.NetworkRequest
|
||||
import coil3.network.NetworkResponse
|
||||
import com.hippo.ehviewer.client.EhUtils
|
||||
import com.hippo.ehviewer.client.flipThumbSite
|
||||
|
||||
class ExchangeSiteNetworkClient(val impl: NetworkClient) : NetworkClient {
|
||||
override suspend fun <T> executeRequest(req: NetworkRequest, f: suspend (NetworkResponse) -> T): T {
|
||||
if (EhUtils.isExHentai) {
|
||||
try {
|
||||
return impl.executeRequest(req, f)
|
||||
} catch (e: HttpException) {
|
||||
if (e.response.code == 500) {
|
||||
return impl.executeRequest(req.copy(url = flipThumbSite(req.url)), f)
|
||||
}
|
||||
throw e
|
||||
}
|
||||
} else {
|
||||
return impl.executeRequest(req, f)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun NetworkClient.exchangeSite() = ExchangeSiteNetworkClient(this)
|
||||
@@ -3,10 +3,8 @@ package com.hippo.ehviewer.coil
|
||||
import coil3.network.NetworkClient
|
||||
import coil3.network.NetworkRequest
|
||||
import coil3.network.NetworkResponse
|
||||
import coil3.network.ktor3.asNetworkClient
|
||||
import com.hippo.ehviewer.client.URL_PREFIX_THUMB_EX
|
||||
import com.hippo.ehviewer.client.URL_SIGNATURE_THUMB_NORMAL
|
||||
import io.ktor.client.HttpClient
|
||||
import kotlinx.coroutines.NonCancellable
|
||||
import kotlinx.coroutines.withContext
|
||||
import moe.tarsin.coroutines.NamedSemaphore
|
||||
@@ -27,4 +25,4 @@ class LimitConcurrencyNetworkClient(val impl: NetworkClient) : NetworkClient {
|
||||
}
|
||||
}
|
||||
|
||||
fun HttpClient.limitConcurrency() = LimitConcurrencyNetworkClient(asNetworkClient())
|
||||
fun NetworkClient.limitConcurrency() = LimitConcurrencyNetworkClient(this)
|
||||
Reference in new issue
Block a user