Readcomiconline: Added new filters (#19262)

This commit is contained in:
Ota 2023-12-11 15:40:51 +01:00 committed by GitHub
parent 02501b845c
commit 900470df5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 77 additions and 17 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'ReadComicOnline'
pkgNameSuffix = 'en.readcomiconline'
extClass = '.Readcomiconline'
extVersionCode = 16
extVersionCode = 17
}
dependencies {

View File

@ -99,23 +99,58 @@ class Readcomiconline : ConfigurableSource, ParsedHttpSource() {
override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector()
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
val url = "$baseUrl/AdvanceSearch".toHttpUrl().newBuilder().apply {
addQueryParameter("comicName", query.trim())
addQueryParameter("page", page.toString())
for (filter in if (filters.isEmpty()) getFilterList() else filters) {
when (filter) {
is Status -> addQueryParameter("status", arrayOf("", "Completed", "Ongoing")[filter.state])
is GenreList -> {
addQueryParameter("ig", filter.included.joinToString(","))
addQueryParameter("eg", filter.excluded.joinToString(","))
}
else -> {}
}
}
}.build()
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { // publisher > writer > artist + sorting for both if else
if (query.isEmpty() && (if (filters.isEmpty()) getFilterList() else filters).filterIsInstance<GenreList>().all { it.included.isEmpty() && it.excluded.isEmpty() }) {
val url = baseUrl.toHttpUrl().newBuilder().apply {
var pathSegmentAdded = false
return GET(url, headers)
for (filter in if (filters.isEmpty()) getFilterList() else filters) {
when (filter) {
is PublisherFilter -> {
if (filter.state.isNotEmpty()) {
addPathSegments("Publisher/${filter.state.replace(" ", "-")}")
pathSegmentAdded = true
}
}
is WriterFilter -> {
if (filter.state.isNotEmpty()) {
addPathSegments("Writer/${filter.state.replace(" ", "-")}")
pathSegmentAdded = true
}
}
is ArtistFilter -> {
if (filter.state.isNotEmpty()) {
addPathSegments("Artist/${filter.state.replace(" ", "-")}")
pathSegmentAdded = true
}
}
else -> {}
}
if (pathSegmentAdded) {
break
}
}
addPathSegment((if (filters.isEmpty()) getFilterList() else filters).filterIsInstance<SortFilter>().first().selected.toString())
}.build()
return GET(url, headers)
} else {
val url = "$baseUrl/AdvanceSearch".toHttpUrl().newBuilder().apply {
addQueryParameter("comicName", query.trim())
addQueryParameter("page", page.toString())
for (filter in if (filters.isEmpty()) getFilterList() else filters) {
when (filter) {
is Status -> addQueryParameter("status", arrayOf("", "Completed", "Ongoing")[filter.state])
is GenreList -> {
addQueryParameter("ig", filter.included.joinToString(","))
addQueryParameter("eg", filter.excluded.joinToString(","))
}
else -> {}
}
}
}.build()
return GET(url, headers)
}
}
override fun searchMangaSelector() = popularMangaSelector()
@ -203,10 +238,35 @@ class Readcomiconline : ConfigurableSource, ParsedHttpSource() {
val excluded: List<String>
get() = state.filter { it.isExcluded() }.map { it.gid }
}
open class SelectFilter(displayName: String, private val options: Array<Pair<String, String>>) : Filter.Select<String>(
displayName,
options.map { it.first }.toTypedArray(),
) {
open val selected get() = options[state].second.takeUnless { it.isEmpty() }
}
private class PublisherFilter() : Filter.Text("Publisher")
private class WriterFilter() : Filter.Text("Writer")
private class ArtistFilter() : Filter.Text("Artist")
private class SortFilter : SelectFilter(
"Sort By",
arrayOf(
Pair("Alphabet", ""),
Pair("Popularity", "MostPopular"),
Pair("Latest Update", "LatestUpdate"),
Pair("New Comic", "Newest"),
),
)
override fun getFilterList() = FilterList(
Status(),
GenreList(getGenreList()),
Filter.Separator(),
Filter.Header("Filters below is ignored when Status,Genre or the queue is not empty."),
SortFilter(),
PublisherFilter(),
WriterFilter(),
ArtistFilter(),
)
// $("select[name=\"genres\"]").map((i,el) => `Genre("${$(el).next().text().trim()}", ${i})`).get().join(',\n')