E-Hentai: use backup imageurl on error (#11108)
* add "Reload broken image" source as backup * bump the extension version
This commit is contained in:
parent
a78b2624da
commit
007d231fa7
@ -1,7 +1,7 @@
|
|||||||
ext {
|
ext {
|
||||||
extName = 'E-Hentai'
|
extName = 'E-Hentai'
|
||||||
extClass = '.EHFactory'
|
extClass = '.EHFactory'
|
||||||
extVersionCode = 25
|
extVersionCode = 26
|
||||||
isNsfw = true
|
isNsfw = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -351,7 +351,29 @@ abstract class EHentai(
|
|||||||
|
|
||||||
override fun pageListParse(response: Response) = throw UnsupportedOperationException()
|
override fun pageListParse(response: Response) = throw UnsupportedOperationException()
|
||||||
|
|
||||||
override fun imageUrlParse(response: Response): String = response.asJsoup().select("#img").attr("abs:src")
|
override fun imageUrlParse(response: Response): String {
|
||||||
|
return imageUrlParse(response, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun imageUrlParse(response: Response, isGetBakImageUrl: Boolean): String {
|
||||||
|
val doc = response.asJsoup()
|
||||||
|
val imgUrl = doc.select("#img").attr("abs:src")
|
||||||
|
|
||||||
|
if (!isGetBakImageUrl) {
|
||||||
|
return imgUrl
|
||||||
|
}
|
||||||
|
|
||||||
|
// from https://github.com/Miuzarte/EHentai-go/blob/dd9a24adb13300c028c35f53b9eff31b51966def/query.go#L695
|
||||||
|
val loadfail = doc.selectFirst("#loadfail") ?: return imgUrl
|
||||||
|
val onclick = loadfail.attr("onclick")
|
||||||
|
val nlValue = Regex("nl\\('(.+?)'\\)").find(onclick)?.groupValues?.get(1)
|
||||||
|
if (nlValue.isNullOrEmpty()) return imgUrl
|
||||||
|
|
||||||
|
val bakUrl = response.request.url.newBuilder()
|
||||||
|
.addQueryParameter("nl", nlValue)
|
||||||
|
.toString()
|
||||||
|
return "$imgUrl#$bakUrl"
|
||||||
|
}
|
||||||
|
|
||||||
private val cookiesHeader by lazy {
|
private val cookiesHeader by lazy {
|
||||||
val cookies = mutableMapOf<String, String>()
|
val cookies = mutableMapOf<String, String>()
|
||||||
@ -398,6 +420,25 @@ abstract class EHentai(
|
|||||||
|
|
||||||
override val client = network.cloudflareClient.newBuilder()
|
override val client = network.cloudflareClient.newBuilder()
|
||||||
.cookieJar(CookieJar.NO_COOKIES)
|
.cookieJar(CookieJar.NO_COOKIES)
|
||||||
|
.addInterceptor { chain ->
|
||||||
|
val request = chain.request()
|
||||||
|
val result = runCatching { chain.proceed(request) }
|
||||||
|
val bakUrl = request.url.fragment
|
||||||
|
?: return@addInterceptor result.getOrThrow()
|
||||||
|
|
||||||
|
if (result.isFailure || result.getOrNull()?.isSuccessful != true) {
|
||||||
|
result.getOrNull()?.close()
|
||||||
|
val newRequest = GET(bakUrl, headers)
|
||||||
|
val newImageUrl = imageUrlParse(chain.proceed(newRequest), false)
|
||||||
|
val newImageRequest = request.newBuilder()
|
||||||
|
.url(newImageUrl)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
chain.proceed(newImageRequest)
|
||||||
|
} else {
|
||||||
|
result.getOrThrow()
|
||||||
|
}
|
||||||
|
}
|
||||||
.addInterceptor { chain ->
|
.addInterceptor { chain ->
|
||||||
val newReq = chain
|
val newReq = chain
|
||||||
.request()
|
.request()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user