From dbeb67b3e930e4db1aa76a9ae41ac6c036f610a5 Mon Sep 17 00:00:00 2001 From: Vetle Ledaal Date: Mon, 13 May 2024 15:17:28 +0000 Subject: [PATCH] HentaiRead: fix page parsing (#2903) * HentaiRead: fix page parsing * address PR comments * code was never published, simplifying * copy SChapter object to avoid mutating db * nvm, just return GET directly --- src/en/hentairead/build.gradle | 2 +- .../extension/en/hentairead/Hentairead.kt | 37 +++++++++++++------ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/en/hentairead/build.gradle b/src/en/hentairead/build.gradle index 970bf605e..474321096 100644 --- a/src/en/hentairead/build.gradle +++ b/src/en/hentairead/build.gradle @@ -3,7 +3,7 @@ ext { extClass = '.Hentairead' themePkg = 'madara' baseUrl = 'https://hentairead.com' - overrideVersionCode = 4 + overrideVersionCode = 5 isNsfw = true } diff --git a/src/en/hentairead/src/eu/kanade/tachiyomi/extension/en/hentairead/Hentairead.kt b/src/en/hentairead/src/eu/kanade/tachiyomi/extension/en/hentairead/Hentairead.kt index 7a11fa604..ae0b24c79 100644 --- a/src/en/hentairead/src/eu/kanade/tachiyomi/extension/en/hentairead/Hentairead.kt +++ b/src/en/hentairead/src/eu/kanade/tachiyomi/extension/en/hentairead/Hentairead.kt @@ -1,6 +1,5 @@ package eu.kanade.tachiyomi.extension.en.hentairead -import android.net.Uri import eu.kanade.tachiyomi.multisrc.madara.Madara import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.source.model.FilterList @@ -8,6 +7,8 @@ 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.source.model.UpdateStrategy +import kotlinx.serialization.Serializable +import kotlinx.serialization.decodeFromString import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.Request import org.jsoup.nodes.Document @@ -50,19 +51,18 @@ class Hentairead : Madara("HentaiRead", "https://hentairead.com", "en", dateForm } } + // From ManhwaHentai - modified override fun pageListParse(document: Document): List { launchIO { countViews(document) } - return document.select(pageListParseSelector).mapIndexed { index, element -> - val pageUri: String? = element.selectFirst("img")!!.let { - it.absUrl(if (it.hasAttr("data-src")) "data-src" else "src") - } - Page( - index, - document.location(), - Uri.parse(pageUri).buildUpon().clearQuery().appendQueryParameter("ssl", "1") - .appendQueryParameter("w", "1100").build().toString(), - ) + val pages = document.selectFirst("#chapter_preloaded_images")?.data() + ?.substringAfter("chapter_preloaded_images = ") + ?.substringBefore("],") + ?.let { json.decodeFromString>("$it]") } + ?: throw Exception("Failed to find page list. Non-English entries are not supported.") + + return pages.mapIndexed { idx, page -> + Page(idx, document.location(), page.src) } } @@ -76,4 +76,19 @@ class Hentairead : Madara("HentaiRead", "https://hentairead.com", "en", dateForm ), ) } + + override fun pageListRequest(chapter: SChapter): Request { + // There's like 2 non-English entries where this breaks + val url = "${chapter.url}english/p/1/" + + if (url.startsWith("http")) { + return GET(url, headers) + } + return GET(baseUrl + url, headers) + } } + +@Serializable +class PageDto( + val src: String, +)