Fix Chapter list (#11405)

This commit is contained in:
FourTOne5 2022-04-10 09:02:58 +06:00 committed by GitHub
parent 40acef146a
commit f91c2ed90e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 50 additions and 85 deletions

View File

@ -6,7 +6,7 @@ ext {
extName = 'MangaPark v3' extName = 'MangaPark v3'
pkgNameSuffix = 'all.mangapark' pkgNameSuffix = 'all.mangapark'
extClass = '.MangaParkFactory' extClass = '.MangaParkFactory'
extVersionCode = 14 extVersionCode = 15
isNsfw = true isNsfw = true
} }

View File

@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.extension.all.mangapark
import com.squareup.duktape.Duktape import com.squareup.duktape.Duktape
import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.network.asObservableSuccess
import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.model.MangasPage import eu.kanade.tachiyomi.source.model.MangasPage
@ -12,18 +11,12 @@ import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.ParsedHttpSource import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import eu.kanade.tachiyomi.util.asJsoup import eu.kanade.tachiyomi.util.asJsoup
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.jsonArray import kotlinx.serialization.json.jsonArray
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive import kotlinx.serialization.json.jsonPrimitive
import kotlinx.serialization.json.put
import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody
import okhttp3.Response import okhttp3.Response
import org.jsoup.Jsoup
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
import rx.Observable import rx.Observable
@ -39,14 +32,13 @@ open class MangaPark(
override val name: String = "MangaPark v3" override val name: String = "MangaPark v3"
override val baseUrl: String = "https://v35.mangapark.net" // temporary url change to keep the ext working after update return to https://mangapark.net or https://v36.mangapark.net at later date override val baseUrl: String = "https://mangapark.net"
override val supportsLatest = true override val supportsLatest = true
override val id: Long = when (lang) { override val id: Long = when (lang) {
"zh-Hans" -> 6306867705763005424 "zh-Hans" -> 6306867705763005424
"zh-Hant" -> 4563855043528673539 "zh-Hant" -> 4563855043528673539
"ro-MD" -> 7298853649198357919
else -> super.id else -> super.id
} }
@ -200,46 +192,25 @@ open class MangaPark(
else -> SManga.UNKNOWN else -> SManga.UNKNOWN
} }
override fun chapterListRequest(manga: SManga): Request {
val sid = "$baseUrl${manga.url}".toHttpUrl().pathSegments[1].toInt()
val jsonPayload = buildJsonObject {
put("lang", siteLang)
put("sid", sid)
}
val requestBody =
jsonPayload.toString().toRequestBody("application/json;charset=UTF-8".toMediaType())
val refererUrl = "$baseUrl/${manga.url}".toHttpUrl().newBuilder()
.toString()
val newHeaders = headersBuilder()
.add("Content-Length", requestBody.contentLength().toString())
.add("Content-Type", requestBody.contentType().toString())
.set("Referer", refererUrl)
.build()
return POST(
"$baseUrl/ajax.reader.subject.episodes.by.serial",
headers = newHeaders,
body = requestBody
)
}
override fun chapterListParse(response: Response): List<SChapter> { override fun chapterListParse(response: Response): List<SChapter> {
val resToJson = json.parseToJsonElement(response.body!!.string()).jsonObject val chapterListHtml = response.asJsoup().select("div.episode-list #chap-index")
val document = Jsoup.parse(resToJson["html"]!!.jsonPrimitive.content) return chapterListHtml.flatMap { it.select(chapterListSelector()).map { chapElem -> chapterFromElement(chapElem) } }
return document.select(chapterListSelector()).map { chapterFromElement(it) }
} }
override fun chapterListSelector() = "div.episode-item" override fun chapterListSelector(): String {
return when (lang) {
"en" -> "div.p-2:not(:has(.px-3))"
// To handle both "/comic/1/test/c0-en" and "/comic/1/test/c0-en/" like url
else -> "div.p-2:has(.px-3 a[href\$=\"$siteLang\"]), div.p-2:has(.px-3 a[href\$=\"$siteLang/\"])"
}
}
override fun chapterFromElement(element: Element): SChapter { override fun chapterFromElement(element: Element): SChapter {
val urlElement = element.select("a.chapt") val urlElement = element.select("a.ms-3")
return SChapter.create().apply { return SChapter.create().apply {
name = urlElement.text() name = urlElement.text().removePrefix("Ch").trim()
date_upload = element.select("div.extra > i.ps-2").text().parseChapterDate() date_upload = element.select("i.text-nowrap").text().parseChapterDate()
setUrlWithoutDomain(urlElement.attr("href").removeSuffix("/")) setUrlWithoutDomain(urlElement.attr("href").removeSuffix("/"))
} }
} }

View File

