Readcomiconline: Added new filters (#19262)
This commit is contained in:
parent
02501b845c
commit
900470df5a
@ -5,7 +5,7 @@ ext {
|
||||
extName = 'ReadComicOnline'
|
||||
pkgNameSuffix = 'en.readcomiconline'
|
||||
extClass = '.Readcomiconline'
|
||||
extVersionCode = 16
|
||||
extVersionCode = 17
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
@ -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')
|
||||
|
Loading…
x
Reference in New Issue
Block a user