Refactor the TaoSect code a bit and update the icon (#11273)

* Refactor the TaoSect filter code.

* Update the icon.
This commit is contained in:
Alessandro Jean 2022-03-30 09:29:12 -03:00 committed by GitHub
parent 2eef857f00
commit 68b7484a7e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 116 additions and 91 deletions

View File

@ -6,7 +6,7 @@ ext {
extName = 'Tao Sect'
pkgNameSuffix = 'pt.taosect'
extClass = '.TaoSect'
extVersionCode = 14
extVersionCode = 15
isNsfw = true
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 88 KiB

View File

@ -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())
}

View File

@ -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")
}
}
}