From 00885457407accb3c8056aa72464759d82fbd1fb Mon Sep 17 00:00:00 2001 From: bapeey <90949336+bapeey@users.noreply.github.com> Date: Sat, 22 Jun 2024 02:29:15 -0500 Subject: [PATCH] SlimeRead: Fix downloads (#3676) whats happening with br sources --- src/pt/slimeread/build.gradle | 2 +- .../extension/pt/slimeread/SlimeRead.kt | 23 +++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/pt/slimeread/build.gradle b/src/pt/slimeread/build.gradle index 8e3dd50c9..457fe5fe0 100644 --- a/src/pt/slimeread/build.gradle +++ b/src/pt/slimeread/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'SlimeRead' extClass = '.SlimeRead' - extVersionCode = 11 + extVersionCode = 12 isNsfw = true } diff --git a/src/pt/slimeread/src/eu/kanade/tachiyomi/extension/pt/slimeread/SlimeRead.kt b/src/pt/slimeread/src/eu/kanade/tachiyomi/extension/pt/slimeread/SlimeRead.kt index 0aca1ec43..d5993d2f1 100644 --- a/src/pt/slimeread/src/eu/kanade/tachiyomi/extension/pt/slimeread/SlimeRead.kt +++ b/src/pt/slimeread/src/eu/kanade/tachiyomi/extension/pt/slimeread/SlimeRead.kt @@ -22,8 +22,10 @@ import kotlinx.serialization.json.Json import kotlinx.serialization.json.decodeFromStream import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.MediaType.Companion.toMediaType import okhttp3.Request import okhttp3.Response +import okhttp3.ResponseBody.Companion.toResponseBody import rx.Observable import uy.kohesive.injekt.injectLazy @@ -43,6 +45,19 @@ class SlimeRead : HttpSource() { network.cloudflareClient.newBuilder() .rateLimitHost(baseUrl.toHttpUrl(), 2) .rateLimitHost(apiUrl.toHttpUrl(), 1) + .addInterceptor { chain -> + val response = chain.proceed(chain.request()) + val mime = response.headers["Content-Type"] + if (response.isSuccessful) { + if (mime == "application/octet-stream") { + val type = "image/jpeg".toMediaType() + val body = response.body.bytes().toResponseBody(type) + return@addInterceptor response.newBuilder().body(body) + .header("Content-Type", "image/jpeg").build() + } + } + response + } .build() } @@ -52,10 +67,14 @@ class SlimeRead : HttpSource() { private fun getApiUrlFromPage(): String { val initClient = network.cloudflareClient - val document = initClient.newCall(GET(baseUrl, headers)).execute().asJsoup() + val response = initClient.newCall(GET(baseUrl, headers)).execute() + if (!response.isSuccessful) throw Exception("HTTP error ${response.code}") + val document = response.asJsoup() val scriptUrl = document.selectFirst("script[src*=pages/_app]")?.attr("abs:src") ?: throw Exception("Could not find script URL") - val script = initClient.newCall(GET(scriptUrl, headers)).execute().body.string() + val scriptResponse = initClient.newCall(GET(scriptUrl, headers)).execute() + if (!scriptResponse.isSuccessful) throw Exception("HTTP error ${scriptResponse.code}") + val script = scriptResponse.body.string() val apiUrl = FUNCTION_REGEX.find(script)?.value?.let { function -> BASEURL_VAL_REGEX.find(function)?.groupValues?.get(1)?.let { baseUrlVar -> val regex = """let.*?$baseUrlVar\s*=.*?(?=,\s*\w\s*=)""".toRegex(RegexOption.DOT_MATCHES_ALL)