diff --git a/src/all/eternalmangas/build.gradle b/src/all/eternalmangas/build.gradle index 76f8c8717..5a0eabee6 100644 --- a/src/all/eternalmangas/build.gradle +++ b/src/all/eternalmangas/build.gradle @@ -3,7 +3,7 @@ ext { extClass = '.EternalMangasFactory' themePkg = 'mangaesp' baseUrl = 'https://eternalmangas.com' - overrideVersionCode = 4 + overrideVersionCode = 5 isNsfw = true } diff --git a/src/all/eternalmangas/src/eu/kanade/tachiyomi/extension/all/eternalmangas/EternalMangas.kt b/src/all/eternalmangas/src/eu/kanade/tachiyomi/extension/all/eternalmangas/EternalMangas.kt index 4da11b1a1..518fddcb7 100644 --- a/src/all/eternalmangas/src/eu/kanade/tachiyomi/extension/all/eternalmangas/EternalMangas.kt +++ b/src/all/eternalmangas/src/eu/kanade/tachiyomi/extension/all/eternalmangas/EternalMangas.kt @@ -10,6 +10,7 @@ import eu.kanade.tachiyomi.source.model.MangasPage import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.util.asJsoup import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.contentOrNull import kotlinx.serialization.json.jsonObject @@ -57,23 +58,32 @@ open class EternalMangas( query: String, filters: FilterList, ): MangasPage { - val body = response.body.string() - val data = client.newCall(GET(dataUrl)).execute().body.string().split("\n") - val headersJson = json.parseToJsonElement(data[1]).jsonObject - val apiHeaders = headersBuilder() - headersJson.forEach { (key, jsonElement) -> - var value = jsonElement.jsonPrimitive.contentOrNull.orEmpty() - if (value.startsWith("1-")) { - val match = value.substringAfter("-").toRegex().find(body) - value = match?.groupValues?.get(1).orEmpty() - } else { - value = value.substringAfter("-") + val (apiComicsUrl, jsonHeaders, useApi, scriptSelector, comicsRegex) = client.newCall(GET(dataUrl)).execute().body.string().split("\n") + val apiSearch = useApi == "1" + comicsList = if (apiSearch) { + val headersJson = json.parseToJsonElement(jsonHeaders).jsonObject + val apiHeaders = headersBuilder() + headersJson.forEach { (key, jsonElement) -> + var value = jsonElement.jsonPrimitive.contentOrNull.orEmpty() + if (value.startsWith("1-")) { + val match = value.substringAfter("-").toRegex().find(response.body.string()) + value = match?.groupValues?.get(1).orEmpty() + } else { + value = value.substringAfter("-") + } + apiHeaders.add(key, value) } - apiHeaders.add(key, value) + val apiResponse = client.newCall(GET(apiComicsUrl, apiHeaders.build())).execute() + json.decodeFromString>(apiResponse.body.string()).toMutableList() + } else { + val script = response.asJsoup().select(scriptSelector).joinToString { it.data() } + val jsonString = comicsRegex.toRegex().find(script)?.groupValues?.get(1) + ?: throw Exception(intl["comics_list_error"]) + val unescapedJson = jsonString.unescape() + json.decodeFromString>(unescapedJson).toMutableList() } - val apiResponse = client.newCall(GET(data[0], apiHeaders.build())).execute() - return super.searchMangaParse(apiResponse, page, query, filters) + return parseComicsList(page, query, filters) } override fun mangaDetailsParse(response: Response) = SManga.create().apply {