mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-04 03:14:40 -05:00
support array filter changes (#304)
* support array filter changes * typo * better formating
This commit is contained in:
@@ -45,7 +45,7 @@ object MangaAPI {
|
|||||||
post("{sourceId}/preferences", SourceController::setPreference)
|
post("{sourceId}/preferences", SourceController::setPreference)
|
||||||
|
|
||||||
get("{sourceId}/filters", SourceController::getFilters)
|
get("{sourceId}/filters", SourceController::getFilters)
|
||||||
post("{sourceId}/filters", SourceController::setFilter)
|
post("{sourceId}/filters", SourceController::setFilters)
|
||||||
|
|
||||||
get("{sourceId}/search", SourceController::searchSingle)
|
get("{sourceId}/search", SourceController::searchSingle)
|
||||||
// get("all/search", SourceController::searchGlobal) // TODO
|
// get("all/search", SourceController::searchGlobal) // TODO
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ package suwayomi.tachidesk.manga.controller
|
|||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.exc.MismatchedInputException
|
||||||
import io.javalin.http.Context
|
import io.javalin.http.Context
|
||||||
import suwayomi.tachidesk.manga.impl.MangaList
|
import suwayomi.tachidesk.manga.impl.MangaList
|
||||||
import suwayomi.tachidesk.manga.impl.Search
|
import suwayomi.tachidesk.manga.impl.Search
|
||||||
@@ -69,10 +70,14 @@ object SourceController {
|
|||||||
ctx.json(Search.getFilterList(sourceId, reset))
|
ctx.json(Search.getFilterList(sourceId, reset))
|
||||||
}
|
}
|
||||||
|
|
||||||
/** set one filter of source with id `sourceId` */
|
/** change filters of source with id `sourceId` */
|
||||||
fun setFilter(ctx: Context) {
|
fun setFilters(ctx: Context) {
|
||||||
val sourceId = ctx.pathParam("sourceId").toLong()
|
val sourceId = ctx.pathParam("sourceId").toLong()
|
||||||
val filterChange = ctx.bodyAsClass(FilterChange::class.java)
|
val filterChange = try {
|
||||||
|
ctx.bodyAsClass<List<FilterChange>>()
|
||||||
|
} catch (e: MismatchedInputException) {
|
||||||
|
listOf(ctx.bodyAsClass<FilterChange>())
|
||||||
|
}
|
||||||
|
|
||||||
ctx.json(Search.setFilter(sourceId, filterChange))
|
ctx.json(Search.setFilter(sourceId, filterChange))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,32 +80,36 @@ object Search {
|
|||||||
val filter: Filter<*>,
|
val filter: Filter<*>,
|
||||||
)
|
)
|
||||||
|
|
||||||
fun setFilter(sourceId: Long, change: FilterChange) {
|
fun setFilter(sourceId: Long, changes: List<FilterChange>) {
|
||||||
val source = getCatalogueSourceOrStub(sourceId)
|
val source = getCatalogueSourceOrStub(sourceId)
|
||||||
val filterList = getFilterListOf(source, false)
|
val filterList = getFilterListOf(source, false)
|
||||||
|
|
||||||
when (val filter = filterList[change.position]) {
|
changes.forEach { change ->
|
||||||
is Filter.Header -> {
|
when (val filter = filterList[change.position]) {
|
||||||
// NOOP
|
is Filter.Header -> {
|
||||||
}
|
// NOOP
|
||||||
is Filter.Separator -> {
|
}
|
||||||
// NOOP
|
is Filter.Separator -> {
|
||||||
}
|
// NOOP
|
||||||
is Filter.Select<*> -> filter.state = change.state.toInt()
|
}
|
||||||
is Filter.Text -> filter.state = change.state
|
is Filter.Select<*> -> filter.state = change.state.toInt()
|
||||||
is Filter.CheckBox -> filter.state = change.state.toBooleanStrict()
|
is Filter.Text -> filter.state = change.state
|
||||||
is Filter.TriState -> filter.state = change.state.toInt()
|
is Filter.CheckBox -> filter.state = change.state.toBooleanStrict()
|
||||||
is Filter.Group<*> -> {
|
is Filter.TriState -> filter.state = change.state.toInt()
|
||||||
val groupChange = jsonMapper.fromJsonString(change.state, FilterChange::class.java)
|
is Filter.Group<*> -> {
|
||||||
|
val groupChange = jsonMapper.fromJsonString(change.state, FilterChange::class.java)
|
||||||
|
|
||||||
when (val groupFilter = filter.state[groupChange.position]) {
|
when (val groupFilter = filter.state[groupChange.position]) {
|
||||||
is Filter.CheckBox -> groupFilter.state = groupChange.state.toBooleanStrict()
|
is Filter.CheckBox -> groupFilter.state = groupChange.state.toBooleanStrict()
|
||||||
is Filter.TriState -> groupFilter.state = groupChange.state.toInt()
|
is Filter.TriState -> groupFilter.state = groupChange.state.toInt()
|
||||||
is Filter.Text -> groupFilter.state = groupChange.state
|
is Filter.Text -> groupFilter.state = groupChange.state
|
||||||
is Filter.Select<*> -> groupFilter.state = groupChange.state.toInt()
|
is Filter.Select<*> -> groupFilter.state = groupChange.state.toInt()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
is Filter.Sort -> {
|
||||||
|
filter.state = jsonMapper.fromJsonString(change.state, Filter.Sort.Selection::class.java)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
is Filter.Sort -> filter.state = jsonMapper.fromJsonString(change.state, Filter.Sort.Selection::class.java)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user