@ -10,68 +10,52 @@ class MangaParkFactory : SourceFactory {
class LanguageOption(val lang: String, val siteLang: String = lang) class LanguageOption(val lang: String, val siteLang: String = lang)
private val languages = listOf( private val languages = listOf(
// LanguageOption("<Language Format>","<Language Format used in site.>"), // LanguageOption("<Language Format>","<Language Format used in site.>"),
LanguageOption("en"),
LanguageOption("ar"),
LanguageOption("bg"),
LanguageOption("zh"),
LanguageOption("cs"),
LanguageOption("da"),
LanguageOption("nl"),
LanguageOption("fil"),
LanguageOption("fi"),
LanguageOption("fr"),
LanguageOption("de"),
LanguageOption("el"),
LanguageOption("he"),
LanguageOption("hi"),
LanguageOption("hu"),
LanguageOption("id"),
LanguageOption("it"),
LanguageOption("ja"),
LanguageOption("ko"),
LanguageOption("ms"),
LanguageOption("pl"),
LanguageOption("pt"),
LanguageOption("pt-BR", "pt_br"),
LanguageOption("ro"),
LanguageOption("ru"),
LanguageOption("es"),
LanguageOption("es-419", "es_419"),
LanguageOption("sv"),
LanguageOption("th"),
LanguageOption("tr"),
LanguageOption("uk"),
LanguageOption("vi"),
LanguageOption("af"), LanguageOption("af"),
LanguageOption("sq"), LanguageOption("sq"),
LanguageOption("am"), LanguageOption("am"),
LanguageOption("ar"),
LanguageOption("hy"), LanguageOption("hy"),
LanguageOption("az"), LanguageOption("az"),
LanguageOption("be"), LanguageOption("be"),
LanguageOption("bn"), LanguageOption("bn"),
LanguageOption("bs"), LanguageOption("bs"),
LanguageOption("bg"),
LanguageOption("my"), LanguageOption("my"),
LanguageOption("km"), LanguageOption("km"),
LanguageOption("ca"), LanguageOption("ca"),
LanguageOption("ceb"), LanguageOption("ceb"),
LanguageOption("zh"),
LanguageOption("zh-Hans", "zh_hk"), LanguageOption("zh-Hans", "zh_hk"),
LanguageOption("zh-Hant", "zh_tw"), LanguageOption("zh-Hant", "zh_tw"),
LanguageOption("hr"), LanguageOption("hr"),
LanguageOption("en-US", "en_us"), LanguageOption("cs"),
LanguageOption("da"),
LanguageOption("nl"),
LanguageOption("en"),
LanguageOption("eo"), LanguageOption("eo"),
LanguageOption("et"), LanguageOption("et"),
LanguageOption("fo"), LanguageOption("fo"),
LanguageOption("fil"),
LanguageOption("fi"),
LanguageOption("fr"),
LanguageOption("ka"), LanguageOption("ka"),
LanguageOption("de"),
LanguageOption("el"),
LanguageOption("gn"), LanguageOption("gn"),
LanguageOption("gu"), LanguageOption("ht"),
LanguageOption("ht",),
LanguageOption("ha"), LanguageOption("ha"),
LanguageOption("he"),
LanguageOption("hi"),
LanguageOption("hu"),
LanguageOption("is"), LanguageOption("is"),
LanguageOption("ig"), LanguageOption("ig"),
LanguageOption("id"),
LanguageOption("ga"), LanguageOption("ga"),
LanguageOption("it"),
LanguageOption("ja"),
LanguageOption("jv"), LanguageOption("jv"),
LanguageOption("kn"),
LanguageOption("kk"), LanguageOption("kk"),
LanguageOption("ko"),
LanguageOption("ku"), LanguageOption("ku"),
LanguageOption("ky"), LanguageOption("ky"),
LanguageOption("lo"), LanguageOption("lo"),
@ -80,21 +64,26 @@ private val languages = listOf(
LanguageOption("lb"), LanguageOption("lb"),
LanguageOption("mk"), LanguageOption("mk"),
LanguageOption("mg"), LanguageOption("mg"),
LanguageOption("ms"),
LanguageOption("ml"), LanguageOption("ml"),
LanguageOption("mt"), LanguageOption("mt"),
LanguageOption("mi"), LanguageOption("mi"),
LanguageOption("mr"), LanguageOption("mo"),
LanguageOption("mo", "ro-MD"),
LanguageOption("mn"), LanguageOption("mn"),
LanguageOption("ne"), LanguageOption("ne"),
LanguageOption("no"), LanguageOption("no"),
LanguageOption("ny"), LanguageOption("ny"),
LanguageOption("ps"), LanguageOption("ps"),
LanguageOption("fa"), LanguageOption("fa"),
LanguageOption("pl"),
LanguageOption("pt"),
LanguageOption("pt-BR", "pt_br"),
LanguageOption("ro"),
LanguageOption("rm"), LanguageOption("rm"),
LanguageOption("ru"),
LanguageOption("sm"), LanguageOption("sm"),
LanguageOption("sr"), LanguageOption("sr"),
LanguageOption("sh",), LanguageOption("sh"),
LanguageOption("st"), LanguageOption("st"),
LanguageOption("sn"), LanguageOption("sn"),
LanguageOption("sd"), LanguageOption("sd"),
@ -102,17 +91,22 @@ private val languages = listOf(
LanguageOption("sk"), LanguageOption("sk"),
LanguageOption("sl"), LanguageOption("sl"),
LanguageOption("so"), LanguageOption("so"),
LanguageOption("es"),
LanguageOption("es-419", "es_419"),
LanguageOption("sw"), LanguageOption("sw"),
LanguageOption("sv"),
LanguageOption("tg"), LanguageOption("tg"),
LanguageOption("ta"), LanguageOption("ta"),
LanguageOption("th"),
LanguageOption("ti"), LanguageOption("ti"),
LanguageOption("to"), LanguageOption("to"),
LanguageOption("tr"),
LanguageOption("tk"), LanguageOption("tk"),
LanguageOption("uk"),
LanguageOption("ur"), LanguageOption("ur"),
LanguageOption("uz"), LanguageOption("uz"),
LanguageOption("vi"),
LanguageOption("yo"), LanguageOption("yo"),
LanguageOption("zu"), LanguageOption("zu"),
LanguageOption("other", "_t"), LanguageOption("other", "_t")
LanguageOption("eu"),
LanguageOption("pt-PT", "pt_pt")
) )