Fix japscan pagecount loading (fallback added) (#14122)

This commit is contained in:
BRAMILLE Sébastien 2022-11-04 11:00:33 +00:00 committed by GitHub
parent 86562fc2cb
commit e12605507a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 25 additions and 8 deletions

View File

@ -156,14 +156,14 @@ class Hiveworks : ParsedHttpSource() {
override fun fetchMangaDetails(manga: SManga): Observable<SManga> { override fun fetchMangaDetails(manga: SManga): Observable<SManga> {
val url = manga.url val url = manga.url
return client.newCall(GET(baseUrl, headers)) //Bypasses mangaDetailsRequest return client.newCall(GET(baseUrl, headers)) // Bypasses mangaDetailsRequest
.asObservableSuccess() .asObservableSuccess()
.map { response -> .map { response ->
mangaDetailsParse(response, url).apply { initialized = true } mangaDetailsParse(response, url).apply { initialized = true }
} }
} }
override fun mangaDetailsRequest(manga: SManga) = GET(manga.url, headers) //Used to open proper page in webview override fun mangaDetailsRequest(manga: SManga) = GET(manga.url, headers) // Used to open proper page in webview
override fun mangaDetailsParse(document: Document): SManga = throw Exception("Not Used") override fun mangaDetailsParse(document: Document): SManga = throw Exception("Not Used")
private fun mangaDetailsParse(response: Response, url: String): SManga { private fun mangaDetailsParse(response: Response, url: String): SManga {
val document = response.asJsoup() val document = response.asJsoup()

View File

@ -1,6 +1,5 @@
package eu.kanade.tachiyomi.extension.en.ninehentai package eu.kanade.tachiyomi.extension.en.ninehentai
import android.util.Log
import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.network.asObservableSuccess

View File

@ -303,7 +303,7 @@ class Readcomiconline : ConfigurableSource, ParsedHttpSource() {
var images = ${json.encodeToJsonElement(urls)}; var images = ${json.encodeToJsonElement(urls)};
beau(images); beau(images);
images; images;
""".trimIndent() """.trimIndent()
(it.evaluate(script) as Array<Any>).map { it as String }.toList() (it.evaluate(script) as Array<Any>).map { it as String }.toList()
} }
} }

View File

@ -6,7 +6,7 @@ ext {
extName = 'Japscan' extName = 'Japscan'
pkgNameSuffix = 'fr.japscan' pkgNameSuffix = 'fr.japscan'
extClass = '.Japscan' extClass = '.Japscan'
extVersionCode = 33 extVersionCode = 34
} }
dependencies { dependencies {

View File

@ -351,8 +351,26 @@ class Japscan : ConfigurableSource, ParsedHttpSource() {
Log.d("japscan", "ZJS at $zjsurl") Log.d("japscan", "ZJS at $zjsurl")
val zjs = client.newCall(GET(baseUrl + zjsurl, headers)).execute().body!!.string() val zjs = client.newCall(GET(baseUrl + zjsurl, headers)).execute().body!!.string()
Log.d("japscan", "webtoon, netdumping initiated") Log.d("japscan", "webtoon, netdumping initiated")
val pagesElement = document.getElementById("pages") val pagesElement = document.getElementById("pages")
var pagecount = pagesElement.getElementsByTag("option").size var pagecount = pagesElement.getElementsByTag("option").size
Log.d("japscan", "fallback $pagecount")
if (pagecount == 0) {
Log.d("japscan", "pagecount not found, fallback 1")
val element = document.select(".card:first-child .card-body p").toString()
val regex = """Pages<\/span>: ([0-9]+)<\/p>""".toRegex()
val matchResult = regex.find(element)
val (pagecountFromRegex) = matchResult!!.destructured
pagecount = pagecountFromRegex.toInt()
Log.d("japscan", "fallback pagecount with regex, result: $pagecount")
}
val pages = ArrayList<Page>() val pages = ArrayList<Page>()
val handler = Handler(Looper.getMainLooper()) val handler = Handler(Looper.getMainLooper())
val checkNew = ArrayList<String>(pagecount) val checkNew = ArrayList<String>(pagecount)
@ -379,6 +397,7 @@ class Japscan : ConfigurableSource, ParsedHttpSource() {
webview.webViewClient = object : WebViewClient() { webview.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView, url: String?) { override fun onPageFinished(view: WebView, url: String?) {
if (pagecount === 0) { if (pagecount === 0) {
Log.d("japscan", "pagecount not found, fallback 2")
Log.d("japscan", "dynamic page count detected, loading it through JS") Log.d("japscan", "dynamic page count detected, loading it through JS")
super.onPageFinished(view, url) super.onPageFinished(view, url)
view.evaluateJavascript( view.evaluateJavascript(

View File

@ -172,7 +172,7 @@ class Nekopost : ParsedHttpSource() {
override fun popularMangaRequest(page: Int): Request { override fun popularMangaRequest(page: Int): Request {
if (page <= 1) existingProject.clear() if (page <= 1) existingProject.clear()
//API has a bug that sometime it returns null on first page // API has a bug that sometime it returns null on first page
return GET("$latestMangaEndpoint/${if (firstPageNulled) page else page - 1 }", headers) return GET("$latestMangaEndpoint/${if (firstPageNulled) page else page - 1 }", headers)
} }
@ -194,7 +194,7 @@ class Nekopost : ParsedHttpSource() {
} }
} }
} else { } else {
firstPageNulled = true //API has a bug that sometime it returns null on first page firstPageNulled = true // API has a bug that sometime it returns null on first page
return MangasPage(emptyList(), hasNextPage = false) return MangasPage(emptyList(), hasNextPage = false)
} }

View File

@ -87,7 +87,6 @@ class Niceoppai : ParsedHttpSource() {
} }
MangasPage(mangas, false) MangasPage(mangas, false)
} }
} }