This commit is contained in:
kunfei
2023-03-21 22:10:11 +08:00
parent 38a9bdbd1c
commit 9412c7f2d2
3 changed files with 22 additions and 49 deletions
@@ -3,9 +3,6 @@ package io.legado.app.data.entities
import android.os.Parcelable
import android.text.TextUtils
import androidx.room.*
import com.google.gson.JsonDeserializationContext
import com.google.gson.JsonDeserializer
import com.google.gson.JsonElement
import io.legado.app.constant.AppPattern
import io.legado.app.constant.BookSourceType
import io.legado.app.data.entities.rule.*
@@ -15,7 +12,6 @@ import io.legado.app.utils.fromJsonObject
import io.legado.app.utils.splitNotBlank
import kotlinx.parcelize.Parcelize
import java.io.InputStream
import java.lang.reflect.Type
@Suppress("unused")
@Parcelize
@@ -228,7 +224,6 @@ data class BookSource(
private val gson by lazy {
GSON.newBuilder()
.registerTypeAdapter(String::class.java, StringJsonDeserializer())
.registerTypeAdapter(ExploreRule::class.java, ExploreRule.jsonDeserializer)
.registerTypeAdapter(SearchRule::class.java, SearchRule.jsonDeserializer)
.registerTypeAdapter(BookInfoRule::class.java, BookInfoRule.jsonDeserializer)
@@ -250,22 +245,6 @@ data class BookSource(
return gson.fromJsonArray(inputStream)
}
class StringJsonDeserializer : JsonDeserializer<String?> {
override fun deserialize(
json: JsonElement,
typeOfT: Type,
context: JsonDeserializationContext?
): String? {
return when {
json.isJsonPrimitive -> json.asString
json.isJsonNull -> null
else -> json.toString()
}
}
}
}
class Converters {
@@ -3,13 +3,9 @@ package io.legado.app.data.entities
import android.os.Parcelable
import android.text.TextUtils
import androidx.room.*
import com.google.gson.JsonDeserializationContext
import com.google.gson.JsonDeserializer
import com.google.gson.JsonElement
import io.legado.app.constant.AppPattern
import io.legado.app.utils.*
import kotlinx.parcelize.Parcelize
import java.lang.reflect.Type
@Parcelize
@Entity(tableName = "rssSources", indices = [(Index(value = ["sourceUrl"], unique = false))])
@@ -174,34 +170,13 @@ data class RssSource(
@Suppress("MemberVisibilityCanBePrivate")
companion object {
private val gson by lazy {
GSON.newBuilder()
.registerTypeAdapter(String::class.java, StringJsonDeserializer())
.create()
}
fun fromJson(json: String): Result<RssSource> {
return gson.fromJsonObject(json)
return GSON.fromJsonObject(json)
}
fun fromJsonArray(jsonArray: String): Result<List<RssSource>> {
return gson.fromJsonArray(jsonArray)
}
class StringJsonDeserializer : JsonDeserializer<String?> {
override fun deserialize(
json: JsonElement,
typeOfT: Type?,
context: JsonDeserializationContext?
): String? {
return when {
json.isJsonPrimitive -> json.asString
json.isJsonNull -> null
else -> json.toString()
}
}
return GSON.fromJsonArray(jsonArray)
}
}
@@ -20,6 +20,7 @@ val GSON: Gson by lazy {
MapDeserializerDoubleAsIntFix()
)
.registerTypeAdapter(Int::class.java, IntJsonDeserializer())
.registerTypeAdapter(String::class.java, StringJsonDeserializer())
.disableHtmlEscaping()
.setPrettyPrinting()
.create()
@@ -90,6 +91,25 @@ class ParameterizedTypeImpl(private val clazz: Class<*>) : ParameterizedType {
override fun getActualTypeArguments(): Array<Type> = arrayOf(clazz)
}
/**
*
*/
class StringJsonDeserializer : JsonDeserializer<String?> {
override fun deserialize(
json: JsonElement,
typeOfT: Type,
context: JsonDeserializationContext?
): String? {
return when {
json.isJsonPrimitive -> json.asString
json.isJsonNull -> null
else -> json.toString()
}
}
}
/**
* int类型转化失败时跳过
*/
@@ -115,7 +135,6 @@ class IntJsonDeserializer : JsonDeserializer<Int?> {
}
/**
* 修复Int变为Double的问题
*/