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' extName = 'E-Hentai'
pkgNameSuffix = 'all.ehentai' pkgNameSuffix = 'all.ehentai'
extClass = '.EHFactory' extClass = '.EHFactory'
extVersionCode = 16 extVersionCode = 17
isNsfw = true isNsfw = true
} }

View File

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

View File

@ -41,7 +41,7 @@ class ExGalleryMetadata {
pathSegments.filterNot(String::isNullOrBlank) 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] private fun galleryToken(url: String) = splitGalleryUrl(url)[2]