mirror of
https://github.com/Aviortheking/Neo-Store.git
synced 2025-04-24 03:42:15 +00:00
Update: Migrate Subentities and Converters to k-serialization
This commit is contained in:
parent
0487982784
commit
82d00ac6d6
@ -2,14 +2,9 @@ package com.looker.droidify.database
|
||||
|
||||
import androidx.room.TypeConverter
|
||||
import com.looker.droidify.database.entity.Release
|
||||
import com.looker.droidify.database.entity.Release.Companion.deserializeIncompatibilities
|
||||
import com.looker.droidify.entity.Donate
|
||||
import com.looker.droidify.entity.Product
|
||||
import com.looker.droidify.entity.Screenshot
|
||||
import com.looker.droidify.utility.extension.json.collectList
|
||||
import com.looker.droidify.utility.extension.json.writeDictionary
|
||||
import com.looker.droidify.utility.extension.json.writeList
|
||||
import com.looker.droidify.utility.jsonGenerate
|
||||
import com.looker.droidify.utility.jsonParse
|
||||
|
||||
object Converters {
|
||||
@TypeConverter
|
||||
@ -27,84 +22,62 @@ object Converters {
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun toProduct(byteArray: ByteArray) =
|
||||
byteArray.jsonParse { com.looker.droidify.entity.Product.deserialize(it) }
|
||||
fun toProduct(byteArray: ByteArray) = Product.fromJson(String(byteArray))
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun toByteArray(product: com.looker.droidify.entity.Product) = jsonGenerate(product::serialize)
|
||||
fun toByteArray(product: Product) = product.toJSON().toByteArray()
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun toReleases(byteArray: ByteArray): List<Release> = byteArray.jsonParse {
|
||||
it.collectList("releases") { Release.deserialize(it) }
|
||||
}
|
||||
fun toReleases(byteArray: ByteArray): List<Release> =
|
||||
if (String(byteArray) == "") emptyList()
|
||||
else String(byteArray).split(";").map { Release.fromJson(it) }
|
||||
|
||||
@JvmName("releasesToByteArray")
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun toByteArray(releases: List<Release>) = jsonGenerate { generator ->
|
||||
generator.writeList("releases", releases) { serialize(generator) }
|
||||
}
|
||||
fun toByteArray(releases: List<Release>) =
|
||||
if (releases.isNotEmpty()) releases.joinToString(";") { it.toJSON() }.toByteArray()
|
||||
else "".toByteArray()
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun toIncompatibilities(byteArray: ByteArray) =
|
||||
byteArray.jsonParse { it.deserializeIncompatibilities() }
|
||||
fun toIncompatibilities(byteArray: ByteArray): List<Release.Incompatibility> =
|
||||
if (String(byteArray) == "") emptyList()
|
||||
else String(byteArray).split(";").map { Release.Incompatibility.fromJson(it) }
|
||||
|
||||
@JvmName("incompatibilitiesToByteArray")
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun toByteArray(list: List<Release.Incompatibility>) =
|
||||
jsonGenerate { generator ->
|
||||
list.forEach {
|
||||
generator.writeDictionary {
|
||||
when (it) {
|
||||
is Release.Incompatibility.MinSdk -> {
|
||||
writeStringField("type", "minSdk")
|
||||
}
|
||||
is Release.Incompatibility.MaxSdk -> {
|
||||
writeStringField("type", "maxSdk")
|
||||
}
|
||||
is Release.Incompatibility.Platform -> {
|
||||
writeStringField("type", "platform")
|
||||
}
|
||||
is Release.Incompatibility.Feature -> {
|
||||
writeStringField("type", "feature")
|
||||
writeStringField("feature", it.feature)
|
||||
}
|
||||
}::class
|
||||
}
|
||||
}
|
||||
}
|
||||
fun toByteArray(incompatibilities: List<Release.Incompatibility>) =
|
||||
if (incompatibilities.isNotEmpty())
|
||||
incompatibilities.joinToString(";") { it.toJSON() }.toByteArray()
|
||||
else "".toByteArray()
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun toScreenshots(byteArray: ByteArray): List<Screenshot> {
|
||||
val string = byteArray.toString()
|
||||
return if (string == "") emptyList()
|
||||
else string.split(",").mapNotNull { byteArray.jsonParse { Screenshot.deserialize(it) } }
|
||||
}
|
||||
fun toScreenshots(byteArray: ByteArray): List<Screenshot> =
|
||||
if (String(byteArray) == "") emptyList()
|
||||
else String(byteArray).split(";").map { Screenshot.fromJson(it) }
|
||||
|
||||
@JvmName("screenshotsToByteArray")
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun toByteArray(screenshots: List<Screenshot>) = jsonGenerate {
|
||||
screenshots.forEach { item -> item.serialize(it) }.toString().toByteArray()
|
||||
}
|
||||
fun toByteArray(screenshots: List<Screenshot>) =
|
||||
if (screenshots.isNotEmpty()) screenshots.joinToString(";") { it.toJSON() }.toByteArray()
|
||||
else "".toByteArray()
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun toDonates(byteArray: ByteArray): List<Donate> {
|
||||
val string = byteArray.toString()
|
||||
return if (string == "") emptyList()
|
||||
else string.split(",").mapNotNull { byteArray.jsonParse { Donate.deserialize(it) } }
|
||||
}
|
||||
fun toDonates(byteArray: ByteArray): List<Donate> =
|
||||
if (String(byteArray) == "") emptyList()
|
||||
else String(byteArray).split(";").map { Donate.fromJson(it) }
|
||||
|
||||
@JvmName("donatesToByteArray")
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun toByteArray(donates: List<Donate>) = jsonGenerate {
|
||||
donates.forEach { item -> item.serialize(it) }.toString().toByteArray()
|
||||
}
|
||||
fun toByteArray(donates: List<Donate>) =
|
||||
if (donates.isNotEmpty()) donates.joinToString(";") { it.toJSON() }.toByteArray()
|
||||
else "".toByteArray()
|
||||
}
|
@ -1,76 +1,41 @@
|
||||
package com.looker.droidify.entity
|
||||
|
||||
import com.fasterxml.jackson.core.JsonGenerator
|
||||
import com.fasterxml.jackson.core.JsonParser
|
||||
import com.looker.droidify.utility.extension.json.forEachKey
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.decodeFromString
|
||||
import kotlinx.serialization.encodeToString
|
||||
import kotlinx.serialization.json.Json
|
||||
|
||||
@Serializable
|
||||
data class Author(val name: String, val email: String, val web: String)
|
||||
|
||||
@Serializable
|
||||
sealed class Donate {
|
||||
@Serializable
|
||||
data class Regular(val url: String) : Donate()
|
||||
|
||||
@Serializable
|
||||
data class Bitcoin(val address: String) : Donate()
|
||||
|
||||
@Serializable
|
||||
data class Litecoin(val address: String) : Donate()
|
||||
|
||||
@Serializable
|
||||
data class Flattr(val id: String) : Donate()
|
||||
|
||||
@Serializable
|
||||
data class Liberapay(val id: String) : Donate()
|
||||
|
||||
@Serializable
|
||||
data class OpenCollective(val id: String) : Donate()
|
||||
|
||||
fun serialize(generator: JsonGenerator) {
|
||||
when (this) {
|
||||
is Regular -> {
|
||||
generator.writeStringField("type", "")
|
||||
generator.writeStringField("url", url)
|
||||
}
|
||||
is Bitcoin -> {
|
||||
generator.writeStringField("type", "bitcoin")
|
||||
generator.writeStringField("address", address)
|
||||
}
|
||||
is Litecoin -> {
|
||||
generator.writeStringField("type", "litecoin")
|
||||
generator.writeStringField("address", address)
|
||||
}
|
||||
is Flattr -> {
|
||||
generator.writeStringField("type", "flattr")
|
||||
generator.writeStringField("id", id)
|
||||
}
|
||||
is Liberapay -> {
|
||||
generator.writeStringField("type", "liberapay")
|
||||
generator.writeStringField("id", id)
|
||||
}
|
||||
is OpenCollective -> {
|
||||
generator.writeStringField("type", "openCollective")
|
||||
generator.writeStringField("id", id)
|
||||
}
|
||||
}::class
|
||||
}
|
||||
fun toJSON() = Json.encodeToString(this)
|
||||
|
||||
companion object {
|
||||
fun deserialize(parser: JsonParser): Donate? {
|
||||
var type = ""
|
||||
var url = ""
|
||||
var address = ""
|
||||
var id = ""
|
||||
parser.forEachKey {
|
||||
when {
|
||||
it.string("type") -> type = valueAsString
|
||||
it.string("url") -> url = valueAsString
|
||||
it.string("address") -> address = valueAsString
|
||||
it.string("id") -> id = valueAsString
|
||||
else -> skipChildren()
|
||||
}
|
||||
}
|
||||
return when (type) {
|
||||
"" -> Regular(url)
|
||||
"bitcoin" -> Bitcoin(address)
|
||||
"litecoin" -> Litecoin(address)
|
||||
"flattr" -> Flattr(id)
|
||||
"liberapay" -> Liberapay(id)
|
||||
"openCollective" -> OpenCollective(id)
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
fun fromJson(json: String) = Json.decodeFromString<Donate>(json)
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
class Screenshot(val locale: String, val type: Type, val path: String) {
|
||||
enum class Type(val jsonName: String) {
|
||||
PHONE("phone"),
|
||||
@ -81,26 +46,9 @@ class Screenshot(val locale: String, val type: Type, val path: String) {
|
||||
val identifier: String
|
||||
get() = "$locale.${type.name}.$path"
|
||||
|
||||
fun serialize(generator: JsonGenerator) {
|
||||
generator.writeStringField("locale", locale)
|
||||
generator.writeStringField("type", type.jsonName)
|
||||
generator.writeStringField("path", path)
|
||||
}
|
||||
fun toJSON() = Json.encodeToString(this)
|
||||
|
||||
companion object {
|
||||
fun deserialize(parser: JsonParser): Screenshot? {
|
||||
var locale = ""
|
||||
var type = ""
|
||||
var path = ""
|
||||
parser.forEachKey {
|
||||
when {
|
||||
it.string("locale") -> locale = valueAsString
|
||||
it.string("type") -> type = valueAsString
|
||||
it.string("path") -> path = valueAsString
|
||||
else -> skipChildren()
|
||||
}
|
||||
}
|
||||
return Type.values().find { it.jsonName == type }?.let { Screenshot(locale, it, path) }
|
||||
}
|
||||
fun fromJson(json: String) = Json.decodeFromString<Screenshot>(json)
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user