diff --git a/lib-multisrc/madtheme/build.gradle.kts b/lib-multisrc/madtheme/build.gradle.kts index aea7b2d34..faa70cdf6 100644 --- a/lib-multisrc/madtheme/build.gradle.kts +++ b/lib-multisrc/madtheme/build.gradle.kts @@ -2,4 +2,4 @@ plugins { id("lib-multisrc") } -baseVersionCode = 15 +baseVersionCode = 16 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 c58f9c258..7d5af686e 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 @@ -13,6 +13,7 @@ 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 import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.OkHttpClient @@ -183,18 +184,19 @@ abstract class MadTheme( val bookId = script.data().substringAfter("bookId = ").substringBefore(";") val bookSlug = script.data().substringAfter("bookSlug = \"").substringBefore("\";") - // Find by bookId, if no result then try with slug - var chapterRequest = - client.newCall(GET("$baseUrl/api/manga/$bookId/chapters?source=detail", headers)) - .execute() + // 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() - if (chapterRequest.code !in 200..299) { - chapterRequest = - client.newCall(GET("$baseUrl/api/manga/$bookSlug/chapters?source=detail", headers)) - .execute() + // 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()) + + if (finalDocument.size < slugDocument.size) { + finalDocument = slugDocument } - return chapterRequest.asJsoup().select("#chapter-list > li").map { + return finalDocument.map { SChapter.create().apply { url = it.selectFirst("a")!!.absUrl("href").removePrefix(baseUrl) name = it.selectFirst(".chapter-title")!!.text() @@ -203,6 +205,16 @@ abstract class MadTheme( } } + private fun buildChapterUrl(fetchByParam: String): HttpUrl { + return baseUrl.toHttpUrl().newBuilder().apply { + addPathSegment("api") + addPathSegment("manga") + addPathSegment(fetchByParam) + addPathSegment("chapters") + addQueryParameter("source", "detail") + }.build() + } + override fun chapterListRequest(manga: SManga): Request = MANGA_ID_REGEX.find(manga.url)?.groupValues?.get(1)?.let { mangaId -> val url = "$baseUrl/service/backend/chaplist/".toHttpUrl().newBuilder()