manga alarab:Add filters (#8342)

add filter
This commit is contained in:
Ahmed gamal 2021-08-01 02:41:27 +02:00 committed by GitHub
parent 2d061b106a
commit e456260c21
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 108 additions and 3 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'مانجا العرب'
pkgNameSuffix = 'ar.mangaalarab'
extClass = '.MangaAlarab'
extVersionCode = 1
extVersionCode = 2
libVersion = '1.2'
}

View File

@ -1,11 +1,13 @@
package eu.kanade.tachiyomi.extension.ar.mangaalarab
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.Filter
import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.Request
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
@ -55,7 +57,26 @@ class MangaAlarab : ParsedHttpSource() {
// Search
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
return GET("$baseUrl/search?q=$query&page=$page", headers)
return if (query.isNotBlank()) {
GET("$baseUrl/search?q=$query&page=$page", headers)
} else {
val url = "$baseUrl/manga?page=$page".toHttpUrlOrNull()!!.newBuilder()
filters.forEach { filter ->
when (filter) {
is SortFilter -> url.addQueryParameter("order", filter.toUriPart())
is OTypeFilter -> url.addQueryParameter("order_type", filter.toUriPart())
is StatusFilter -> url.addQueryParameter("statuses[]", filter.toUriPart())
is TypeFilter -> url.addQueryParameter("types[]", filter.toUriPart())
is GenreFilter -> {
filter.state
.filter { it.state != Filter.TriState.STATE_IGNORE }
.forEach { url.addQueryParameter("genres[]", it.id) }
}
is GenresSelection -> url.addQueryParameter("genresSelection", filter.toUriPart())
}
}
GET(url.build().toString(), headers)
}
}
override fun searchMangaSelector() = popularMangaSelector()
@ -96,5 +117,89 @@ class MangaAlarab : ParsedHttpSource() {
override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException("Not used")
override fun getFilterList() = FilterList()
override fun getFilterList() = FilterList(
Filter.Header("NOTE: Ignored if using text search!"),
Filter.Separator(),
SortFilter(getSortFilters()),
OTypeFilter(getOTypeFilters()),
Filter.Separator(),
Filter.Header("Genre exclusion not available for all sources"),
StatusFilter(getStatusFilters()),
TypeFilter(getTypeFilter()),
GenresSelection(getGenresSelection()),
Filter.Separator(),
Filter.Header("Genre exclusion not available for all sources"),
GenreFilter(getGenreFilters()),
)
private class SortFilter(vals: Array<Pair<String?, String>>) : UriPartFilter("Order by", vals)
private class OTypeFilter(vals: Array<Pair<String?, String>>) : UriPartFilter("Order Type", vals)
private class TypeFilter(vals: Array<Pair<String?, String>>) : UriPartFilter("Type", vals)
private class StatusFilter(vals: Array<Pair<String?, String>>) : UriPartFilter("Status", vals)
private class GenresSelection(vals: Array<Pair<String?, String>>) : UriPartFilter("Genres Selection", vals)
class Genre(name: String, val id: String = name) : Filter.TriState(name)
private class GenreFilter(genres: List<Genre>) : Filter.Group<Genre>("Genre", genres)
private fun getSortFilters(): Array<Pair<String?, String>> = arrayOf(
Pair("latest", "التحديثات الاخيرة"),
Pair("chapters", "عدد الفصول"),
Pair("release", "تاريخ الاصدار"),
Pair("followers", "المتابعين"),
Pair("rating", "التقييم")
)
private fun getOTypeFilters(): Array<Pair<String?, String>> = arrayOf(
Pair("desc", "تنازلي"),
Pair("asc", "تصاعدي")
)
open fun getStatusFilters(): Array<Pair<String?, String>> = arrayOf(
Pair("", "<select>"),
Pair("completed", "مكتملة"),
Pair("ongoing", "مستمرة"),
Pair("cancelled", "متوقفة"),
Pair("onhold", "في الانتظار")
)
open fun getTypeFilter(): Array<Pair<String?, String>> = arrayOf(
Pair("", "<select>"),
Pair("manhua", "صينية (مانها)"),
Pair("manhwa", "كورية (مانهوا)"),
Pair("english", "انجليزية"),
Pair("manga", "مانجا (يابانية)")
)
open fun getGenresSelection(): Array<Pair<String?, String>> = arrayOf(
Pair("and", "ان تحتوى المانجا على كل تصنيف تم تحديده"),
Pair("or", "ان تحتوي المانجا على تصنيف او اكثر من ما تم تحديده")
)
open fun getGenreFilters(): List<Genre> = listOf(
Genre("اكشن", "1"),
Genre("مغامرة", "2"),
Genre("خيالي", "3"),
Genre("سحر", "4"),
Genre("من ضعيف لقوي", "5"),
Genre("زنزانة", "6"),
Genre("بناء على رواية ويب", "7"),
Genre("فنون قتالية", "8"),
Genre("اعادة البعث", "9"),
Genre("السفر عبر الزمن", "10"),
Genre("رومانسي", "11"),
Genre("كوميدي", "12"),
Genre("الانتقال الى عالم اخر", "13"),
Genre("تاريخي", "14"),
Genre("انتقام", "15"),
Genre("حياة مدرسية", "16"),
Genre("مصاصي دماء", "17"),
Genre("غموض", "18"),
Genre("رعب", "19"),
Genre("دراما", "20"),
Genre("نفسي", "21")
)
open class UriPartFilter(displayName: String, private val vals: Array<Pair<String?, String>>) :
Filter.Select<String>(displayName, vals.map { it.second }.toTypedArray()) {
fun toUriPart() = vals[state].first
}
}