From e456260c21aefa601b04cad3665daa9bf5ae6063 Mon Sep 17 00:00:00 2001 From: Ahmed gamal <12355.ahmedgamal.com@gmail.com> Date: Sun, 1 Aug 2021 02:41:27 +0200 Subject: [PATCH] manga alarab:Add filters (#8342) add filter --- src/ar/mangaalarab/build.gradle | 2 +- .../extension/ar/mangaalarab/MangaAlarab.kt | 109 +++++++++++++++++- 2 files changed, 108 insertions(+), 3 deletions(-) diff --git a/src/ar/mangaalarab/build.gradle b/src/ar/mangaalarab/build.gradle index dd613de3d..1f28114da 100644 --- a/src/ar/mangaalarab/build.gradle +++ b/src/ar/mangaalarab/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'مانجا العرب' pkgNameSuffix = 'ar.mangaalarab' extClass = '.MangaAlarab' - extVersionCode = 1 + extVersionCode = 2 libVersion = '1.2' } diff --git a/src/ar/mangaalarab/src/eu/kanade/tachiyomi/extension/ar/mangaalarab/MangaAlarab.kt b/src/ar/mangaalarab/src/eu/kanade/tachiyomi/extension/ar/mangaalarab/MangaAlarab.kt index 9e7806fc1..0cbbca5ab 100644 --- a/src/ar/mangaalarab/src/eu/kanade/tachiyomi/extension/ar/mangaalarab/MangaAlarab.kt +++ b/src/ar/mangaalarab/src/eu/kanade/tachiyomi/extension/ar/mangaalarab/MangaAlarab.kt @@ -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>) : UriPartFilter("Order by", vals) + private class OTypeFilter(vals: Array>) : UriPartFilter("Order Type", vals) + private class TypeFilter(vals: Array>) : UriPartFilter("Type", vals) + private class StatusFilter(vals: Array>) : UriPartFilter("Status", vals) + private class GenresSelection(vals: Array>) : UriPartFilter("Genres Selection", vals) + class Genre(name: String, val id: String = name) : Filter.TriState(name) + private class GenreFilter(genres: List) : Filter.Group("Genre", genres) + + private fun getSortFilters(): Array> = arrayOf( + Pair("latest", "التحديثات الاخيرة"), + Pair("chapters", "عدد الفصول"), + Pair("release", "تاريخ الاصدار"), + Pair("followers", "المتابعين"), + Pair("rating", "التقييم") + ) + + private fun getOTypeFilters(): Array> = arrayOf( + Pair("desc", "تنازلي"), + Pair("asc", "تصاعدي") + ) + + open fun getStatusFilters(): Array> = arrayOf( + Pair("", ""), + Pair("manhua", "صينية (مانها)"), + Pair("manhwa", "كورية (مانهوا)"), + Pair("english", "انجليزية"), + Pair("manga", "مانجا (يابانية)") + ) + + open fun getGenresSelection(): Array> = arrayOf( + Pair("and", "ان تحتوى المانجا على كل تصنيف تم تحديده"), + Pair("or", "ان تحتوي المانجا على تصنيف او اكثر من ما تم تحديده") + ) + + open fun getGenreFilters(): List = 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>) : + Filter.Select(displayName, vals.map { it.second }.toTypedArray()) { + fun toUriPart() = vals[state].first + } }