diff --git a/src/all/comickfun/build.gradle b/src/all/comickfun/build.gradle index 0a9efa021..bb368bc8f 100644 --- a/src/all/comickfun/build.gradle +++ b/src/all/comickfun/build.gradle @@ -6,7 +6,7 @@ ext { extName = 'Comick.fun' pkgNameSuffix = 'all.comickfun' extClass = '.ComickFunFactory' - extVersionCode = 5 + extVersionCode = 6 libVersion = '1.2' containsNsfw = true } diff --git a/src/all/comickfun/src/eu/kanade/tachiyomi/extension/all/comickfun/ComickFunSerialization.kt b/src/all/comickfun/src/eu/kanade/tachiyomi/extension/all/comickfun/ComickFunSerialization.kt index 8828afa0b..aa089b3ae 100644 --- a/src/all/comickfun/src/eu/kanade/tachiyomi/extension/all/comickfun/ComickFunSerialization.kt +++ b/src/all/comickfun/src/eu/kanade/tachiyomi/extension/all/comickfun/ComickFunSerialization.kt @@ -20,6 +20,7 @@ import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.JsonTransformingSerializer import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.serializer +import java.lang.Exception import java.text.SimpleDateFormat import kotlin.math.pow import kotlin.math.truncate @@ -72,7 +73,11 @@ inline fun deepSelectDeserializer(vararg keys: String, tDeseri * @param objKey: String - A key identifying an object in JsonElement * @param keys: vararg String - Keys identifying values to lift from objKey */ -inline fun jsonFlatten(objKey: String, vararg keys: String, tDeserializer: KSerializer = serializer()): JsonTransformingSerializer { +inline fun jsonFlatten( + objKey: String, + vararg keys: String, + tDeserializer: KSerializer = serializer() +): JsonTransformingSerializer { return object : JsonTransformingSerializer(tDeserializer) { override fun transformDeserialize(element: JsonElement) = buildJsonObject { require(element is JsonObject) @@ -204,24 +209,24 @@ class SMangaDeserializer : KSerializer { return SManga.create().apply { var id: Int? = null var slug: String? = null - val tryTo = ( - { - var hasThrown = false; - { fn: () -> Unit -> - if (!hasThrown) { - try { - fn() - } catch (_: java.lang.Exception) { - hasThrown = true - } - } - } + val tryTo = { fn: () -> Unit -> + try { + fn() + } catch (_: Exception) { + // Do nothing when fn fails to decode due to type mismatch } - )() + } decoder.decodeStructureByKnownName(descriptor) { names -> for ((name, index) in names) { val sluggedNameSerializer = ListSerializer(deepSelectDeserializer("name")) - fun nameList() = decodeSerializableElement(descriptor, index, sluggedNameSerializer).joinToString(", ") + fun nameList(): String? { + val list = decodeSerializableElement(descriptor, index, sluggedNameSerializer) + return if (list.isEmpty()) { + null + } else { + list.joinToString(", ") + } + } when (name) { "slug" -> { slug = decodeStringElement(descriptor, index)