Refactor the TaoSect code a bit and update the icon (#11273)
* Refactor the TaoSect filter code. * Update the icon.
@ -6,7 +6,7 @@ ext {
|
|||||||
extName = 'Tao Sect'
|
extName = 'Tao Sect'
|
||||||
pkgNameSuffix = 'pt.taosect'
|
pkgNameSuffix = 'pt.taosect'
|
||||||
extClass = '.TaoSect'
|
extClass = '.TaoSect'
|
||||||
extVersionCode = 14
|
extVersionCode = 15
|
||||||
isNsfw = true
|
isNsfw = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 88 KiB |
@ -4,7 +4,6 @@ import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
|
|||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
import eu.kanade.tachiyomi.network.asObservableSuccess
|
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.FilterList
|
||||||
import eu.kanade.tachiyomi.source.model.MangasPage
|
import eu.kanade.tachiyomi.source.model.MangasPage
|
||||||
import eu.kanade.tachiyomi.source.model.Page
|
import eu.kanade.tachiyomi.source.model.Page
|
||||||
@ -153,76 +152,8 @@ class TaoSect : HttpSource() {
|
|||||||
apiUrl.addQueryParameter("search", query)
|
apiUrl.addQueryParameter("search", query)
|
||||||
}
|
}
|
||||||
|
|
||||||
filters.forEach { filter ->
|
filters.filterIsInstance<QueryParameterFilter>()
|
||||||
when (filter) {
|
.forEach { it.toQueryParameter(apiUrl, query) }
|
||||||
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")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return GET(apiUrl.toString(), apiHeaders)
|
return GET(apiUrl.toString(), apiHeaders)
|
||||||
}
|
}
|
||||||
@ -405,29 +336,11 @@ class TaoSect : HttpSource() {
|
|||||||
CountryFilter(getCountryList()),
|
CountryFilter(getCountryList()),
|
||||||
StatusFilter(getStatusList()),
|
StatusFilter(getStatusList()),
|
||||||
GenreFilter(getGenreList()),
|
GenreFilter(getGenreList()),
|
||||||
SortFilter(),
|
SortFilter(SORT_LIST, DEFAULT_ORDERBY),
|
||||||
FeaturedFilter(),
|
FeaturedFilter(),
|
||||||
NsfwFilter()
|
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 {
|
private inline fun <reified T> Response.parseAs(): T = use {
|
||||||
json.decodeFromString(it.body?.string().orEmpty())
|
json.decodeFromString(it.body?.string().orEmpty())
|
||||||
}
|
}
|
||||||
|
@ -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")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|