Update Status mangaDetailsParse MangaXY (#15180)

This commit is contained in:
are-are-are 2023-01-30 23:10:05 +07:00 committed by GitHub
parent 0653ab2fb0
commit 466ce8d739
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 66 additions and 21 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'MangaXY' extName = 'MangaXY'
pkgNameSuffix = 'vi.MangaXY' pkgNameSuffix = 'vi.MangaXY'
extClass = '.MangaXY' extClass = '.MangaXY'
extVersionCode = 1 extVersionCode = 2
} }
apply from: "$rootDir/common.gradle" apply from: "$rootDir/common.gradle"

View File

@ -12,6 +12,7 @@ import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
import org.jsoup.select.Elements
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Locale import java.util.Locale
import java.util.TimeZone import java.util.TimeZone
@ -44,19 +45,10 @@ class MangaXY : ParsedHttpSource() {
.toString(), .toString(),
headers headers
) )
override fun popularMangaSelector() = ".container > .row > div.col-12.col-lg-9 > #tblChap > .thumb" override fun popularMangaSelector() = ".container > .row > div.col-12.col-lg-9 > #tblChap > .thumb"
override fun latestUpdatesSelector() = popularMangaSelector() override fun popularMangaNextPageSelector(): String = "div#tblChap p.page a:contains(Cuối)"
override fun latestUpdatesRequest(page: Int) = GET(
"$baseUrl/search.php".toHttpUrl().newBuilder()
.addQueryParameter("act", "search")
.addQueryParameter("sort", "chap")
.addQueryParameter("view", "thumb")
.addQueryParameter("page", page.toString())
.toString(),
headers
)
override fun popularMangaFromElement(element: Element): SManga { override fun popularMangaFromElement(element: Element): SManga {
val manga = SManga.create() val manga = SManga.create()
@ -74,16 +66,31 @@ class MangaXY : ParsedHttpSource() {
return manga return manga
} }
override fun latestUpdatesFromElement(element: Element): SManga = popularMangaFromElement(element) override fun latestUpdatesSelector() = popularMangaSelector()
override fun popularMangaNextPageSelector(): String = "div#tblChap p.page a:contains(Cuối)" override fun latestUpdatesRequest(page: Int) = GET(
"$baseUrl/search.php".toHttpUrl().newBuilder()
.addQueryParameter("act", "search")
.addQueryParameter("sort", "chap")
.addQueryParameter("view", "thumb")
.addQueryParameter("page", page.toString())
.toString(),
headers
)
override fun latestUpdatesFromElement(element: Element): SManga = popularMangaFromElement(element)
override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector()
open class UriPartFilter(displayName: String, private val vals: Array<Pair<String, String>>, state: Int = 0) : open class UriPartFilter(
displayName: String,
private val vals: Array<Pair<String, String>>,
state: Int = 0
) :
Filter.Select<String>(displayName, vals.map { it.first }.toTypedArray(), state) { Filter.Select<String>(displayName, vals.map { it.first }.toTypedArray(), state) {
fun toUriPart() = vals[state].second fun toUriPart() = vals[state].second
} }
private class SortByFilter : UriPartFilter( private class SortByFilter : UriPartFilter(
"Sắp xếp theo", "Sắp xếp theo",
arrayOf( arrayOf(
@ -95,6 +102,7 @@ class MangaXY : ParsedHttpSource() {
), ),
2 2
) )
private class SearchTypeFilter : UriPartFilter( private class SearchTypeFilter : UriPartFilter(
"Kiểu tìm", "Kiểu tìm",
arrayOf( arrayOf(
@ -102,6 +110,7 @@ class MangaXY : ParsedHttpSource() {
Pair("OR/hoặc", "or"), Pair("OR/hoặc", "or"),
) )
) )
private class ForFilter : UriPartFilter( private class ForFilter : UriPartFilter(
"Dành cho", "Dành cho",
arrayOf( arrayOf(
@ -111,6 +120,7 @@ class MangaXY : ParsedHttpSource() {
Pair("Con nít", "nit"), Pair("Con nít", "nit"),
) )
) )
private class AgeFilter : UriPartFilter( private class AgeFilter : UriPartFilter(
"Bất kỳ", "Bất kỳ",
arrayOf( arrayOf(
@ -123,6 +133,7 @@ class MangaXY : ParsedHttpSource() {
Pair("= 18", "18"), Pair("= 18", "18"),
) )
) )
private class StatusFilter : UriPartFilter( private class StatusFilter : UriPartFilter(
"Tình trạng", "Tình trạng",
arrayOf( arrayOf(
@ -132,6 +143,7 @@ class MangaXY : ParsedHttpSource() {
Pair("Tạm ngưng", "Drop"), Pair("Tạm ngưng", "Drop"),
) )
) )
private class OriginFilter : UriPartFilter( private class OriginFilter : UriPartFilter(
"Quốc gia", "Quốc gia",
arrayOf( arrayOf(
@ -142,6 +154,7 @@ class MangaXY : ParsedHttpSource() {
Pair("Việt Nam", "vietnam"), Pair("Việt Nam", "vietnam"),
) )
) )
private class ReadingModeFilter : UriPartFilter( private class ReadingModeFilter : UriPartFilter(
"Kiểu đọc", "Kiểu đọc",
arrayOf( arrayOf(
@ -151,6 +164,7 @@ class MangaXY : ParsedHttpSource() {
Pair("Trái qua phải", "xem từ trái qua phải"), Pair("Trái qua phải", "xem từ trái qua phải"),
) )
) )
private class YearFilter : Filter.Text("Năm phát hành") private class YearFilter : Filter.Text("Năm phát hành")
private class UserFilter : Filter.Text("Đăng bởi thành viên") private class UserFilter : Filter.Text("Đăng bởi thành viên")
private class AuthorFilter : Filter.Text("Tên tác giả") private class AuthorFilter : Filter.Text("Tên tác giả")
@ -229,12 +243,15 @@ class MangaXY : ParsedHttpSource() {
override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply { override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
val infoElement = document.selectFirst(".tab-content") val infoElement = document.selectFirst(".tab-content")
val infoTop = document.selectFirst(".detail-top-wrap") val infoTop = document.selectFirst(".detail-top-wrap")
val statusString0 = infoElement.select("div.manga-info > ul > li:nth-child(3) > a").firstOrNull()?.text()
val statusString1 = infoElement.select("div.manga-info > ul > li:nth-child(4) > a").firstOrNull()?.text()
val statusString2 = infoElement.select("div.manga-info > ul > li:nth-child(5) > a").firstOrNull()?.text()
title = infoTop.select("h1.comics-title").text() title = infoTop.select("h1.comics-title").text()
author = infoTop.select(".created-by").joinToString { it.text() } author = infoTop.select(".created-by").joinToString { it.text() }
genre = infoTop.select(".top-comics-type a") genre = infoTop.select(".top-comics-type a")
.filter { it.text().isNotEmpty() } .filter { it.text().isNotEmpty() }
.joinToString(", ") { it.text() } .joinToString(", ") { it.text() }
description = infoElement.select(".manga-info p").text() description = infoElement.select(".manga-info p").textWithLinebreaks()
thumbnail_url = infoTop.select(".detail-top-right img") thumbnail_url = infoTop.select(".detail-top-right img")
.first() .first()
.attr("style") .attr("style")
@ -242,13 +259,40 @@ class MangaXY : ParsedHttpSource() {
.substringBefore("')") .substringBefore("')")
.replace("//", "https:") .replace("//", "https:")
.replace("http:", "") .replace("http:", "")
status = when (infoElement.select(".manga-info ul li a").first().text().trim()) { if (statusString0 == "Tạm ngưng" || statusString0 == "Đã Hoàn Thành" || statusString0 == "Đang tiến hành") {
status = when (statusString0) {
"Đang tiến hành" -> SManga.ONGOING "Đang tiến hành" -> SManga.ONGOING
"Đã Hoàn Thành" -> SManga.COMPLETED "Đã Hoàn Thành" -> SManga.COMPLETED
"Tạm ngưng" -> SManga.ON_HIATUS "Tạm ngưng" -> SManga.ON_HIATUS
null -> SManga.UNKNOWN
else -> SManga.UNKNOWN else -> SManga.UNKNOWN
} }
} }
if (statusString1 == "Tạm ngưng" || statusString1 == "Đã Hoàn Thành" || statusString1 == "Đang tiến hành") {
status = when (statusString1) {
"Đang tiến hành" -> SManga.ONGOING
"Đã Hoàn Thành" -> SManga.COMPLETED
"Tạm ngưng" -> SManga.ON_HIATUS
null -> SManga.UNKNOWN
else -> SManga.UNKNOWN
}
}
if (statusString2 == "Tạm ngưng" || statusString2 == "Đã Hoàn Thành" || statusString2 == "Đang tiến hành") {
status = when (statusString2) {
"Đang tiến hành" -> SManga.ONGOING
"Đã Hoàn Thành" -> SManga.COMPLETED
"Tạm ngưng" -> SManga.ON_HIATUS
null -> SManga.UNKNOWN
else -> SManga.UNKNOWN
}
}
}
private fun Elements.textWithLinebreaks(): String {
this.select("p").prepend("\\n")
this.select("br").prepend("\\n")
return this.text().replace("\\n", "\n").replace("\n ", "\n")
}
override fun chapterListSelector() = "#ChapList > .episode-item" override fun chapterListSelector() = "#ChapList > .episode-item"
override fun chapterFromElement(element: Element) = SChapter.create().apply { override fun chapterFromElement(element: Element) = SChapter.create().apply {
@ -269,6 +313,7 @@ class MangaXY : ParsedHttpSource() {
open class Genre(name: String, val id: String) : Filter.TriState(name) open class Genre(name: String, val id: String) : Filter.TriState(name)
private class GenreList(genres: List<Genre>) : Filter.Group<Genre>("Thể loại", genres) private class GenreList(genres: List<Genre>) : Filter.Group<Genre>("Thể loại", genres)
override fun getFilterList() = FilterList( override fun getFilterList() = FilterList(
GenreList(getGenreList()), GenreList(getGenreList()),
SortByFilter(), SortByFilter(),