Use source().asResponseBody() to fix MIME to avoid extra memory load (#10254)

This commit is contained in:
stevenyomi 2025-08-24 09:53:51 +00:00 committed by Draff
parent f50bec002b
commit 0e9e55b945
Signed by: Draff
GPG Key ID: E8A89F3211677653
17 changed files with 39 additions and 44 deletions

View File

@ -1,7 +1,7 @@
ext {
extName = 'Luscious'
extClass = '.LusciousFactory'
extVersionCode = 20
extVersionCode = 21
isNsfw = true
}

View File

@ -31,11 +31,11 @@ import kotlinx.serialization.json.putJsonArray
import kotlinx.serialization.json.putJsonObject
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.Interceptor
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import okhttp3.ResponseBody.Companion.toResponseBody
import okhttp3.ResponseBody.Companion.asResponseBody
import rx.Observable
import uy.kohesive.injekt.injectLazy
import java.util.Calendar
@ -63,8 +63,8 @@ abstract class Luscious(
private val rewriteOctetStream: Interceptor = Interceptor { chain ->
val originalResponse: Response = chain.proceed(chain.request())
if (originalResponse.headers("Content-Type").contains("application/octet-stream") && originalResponse.request.url.toString().contains(".webp")) {
val orgBody = originalResponse.body.bytes()
val newBody = orgBody.toResponseBody("image/webp".toMediaTypeOrNull())
val orgBody = originalResponse.body.source()
val newBody = orgBody.asResponseBody("image/webp".toMediaType())
originalResponse.newBuilder()
.body(newBody)
.build()

View File

@ -1,7 +1,7 @@
ext {
extName = 'Tappytoon'
extClass = '.TappytoonFactory'
extVersionCode = 8
extVersionCode = 9
isNsfw = true
}

View File

@ -17,7 +17,7 @@ import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.Request
import okhttp3.Response
import okhttp3.ResponseBody.Companion.toResponseBody
import okhttp3.ResponseBody.Companion.asResponseBody
import uy.kohesive.injekt.injectLazy
import java.io.IOException
import java.text.SimpleDateFormat
@ -40,9 +40,8 @@ class Tappytoon(override val lang: String) : HttpSource() {
}
// Fix image content type
val type = IMG_CONTENT_TYPE.toMediaType()
val body = res.body.bytes().toResponseBody(type)
return@addInterceptor res.newBuilder().body(body)
.header("Content-Type", IMG_CONTENT_TYPE).build()
val body = res.body.source().asResponseBody(type)
return@addInterceptor res.newBuilder().body(body).build()
}
// Throw JSON error if available
if (mime == "application/json") {

View File

@ -15,11 +15,11 @@ import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import eu.kanade.tachiyomi.util.asJsoup
import keiyoushi.utils.getPreferencesLazy
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import okhttp3.ResponseBody.Companion.toResponseBody
import okhttp3.ResponseBody.Companion.asResponseBody
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import java.text.SimpleDateFormat
@ -40,9 +40,9 @@ class MangaKatana : ConfigurableSource, ParsedHttpSource() {
override val client: OkHttpClient = network.cloudflareClient.newBuilder().addNetworkInterceptor { chain ->
val originalResponse = chain.proceed(chain.request())
if (originalResponse.headers("Content-Type").contains("application/octet-stream")) {
val orgBody = originalResponse.body.bytes()
val orgBody = originalResponse.body.source()
val extension = chain.request().url.toString().substringAfterLast(".")
val newBody = orgBody.toResponseBody("image/$extension".toMediaTypeOrNull())
val newBody = orgBody.asResponseBody("image/$extension".toMediaType())
originalResponse.newBuilder()
.body(newBody)
.build()

View File

@ -1,7 +1,7 @@
ext {
extName = 'Tsumino'
extClass = '.Tsumino'
extVersionCode = 7
extVersionCode = 8
isNsfw = true
}

View File

@ -25,11 +25,11 @@ import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
import okhttp3.FormBody
import okhttp3.Interceptor
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import okhttp3.ResponseBody.Companion.toResponseBody
import okhttp3.ResponseBody.Companion.asResponseBody
import rx.Observable
import uy.kohesive.injekt.injectLazy
@ -49,8 +49,8 @@ class Tsumino : HttpSource() {
if (originalResponse.headers("Content-Type").contains("application/octet-stream") &&
originalResponse.request.url.pathSegments.any { it == "parts" }
) {
val orgBody = originalResponse.body.bytes()
val newBody = orgBody.toResponseBody("image/jpeg".toMediaTypeOrNull())
val orgBody = originalResponse.body.source()
val newBody = orgBody.asResponseBody("image/jpeg".toMediaType())
originalResponse.newBuilder()
.body(newBody)
.build()

View File

@ -3,7 +3,7 @@ ext {
extClass = '.ManhwaLatino'
themePkg = 'madara'
baseUrl = 'https://manhwa-latino.com'
overrideVersionCode = 8
overrideVersionCode = 9
isNsfw = true
}

View File

@ -6,10 +6,10 @@ import eu.kanade.tachiyomi.network.interceptor.rateLimitHost
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Response
import okhttp3.ResponseBody.Companion.toResponseBody
import okhttp3.ResponseBody.Companion.asResponseBody
import org.jsoup.nodes.Element
import java.text.SimpleDateFormat
import java.util.Locale
@ -30,8 +30,8 @@ class ManhwaLatino : Madara(
.build()
val response = chain.proceed(request.newBuilder().headers(headers).build())
if (response.headers("Content-Type").contains("application/octet-stream") && response.request.url.toString().endsWith(".jpg")) {
val orgBody = response.body.bytes()
val newBody = orgBody.toResponseBody("image/jpeg".toMediaTypeOrNull())
val orgBody = response.body.source()
val newBody = orgBody.asResponseBody("image/jpeg".toMediaType())
response.newBuilder()
.body(newBody)
.build()

View File

@ -3,7 +3,7 @@ ext {
extClass = '.Kiryuu'
themePkg = 'mangathemesia'
baseUrl = 'https://kiryuu02.com'
overrideVersionCode = 11
overrideVersionCode = 12
isNsfw = false
}

View File

@ -4,7 +4,7 @@ import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia
import eu.kanade.tachiyomi.network.interceptor.rateLimit
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.ResponseBody.Companion.toResponseBody
import okhttp3.ResponseBody.Companion.asResponseBody
import org.jsoup.nodes.Document
import java.text.SimpleDateFormat
import java.util.Locale
@ -23,9 +23,8 @@ class Kiryuu : MangaThemesia("Kiryuu", "https://kiryuu02.com", "id", dateFormat
}
// Fix image content type
val type = IMG_CONTENT_TYPE.toMediaType()
val body = response.body.bytes().toResponseBody(type)
return@addInterceptor response.newBuilder().body(body)
.header("Content-Type", IMG_CONTENT_TYPE).build()
val body = response.body.source().asResponseBody(type)
return@addInterceptor response.newBuilder().body(body).build()
}
response
}

View File

@ -3,7 +3,7 @@ ext {
extClass = '.Komiktap'
themePkg = 'mangathemesia'
baseUrl = 'https://komiktap.info'
overrideVersionCode = 3
overrideVersionCode = 4
isNsfw = true
}

View File

@ -7,7 +7,7 @@ import okhttp3.Cookie
import okhttp3.Interceptor
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.Response
import okhttp3.ResponseBody.Companion.toResponseBody
import okhttp3.ResponseBody.Companion.asResponseBody
import java.io.IOException
class Komiktap : MangaThemesia("Komiktap", "https://komiktap.info", "id") {
@ -23,9 +23,8 @@ class Komiktap : MangaThemesia("Komiktap", "https://komiktap.info", "id") {
}
// Fix image content type
val type = IMG_CONTENT_TYPE.toMediaType()
val body = response.body.bytes().toResponseBody(type)
return@addInterceptor response.newBuilder().body(body)
.header("Content-Type", IMG_CONTENT_TYPE).build()
val body = response.body.source().asResponseBody(type)
return@addInterceptor response.newBuilder().body(body).build()
}
response
}

View File

@ -3,7 +3,7 @@ ext {
extClass = '.ArgosComics'
themePkg = 'madara'
baseUrl = 'https://argoscomic.com'
overrideVersionCode = 5
overrideVersionCode = 6
isNsfw = false
}

View File

@ -5,7 +5,7 @@ import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.interceptor.rateLimit
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.ResponseBody.Companion.toResponseBody
import okhttp3.ResponseBody.Companion.asResponseBody
import java.security.SecureRandom
import java.security.cert.X509Certificate
import java.text.SimpleDateFormat
@ -49,9 +49,8 @@ class ArgosComics : Madara(
if (mime == "application/octet-stream" || mime == null) {
// Fix image content type
val type = "image/jpeg".toMediaType()
val body = response.body.bytes().toResponseBody(type)
return@addInterceptor response.newBuilder().body(body)
.header("Content-Type", "image/jpeg").build()
val body = response.body.source().asResponseBody(type)
return@addInterceptor response.newBuilder().body(body).build()
}
}
response

View File

@ -3,7 +3,7 @@ ext {
extClass = '.ArthurScan'
themePkg = 'madara'
baseUrl = 'https://arthurscan.xyz'
overrideVersionCode = 5
overrideVersionCode = 6
isNsfw = false
}

View File

@ -4,7 +4,7 @@ import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.interceptor.rateLimit
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.ResponseBody.Companion.toResponseBody
import okhttp3.ResponseBody.Companion.asResponseBody
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
@ -24,9 +24,8 @@ class ArthurScan : Madara(
if (response.isSuccessful) {
if (mime == "application/octet-stream" || mime == null) {
val type = "image/jpeg".toMediaType()
val body = response.body.bytes().toResponseBody(type)
return@addInterceptor response.newBuilder().body(body)
.header("Content-Type", "image/jpeg").build()
val body = response.body.source().asResponseBody(type)
return@addInterceptor response.newBuilder().body(body).build()
}
}
response