Fix closing response in interceptors
This commit is contained in:
@@ -6,6 +6,7 @@ import androidx.collection.set
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.Response
|
||||
import okhttp3.internal.closeQuietly
|
||||
import okhttp3.internal.headersContentLength
|
||||
import org.jsoup.internal.StringUtil
|
||||
import org.jsoup.nodes.Element
|
||||
@@ -284,10 +285,11 @@ internal class ExHentaiParser(
|
||||
val response = chain.proceed(chain.request())
|
||||
if (response.headersContentLength() <= 256) {
|
||||
val text = response.peekBody(256).string()
|
||||
if (text.startsWith("Your IP address has been temporarily banned")) {
|
||||
if (text.startsWith("Your IP address has been temporarily banned", ignoreCase = true)) {
|
||||
val hours = Regex("([0-9]+) hours?").find(text)?.groupValues?.getOrNull(1)?.toLongOrNull() ?: 0
|
||||
val minutes = Regex("([0-9]+) minutes?").find(text)?.groupValues?.getOrNull(1)?.toLongOrNull() ?: 0
|
||||
val seconds = Regex("([0-9]+) seconds?").find(text)?.groupValues?.getOrNull(1)?.toLongOrNull() ?: 0
|
||||
response.closeQuietly()
|
||||
throw TooManyRequestExceptions(
|
||||
url = response.request.url.toString(),
|
||||
retryAfter = TimeUnit.HOURS.toMillis(hours)
|
||||
|
||||
@@ -406,9 +406,8 @@ internal abstract class MangaFireParser(
|
||||
return response
|
||||
}
|
||||
|
||||
val offset = request.url.fragment!!.substringAfter("_").toInt()
|
||||
|
||||
return context.redrawImageResponse(response) { bitmap ->
|
||||
val offset = request.url.fragment!!.substringAfter("_").toInt()
|
||||
val width = bitmap.width
|
||||
val height = bitmap.height
|
||||
|
||||
|
||||
@@ -227,14 +227,11 @@ internal abstract class MangaPlusParser(
|
||||
return response
|
||||
}
|
||||
|
||||
val contentType = response.headers["Content-Type"] ?: "image/jpeg"
|
||||
|
||||
val image = requireNotNull(response.body).bytes().decodeXorCipher(encryptionKey)
|
||||
val body = image.toResponseBody(contentType.toMediaTypeOrNull())
|
||||
|
||||
return response.newBuilder()
|
||||
.body(body)
|
||||
.build()
|
||||
return response.map { responseBody ->
|
||||
val contentType = response.headers["Content-Type"] ?: "image/jpeg"
|
||||
val image = responseBody.bytes().decodeXorCipher(encryptionKey)
|
||||
image.toResponseBody(contentType.toMediaTypeOrNull())
|
||||
}
|
||||
}
|
||||
|
||||
private fun ByteArray.decodeXorCipher(key: String): ByteArray {
|
||||
|
||||
@@ -128,9 +128,11 @@ internal class LuratoonScansParser(context: MangaLoaderContext) :
|
||||
override fun intercept(chain: Interceptor.Chain): Response {
|
||||
val response = chain.proceed(chain.request())
|
||||
if (response.mimeType == "application/octet-stream") {
|
||||
val (bytes, name) = ZipInputStream(checkNotNull(response.body).byteStream()).use {
|
||||
val entry = it.nextEntry
|
||||
it.readBytes() to entry?.name
|
||||
val (bytes, name) = response.use { resp ->
|
||||
ZipInputStream(resp.requireBody().byteStream()).use {
|
||||
val entry = it.nextEntry
|
||||
it.readBytes() to entry?.name
|
||||
}
|
||||
}
|
||||
val type = if (name?.endsWith(".avif", ignoreCase = true) == true) {
|
||||
"image/avif"
|
||||
|
||||
@@ -189,8 +189,8 @@ internal class CuuTruyenParser(context: MangaLoaderContext) :
|
||||
return response
|
||||
}
|
||||
|
||||
val drmData = fragment.substringAfter(DRM_DATA_KEY)
|
||||
return context.redrawImageResponse(response) { bitmap ->
|
||||
val drmData = fragment.substringAfter(DRM_DATA_KEY)
|
||||
unscrambleImage(bitmap, drmData)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user