From 8fb1a0bb1fc9ccc1e599f4e88e3aed089b4c70ec Mon Sep 17 00:00:00 2001 From: Aria Moradi Date: Sat, 5 Mar 2022 01:13:48 +0330 Subject: [PATCH] fix filterlist bugs (#306) --- .../tachidesk/manga/controller/SourceController.kt | 14 ++++++++++---- .../kotlin/suwayomi/tachidesk/manga/impl/Search.kt | 2 ++ .../suwayomi/tachidesk/server/ServerSetup.kt | 2 ++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/SourceController.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/SourceController.kt index b9a14786..b3fb62b3 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/SourceController.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/SourceController.kt @@ -7,8 +7,12 @@ package suwayomi.tachidesk.manga.controller * 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/. */ -import com.fasterxml.jackson.databind.exc.MismatchedInputException import io.javalin.http.Context +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json +import org.kodein.di.DI +import org.kodein.di.conf.global +import org.kodein.di.instance import suwayomi.tachidesk.manga.impl.MangaList import suwayomi.tachidesk.manga.impl.Search import suwayomi.tachidesk.manga.impl.Search.FilterChange @@ -70,13 +74,15 @@ object SourceController { ctx.json(Search.getFilterList(sourceId, reset)) } + private val json by DI.global.instance() + /** change filters of source with id `sourceId` */ fun setFilters(ctx: Context) { val sourceId = ctx.pathParam("sourceId").toLong() val filterChange = try { - ctx.bodyAsClass>() - } catch (e: MismatchedInputException) { - listOf(ctx.bodyAsClass()) + json.decodeFromString>(ctx.body()) + } catch (e: Exception) { + listOf(json.decodeFromString(ctx.body())) } ctx.json(Search.setFilter(sourceId, filterChange)) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Search.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Search.kt index 97ec261c..ed64f31b 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Search.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Search.kt @@ -11,6 +11,7 @@ import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import io.javalin.plugin.json.JsonMapper +import kotlinx.serialization.Serializable import org.kodein.di.DI import org.kodein.di.conf.global import org.kodein.di.instance @@ -115,6 +116,7 @@ object Search { private val jsonMapper by DI.global.instance() + @Serializable data class FilterChange( val position: Int, val state: String diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/ServerSetup.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/ServerSetup.kt index 6ef0ca34..87e75e59 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/ServerSetup.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/ServerSetup.kt @@ -11,6 +11,7 @@ import eu.kanade.tachiyomi.App import eu.kanade.tachiyomi.source.local.LocalSource import io.javalin.plugin.json.JavalinJackson import io.javalin.plugin.json.JsonMapper +import kotlinx.serialization.json.Json import mu.KotlinLogging import org.kodein.di.DI import org.kodein.di.bind @@ -59,6 +60,7 @@ fun applicationSetup() { bind() with singleton { applicationDirs } bind() with singleton { Updater() } bind() with singleton { JavalinJackson() } + bind() with singleton { Json { ignoreUnknownKeys = true } } } )