Comick.fun: Fixes genre missing for some manga (#8390)

* Fix json parsing for genre tags

* Updated version
This commit is contained in:
Arraiment 2021-08-04 19:15:10 +08:00 committed by GitHub
parent 0fb6bc0d44
commit 633ebe7e7c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 16 deletions

View File

@ -6,7 +6,7 @@ ext {
extName = 'Comick.fun' extName = 'Comick.fun'
pkgNameSuffix = 'all.comickfun' pkgNameSuffix = 'all.comickfun'
extClass = '.ComickFunFactory' extClass = '.ComickFunFactory'
extVersionCode = 5 extVersionCode = 6
libVersion = '1.2' libVersion = '1.2'
containsNsfw = true containsNsfw = true
} }

View File

@ -20,6 +20,7 @@ import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.JsonTransformingSerializer import kotlinx.serialization.json.JsonTransformingSerializer
import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.serializer import kotlinx.serialization.serializer
import java.lang.Exception
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import kotlin.math.pow import kotlin.math.pow
import kotlin.math.truncate import kotlin.math.truncate
@ -72,7 +73,11 @@ inline fun <reified T : Any> deepSelectDeserializer(vararg keys: String, tDeseri
* @param objKey: String - A key identifying an object in JsonElement * @param objKey: String - A key identifying an object in JsonElement
* @param keys: vararg String - Keys identifying values to lift from objKey * @param keys: vararg String - Keys identifying values to lift from objKey
*/ */
inline fun <reified T : Any> jsonFlatten(objKey: String, vararg keys: String, tDeserializer: KSerializer<T> = serializer()): JsonTransformingSerializer<T> { inline fun <reified T : Any> jsonFlatten(
objKey: String,
vararg keys: String,
tDeserializer: KSerializer<T> = serializer()
): JsonTransformingSerializer<T> {
return object : JsonTransformingSerializer<T>(tDeserializer) { return object : JsonTransformingSerializer<T>(tDeserializer) {
override fun transformDeserialize(element: JsonElement) = buildJsonObject { override fun transformDeserialize(element: JsonElement) = buildJsonObject {
require(element is JsonObject) require(element is JsonObject)
@ -204,24 +209,24 @@ class SMangaDeserializer : KSerializer<SManga> {
return SManga.create().apply { return SManga.create().apply {
var id: Int? = null var id: Int? = null
var slug: String? = null var slug: String? = null
val tryTo = ( val tryTo = { fn: () -> Unit ->
{ try {
var hasThrown = false; fn()
{ fn: () -> Unit -> } catch (_: Exception) {
if (!hasThrown) { // Do nothing when fn fails to decode due to type mismatch
try {
fn()
} catch (_: java.lang.Exception) {
hasThrown = true
}
}
}
} }
)() }
decoder.decodeStructureByKnownName(descriptor) { names -> decoder.decodeStructureByKnownName(descriptor) { names ->
for ((name, index) in names) { for ((name, index) in names) {
val sluggedNameSerializer = ListSerializer(deepSelectDeserializer<String>("name")) val sluggedNameSerializer = ListSerializer(deepSelectDeserializer<String>("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) { when (name) {
"slug" -> { "slug" -> {
slug = decodeStringElement(descriptor, index) slug = decodeStringElement(descriptor, index)