Comic Fx: add project page & series type (#14374)
This commit is contained in:
parent
777f677175
commit
563e179abe
@ -6,7 +6,7 @@ ext {
|
||||
extName = 'Comic Fx'
|
||||
pkgNameSuffix = 'id.comicfx'
|
||||
extClass = '.ComicFx'
|
||||
extVersionCode = 4
|
||||
extVersionCode = 5
|
||||
}
|
||||
|
||||
apply from: "$rootDir/common.gradle"
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user