EHentai: Fix page filter looping (#12707)

This commit is contained in:
MatchaSoba 2022-07-24 21:36:35 +08:00 committed by GitHub
parent 5add0416b0
commit 680dd09892
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 4 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'E-Hentai'
pkgNameSuffix = 'all.ehentai'
extClass = '.EHFactory'
extVersionCode = 16
extVersionCode = 17
isNsfw = true
}

View File

@ -48,12 +48,14 @@ abstract class EHentai(
override val supportsLatest = true
private var lastMangaId = ""
// true if lang is a "natural human language"
private fun isLangNatural(): Boolean = lang !in listOf("none", "other")
private fun genericMangaParse(response: Response): MangasPage {
val doc = response.asJsoup()
val parsedMangas = doc.select("table.itg td.glname")
val mangaElements = doc.select("table.itg td.glname")
.let { elements ->
if (isLangNatural() && getEnforceLanguagePref()) {
elements.filter { element ->
@ -65,12 +67,17 @@ abstract class EHentai(
elements
}
}
.map {
val parsedMangas: MutableList<SManga> = mutableListOf()
for (i in mangaElements.indices) {
val manga = mangaElements[i].let {
SManga.create().apply {
// Get title
it.select("a")?.first()?.apply {
title = this.select(".glink").text()
url = ExGalleryMetadata.normalizeUrl(attr("href"))
if (i == mangaElements.lastIndex) {
lastMangaId = ExGalleryMetadata.galleryId(attr("href"))
}
}
// Get image
it.parent().select(".glthumb img")?.first().apply {
@ -79,6 +86,8 @@ abstract class EHentai(
}
}
}
parsedMangas.add(manga)
}
// Add to page if required
val hasNextPage = doc.select("a[onclick=return false]").last()?.text() == ">"
@ -159,6 +168,9 @@ abstract class EHentai(
filters.forEach {
if (it is UriFilter) it.addToUri(uri)
}
if (uri.toString().contains("f_spf") || uri.toString().contains("f_spt")) {
if (page > 1) uri.appendQueryParameter("from", lastMangaId)
}
return exGet(uri.toString(), page)
}

View File

@ -41,7 +41,7 @@ class ExGalleryMetadata {
pathSegments.filterNot(String::isNullOrBlank)
}
private fun galleryId(url: String) = splitGalleryUrl(url)[1]
fun galleryId(url: String) = splitGalleryUrl(url)[1]
private fun galleryToken(url: String) = splitGalleryUrl(url)[2]