From 5fd5b76527164d1cb911293b6092b3bb47d823ff Mon Sep 17 00:00:00 2001 From: dngonz Date: Tue, 28 Jan 2025 12:38:17 +0100 Subject: [PATCH] MadTheme: Fix chapter client (#7361) fix and try to limit api calls --- lib-multisrc/madtheme/build.gradle.kts | 2 +- .../tachiyomi/multisrc/madtheme/MadTheme.kt | 31 +++++++++++-------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/lib-multisrc/madtheme/build.gradle.kts b/lib-multisrc/madtheme/build.gradle.kts index faa70cdf6..e43682c17 100644 --- a/lib-multisrc/madtheme/build.gradle.kts +++ b/lib-multisrc/madtheme/build.gradle.kts @@ -2,4 +2,4 @@ plugins { id("lib-multisrc") } -baseVersionCode = 16 +baseVersionCode = 17 diff --git a/lib-multisrc/madtheme/src/eu/kanade/tachiyomi/multisrc/madtheme/MadTheme.kt b/lib-multisrc/madtheme/src/eu/kanade/tachiyomi/multisrc/madtheme/MadTheme.kt index 7d5af686e..ebc9e18ec 100644 --- a/lib-multisrc/madtheme/src/eu/kanade/tachiyomi/multisrc/madtheme/MadTheme.kt +++ b/lib-multisrc/madtheme/src/eu/kanade/tachiyomi/multisrc/madtheme/MadTheme.kt @@ -11,7 +11,6 @@ import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.ParsedHttpSource import eu.kanade.tachiyomi.util.asJsoup -import kotlinx.serialization.json.Json import okhttp3.Headers import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrl @@ -23,7 +22,6 @@ import org.jsoup.Jsoup import org.jsoup.nodes.Document import org.jsoup.nodes.Element import rx.Observable -import uy.kohesive.injekt.injectLazy import java.text.ParseException import java.text.SimpleDateFormat import java.util.Calendar @@ -53,8 +51,6 @@ abstract class MadTheme( add("Referer", "$baseUrl/") } - private val json: Json by injectLazy() - private var genreKey = "genre[]" // Popular @@ -179,21 +175,30 @@ abstract class MadTheme( return super.chapterListParse(response) } - val script = response.asJsoup().selectFirst("script:containsData(bookId)") + val document = response.asJsoup() + + // Need the total chapters to check against the request + val totalChapters = document.selectFirst(".title span:containsOwn(CHAPTERS \\()")?.text() + ?.substringAfter("(") + ?.substringBefore(")") + ?.toIntOrNull() + + val script = document.selectFirst("script:containsData(bookId)") ?: throw Exception("Cannot find script") val bookId = script.data().substringAfter("bookId = ").substringBefore(";") val bookSlug = script.data().substringAfter("bookSlug = \"").substringBefore("\";") - // At this moment we can not decide which endpoint has the chapters, so we call both. - val idRequest = client.newCall(GET(buildChapterUrl(bookId), headers)).execute() - val slugRequest = client.newCall(GET(buildChapterUrl(bookSlug), headers)).execute() + // Use slug search by default + val slugRequest = chapterClient.newCall(GET(buildChapterUrl(bookSlug), headers)).execute() + if (!slugRequest.isSuccessful) { + throw Exception("HTTP error ${slugRequest.code}") + } - // By default the id request will be the final, due to some extension don't even has slug fetch. - var finalDocument = idRequest.asJsoup().select(chapterListSelector()) - val slugDocument = slugRequest.asJsoup().select(chapterListSelector()) + var finalDocument = slugRequest.asJsoup().select(chapterListSelector()) - if (finalDocument.size < slugDocument.size) { - finalDocument = slugDocument + if (totalChapters != null && finalDocument.size < totalChapters) { + val idRequest = chapterClient.newCall(GET(buildChapterUrl(bookId), headers)).execute() + finalDocument = idRequest.asJsoup().select(chapterListSelector()) } return finalDocument.map {