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
This commit is contained in:
Vetle Ledaal 2024-05-13 15:17:28 +00:00 committed by Draff
parent 6abded47de
commit dbeb67b3e9
2 changed files with 27 additions and 12 deletions

View File

@ -3,7 +3,7 @@ ext {
extClass = '.Hentairead' extClass = '.Hentairead'
themePkg = 'madara' themePkg = 'madara'
baseUrl = 'https://hentairead.com' baseUrl = 'https://hentairead.com'
overrideVersionCode = 4 overrideVersionCode = 5
isNsfw = true isNsfw = true
} }

View File

@ -1,6 +1,5 @@
package eu.kanade.tachiyomi.extension.en.hentairead package eu.kanade.tachiyomi.extension.en.hentairead
import android.net.Uri
import eu.kanade.tachiyomi.multisrc.madara.Madara import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.FilterList 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.SChapter
import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.model.UpdateStrategy import eu.kanade.tachiyomi.source.model.UpdateStrategy
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.Request import okhttp3.Request
import org.jsoup.nodes.Document 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<Page> { override fun pageListParse(document: Document): List<Page> {
launchIO { countViews(document) } launchIO { countViews(document) }
return document.select(pageListParseSelector).mapIndexed { index, element -> val pages = document.selectFirst("#chapter_preloaded_images")?.data()
val pageUri: String? = element.selectFirst("img")!!.let { ?.substringAfter("chapter_preloaded_images = ")
it.absUrl(if (it.hasAttr("data-src")) "data-src" else "src") ?.substringBefore("],")
} ?.let { json.decodeFromString<List<PageDto>>("$it]") }
Page( ?: throw Exception("Failed to find page list. Non-English entries are not supported.")
index,
document.location(), return pages.mapIndexed { idx, page ->
Uri.parse(pageUri).buildUpon().clearQuery().appendQueryParameter("ssl", "1") Page(idx, document.location(), page.src)
.appendQueryParameter("w", "1100").build().toString(),
)
} }
} }
@ -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,
)