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'
|
||||
pkgNameSuffix = 'pt.taosect'
|
||||
extClass = '.TaoSect'
|
||||
extVersionCode = 14
|
||||
extVersionCode = 15
|
||||
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.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())
|
||||
}
|
||||
|
@ -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")
|
||||
}
|
||||
}
|
||||
}
|