diff --git a/src/pt/taosect/build.gradle b/src/pt/taosect/build.gradle index df5f0e0c6..993b1545c 100644 --- a/src/pt/taosect/build.gradle +++ b/src/pt/taosect/build.gradle @@ -6,7 +6,7 @@ ext { extName = 'Tao Sect' pkgNameSuffix = 'pt.taosect' extClass = '.TaoSect' - extVersionCode = 14 + extVersionCode = 15 isNsfw = true } diff --git a/src/pt/taosect/res/mipmap-hdpi/ic_launcher.png b/src/pt/taosect/res/mipmap-hdpi/ic_launcher.png index c0a27c960..20345902b 100644 Binary files a/src/pt/taosect/res/mipmap-hdpi/ic_launcher.png and b/src/pt/taosect/res/mipmap-hdpi/ic_launcher.png differ diff --git a/src/pt/taosect/res/mipmap-mdpi/ic_launcher.png b/src/pt/taosect/res/mipmap-mdpi/ic_launcher.png index 7640239d1..fc275bb1f 100644 Binary files a/src/pt/taosect/res/mipmap-mdpi/ic_launcher.png and b/src/pt/taosect/res/mipmap-mdpi/ic_launcher.png differ diff --git a/src/pt/taosect/res/mipmap-xhdpi/ic_launcher.png b/src/pt/taosect/res/mipmap-xhdpi/ic_launcher.png index d642ce103..93c99e789 100644 Binary files a/src/pt/taosect/res/mipmap-xhdpi/ic_launcher.png and b/src/pt/taosect/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/src/pt/taosect/res/mipmap-xxhdpi/ic_launcher.png b/src/pt/taosect/res/mipmap-xxhdpi/ic_launcher.png index a2f794d2a..44c3ddc6f 100644 Binary files a/src/pt/taosect/res/mipmap-xxhdpi/ic_launcher.png and b/src/pt/taosect/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/src/pt/taosect/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/taosect/res/mipmap-xxxhdpi/ic_launcher.png index dbd743759..a4801fd60 100644 Binary files a/src/pt/taosect/res/mipmap-xxxhdpi/ic_launcher.png and b/src/pt/taosect/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/src/pt/taosect/res/web_hi_res_512.png b/src/pt/taosect/res/web_hi_res_512.png index e3052b9e8..1acdd80c2 100644 Binary files a/src/pt/taosect/res/web_hi_res_512.png and b/src/pt/taosect/res/web_hi_res_512.png differ diff --git a/src/pt/taosect/src/eu/kanade/tachiyomi/extension/pt/taosect/TaoSect.kt b/src/pt/taosect/src/eu/kanade/tachiyomi/extension/pt/taosect/TaoSect.kt index 21e19a1d0..302cc581c 100644 --- a/src/pt/taosect/src/eu/kanade/tachiyomi/extension/pt/taosect/TaoSect.kt +++ b/src/pt/taosect/src/eu/kanade/tachiyomi/extension/pt/taosect/TaoSect.kt @@ -4,7 +4,6 @@ import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.asObservableSuccess -import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.MangasPage import eu.kanade.tachiyomi.source.model.Page @@ -153,76 +152,8 @@ class TaoSect : HttpSource() { apiUrl.addQueryParameter("search", query) } - filters.forEach { filter -> - when (filter) { - is CountryFilter -> { - filter.state - .groupBy { it.state } - .entries - .forEach { entry -> - val values = entry.value.joinToString(",") { it.id } - - if (entry.key == Filter.TriState.STATE_EXCLUDE) { - apiUrl.addQueryParameter("paises_exclude", values) - } else if (entry.key == Filter.TriState.STATE_INCLUDE) { - apiUrl.addQueryParameter("paises", values) - } - } - } - is StatusFilter -> { - filter.state - .groupBy { it.state } - .entries - .forEach { entry -> - val values = entry.value.joinToString(",") { it.id } - - if (entry.key == Filter.TriState.STATE_EXCLUDE) { - apiUrl.addQueryParameter("situacao_exclude", values) - } else if (entry.key == Filter.TriState.STATE_INCLUDE) { - apiUrl.addQueryParameter("situacao", values) - } - } - } - is GenreFilter -> { - filter.state - .groupBy { it.state } - .entries - .forEach { entry -> - val values = entry.value.joinToString(",") { it.id } - - if (entry.key == Filter.TriState.STATE_EXCLUDE) { - apiUrl.addQueryParameter("generos_exclude", values) - } else if (entry.key == Filter.TriState.STATE_INCLUDE) { - apiUrl.addQueryParameter("generos", values) - } - } - } - is SortFilter -> { - val orderBy = if (filter.state == null) SORT_LIST[DEFAULT_ORDERBY].id else - SORT_LIST[filter.state!!.index].id - val order = if (filter.state?.ascending == true) "asc" else "desc" - - apiUrl.addQueryParameter("order", order) - apiUrl.addQueryParameter("orderby", orderBy) - } - is FeaturedFilter -> { - if (query.isEmpty()) { - if (filter.state == Filter.TriState.STATE_INCLUDE) { - apiUrl.addQueryParameter("destaque", "1") - } else if (filter.state == Filter.TriState.STATE_EXCLUDE) { - apiUrl.addQueryParameter("destaque", "0") - } - } - } - is NsfwFilter -> { - if (filter.state == Filter.TriState.STATE_INCLUDE) { - apiUrl.addQueryParameter("mais_18", "1") - } else if (filter.state == Filter.TriState.STATE_EXCLUDE) { - apiUrl.addQueryParameter("mais_18", "0") - } - } - } - } + filters.filterIsInstance<QueryParameterFilter>() + .forEach { it.toQueryParameter(apiUrl, query) } return GET(apiUrl.toString(), apiHeaders) } @@ -405,29 +336,11 @@ class TaoSect : HttpSource() { CountryFilter(getCountryList()), StatusFilter(getStatusList()), GenreFilter(getGenreList()), - SortFilter(), + SortFilter(SORT_LIST, DEFAULT_ORDERBY), FeaturedFilter(), NsfwFilter() ) - private class Tag(val id: String, name: String) : Filter.TriState(name) - - private class CountryFilter(countries: List<Tag>) : Filter.Group<Tag>("País", countries) - - private class StatusFilter(status: List<Tag>) : Filter.Group<Tag>("Status", status) - - private class GenreFilter(genres: List<Tag>) : Filter.Group<Tag>("Gêneros", genres) - - private class SortFilter : Filter.Sort( - "Ordem", - SORT_LIST.map { it.name }.toTypedArray(), - Selection(DEFAULT_ORDERBY, false) - ) - - private class FeaturedFilter : Filter.TriState("Mostrar destaques") - - private class NsfwFilter : Filter.TriState("Mostrar conteúdo +18") - private inline fun <reified T> Response.parseAs(): T = use { json.decodeFromString(it.body?.string().orEmpty()) } diff --git a/src/pt/taosect/src/eu/kanade/tachiyomi/extension/pt/taosect/TaoSectFilters.kt b/src/pt/taosect/src/eu/kanade/tachiyomi/extension/pt/taosect/TaoSectFilters.kt new file mode 100644 index 000000000..409e9d288 --- /dev/null +++ b/src/pt/taosect/src/eu/kanade/tachiyomi/extension/pt/taosect/TaoSectFilters.kt @@ -0,0 +1,112 @@ +package eu.kanade.tachiyomi.extension.pt.taosect + +import eu.kanade.tachiyomi.source.model.Filter +import okhttp3.HttpUrl + +interface QueryParameterFilter { + fun toQueryParameter(url: HttpUrl.Builder, query: String) +} + +class Tag(val id: String, name: String) : Filter.TriState(name) + +class CountryFilter(countries: List<Tag>) : + Filter.Group<Tag>("País", countries), + QueryParameterFilter { + + override fun toQueryParameter(url: HttpUrl.Builder, query: String) { + state + .groupBy { it.state } + .entries + .forEach { entry -> + val values = entry.value.joinToString(",") { it.id } + + if (entry.key == TriState.STATE_EXCLUDE) { + url.addQueryParameter("paises_exclude", values) + } else if (entry.key == TriState.STATE_INCLUDE) { + url.addQueryParameter("paises", values) + } + } + } +} + +class StatusFilter(status: List<Tag>) : + Filter.Group<Tag>("Status", status), + QueryParameterFilter { + + override fun toQueryParameter(url: HttpUrl.Builder, query: String) { + state + .groupBy { it.state } + .entries + .forEach { entry -> + val values = entry.value.joinToString(",") { it.id } + + if (entry.key == TriState.STATE_EXCLUDE) { + url.addQueryParameter("situacao_exclude", values) + } else if (entry.key == TriState.STATE_INCLUDE) { + url.addQueryParameter("situacao", values) + } + } + } +} + +class GenreFilter(genres: List<Tag>) : + Filter.Group<Tag>("Gêneros", genres), + QueryParameterFilter { + + override fun toQueryParameter(url: HttpUrl.Builder, query: String) { + state + .groupBy { it.state } + .entries + .forEach { entry -> + val values = entry.value.joinToString(",") { it.id } + + if (entry.key == TriState.STATE_EXCLUDE) { + url.addQueryParameter("generos_exclude", values) + } else if (entry.key == TriState.STATE_INCLUDE) { + url.addQueryParameter("generos", values) + } + } + } +} + +class SortFilter(private val sortings: List<Tag>, private val default: Int) : + Filter.Sort( + "Ordem", + sortings.map { it.name }.toTypedArray(), + Selection(default, false) + ), + QueryParameterFilter { + + override fun toQueryParameter(url: HttpUrl.Builder, query: String) { + val orderBy = if (state == null) sortings[default].id else + sortings[state!!.index].id + val order = if (state?.ascending == true) "asc" else "desc" + + url.addQueryParameter("order", order) + url.addQueryParameter("orderby", orderBy) + } +} + +class FeaturedFilter : Filter.TriState("Mostrar destaques"), QueryParameterFilter { + + override fun toQueryParameter(url: HttpUrl.Builder, query: String) { + if (query.isEmpty()) { + if (state == STATE_INCLUDE) { + url.addQueryParameter("destaque", "1") + } else if (state == STATE_EXCLUDE) { + url.addQueryParameter("destaque", "0") + } + } + } +} + +class NsfwFilter : Filter.TriState("Mostrar conteúdo +18"), QueryParameterFilter { + + override fun toQueryParameter(url: HttpUrl.Builder, query: String) { + if (state == STATE_INCLUDE) { + url.addQueryParameter("mais_18", "1") + } else if (state == STATE_EXCLUDE) { + url.addQueryParameter("mais_18", "0") + } + } +}