Comic Fx: add project page & series type (#14374)

This commit is contained in:
Luqman 2022-11-26 07:18:48 +07:00 committed by GitHub
parent 777f677175
commit 563e179abe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 17 deletions

View File

@ -6,7 +6,7 @@ ext {
extName = 'Comic Fx'
pkgNameSuffix = 'id.comicfx'
extClass = '.ComicFx'
extVersionCode = 4
extVersionCode = 5
}
apply from: "$rootDir/common.gradle"

View File

@ -41,13 +41,14 @@ class ComicFx : ParsedHttpSource() {
return GET("$baseUrl/filterList?page=$page&sortBy=name&asc=true", headers)
}
override fun popularMangaSelector() = "div.media"
// combining selector for "popular" and "latest" to be used for "search" selector as it need both selector
override fun popularMangaSelector() = "div.media, div.daftar-komik .komika"
override fun popularMangaFromElement(element: Element): SManga {
val manga = SManga.create()
manga.thumbnail_url = element.select(".media-left a img").attr("abs:data-src")
manga.title = element.select(".media-body .media-heading a strong").text()
val item = element.select(".media-left a")
manga.thumbnail_url = element.select(".media-left a img, .komik-img a .batas img").attr("abs:data-src")
manga.title = element.select(".media-body .media-heading a strong, .komik-des a h3").text()
val item = element.select(".media-left a, div.komik-img a")
manga.setUrlWithoutDomain(item.attr("href"))
return manga
@ -60,17 +61,9 @@ class ComicFx : ParsedHttpSource() {
return GET("$baseUrl/latest-release?page=$page", headers)
}
override fun latestUpdatesSelector() = "div.daftar-komik .komika"
override fun latestUpdatesSelector() = popularMangaSelector()
override fun latestUpdatesFromElement(element: Element): SManga {
val manga = SManga.create()
manga.thumbnail_url = element.select(".komik-img a .batas img").attr("abs:data-src")
manga.title = element.select(".komik-des a h3").text()
val item = element.select("div.komik-img a")
manga.setUrlWithoutDomain(item.attr("href"))
return manga
}
override fun latestUpdatesFromElement(element: Element): SManga = popularMangaFromElement(element)
override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector()
@ -117,6 +110,14 @@ class ComicFx : ParsedHttpSource() {
is TypeFilter -> url.addQueryParameter("ctype", filter.toUriPart())
is AuthorFilter -> url.addQueryParameter("author", filter.state)
is ArtistFilter -> url.addQueryParameter("artist", filter.state)
// if site has project page, default value "hasProjectPage" = false
is ProjectFilter -> {
if (filter.toUriPart() == "project-filter-on") {
url.setPathSegment(0, "/latest-project".substring(1))
}
}
else -> { /* Do Nothing */ }
}
}
@ -137,7 +138,18 @@ class ComicFx : ParsedHttpSource() {
artist = document.select(".infolengkap span:contains(Artist) a, #artist").text()
status = parseStatus(document.select(".infolengkap span:contains(status) i").text())
description = document.select("div.sinopsis p").text()
genre = document.select(".genre-komik a").joinToString { it.text() }
// Add series type (manga/manhwa/manhua/other) to genre
val genres = document.select(".genre-komik a").map { it.text() }.toMutableList()
document.selectFirst(".infokomik .type")?.ownText().takeIf { it.isNullOrBlank().not() }?.let { genres.add(it) }
genre = genres.map { genre ->
genre.lowercase(Locale.forLanguageTag(lang)).replaceFirstChar { char ->
if (char.isLowerCase()) char.titlecase(Locale.forLanguageTag(lang))
else char.toString()
}
}
.joinToString { it.trim() }
thumbnail_url = document.select(".thumb img").attr("abs:src")
}
@ -209,7 +221,11 @@ class ComicFx : ParsedHttpSource() {
StatusFilter(),
TypeFilter(),
ArtistFilter("Artist"),
AuthorFilter("Author")
AuthorFilter("Author"),
Filter.Separator(),
Filter.Header("NOTE: Can't be used with other filter!"),
Filter.Header("$name Project List page"),
ProjectFilter(),
)
private class ArtistFilter(name: String) : Filter.Text(name)
@ -284,6 +300,14 @@ class ComicFx : ParsedHttpSource() {
)
)
private class ProjectFilter : UriPartFilter(
"Filter Project",
arrayOf(
Pair("", "Show all manga"),
Pair("project-filter-on", "Show only project manga")
)
)
private open class UriPartFilter(displayName: String, val vals: Array<Pair<String, String>>) :
Filter.Select<String>(displayName, vals.map { it.second }.toTypedArray()) {
fun toUriPart() = vals[state].first