Readcomiconline: Added new filters (#19262)
This commit is contained in:
parent
02501b845c
commit
900470df5a
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'ReadComicOnline'
|
extName = 'ReadComicOnline'
|
||||||
pkgNameSuffix = 'en.readcomiconline'
|
pkgNameSuffix = 'en.readcomiconline'
|
||||||
extClass = '.Readcomiconline'
|
extClass = '.Readcomiconline'
|
||||||
extVersionCode = 16
|
extVersionCode = 17
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
@ -99,23 +99,58 @@ class Readcomiconline : ConfigurableSource, ParsedHttpSource() {
|
|||||||
|
|
||||||
override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector()
|
override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector()
|
||||||
|
|
||||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { // publisher > writer > artist + sorting for both if else
|
||||||
val url = "$baseUrl/AdvanceSearch".toHttpUrl().newBuilder().apply {
|
if (query.isEmpty() && (if (filters.isEmpty()) getFilterList() else filters).filterIsInstance<GenreList>().all { it.included.isEmpty() && it.excluded.isEmpty() }) {
|
||||||
addQueryParameter("comicName", query.trim())
|
val url = baseUrl.toHttpUrl().newBuilder().apply {
|
||||||
addQueryParameter("page", page.toString())
|
var pathSegmentAdded = false
|
||||||
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)
|
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()
|
override fun searchMangaSelector() = popularMangaSelector()
|
||||||
@ -203,10 +238,35 @@ class Readcomiconline : ConfigurableSource, ParsedHttpSource() {
|
|||||||
val excluded: List<String>
|
val excluded: List<String>
|
||||||
get() = state.filter { it.isExcluded() }.map { it.gid }
|
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(
|
override fun getFilterList() = FilterList(
|
||||||
Status(),
|
Status(),
|
||||||
GenreList(getGenreList()),
|
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')
|
// $("select[name=\"genres\"]").map((i,el) => `Genre("${$(el).next().text().trim()}", ${i})`).get().join(',\n')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user