Update: Make Release, Repository, Product(entity) and ProductPreference K-serializable

This commit is contained in:
machiav3lli 2022-04-01 01:53:39 +02:00
parent d547385cc2
commit 0487982784
4 changed files with 43 additions and 0 deletions

View File

@ -6,9 +6,14 @@ import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.core.JsonToken
import com.looker.droidify.utility.extension.json.*
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
// TODO make a Room entity
@Entity(primaryKeys = ["packageName", "versionCode", "signature"])
@Serializable
data class Release(
val packageName: String,
val selected: Boolean,
@ -35,11 +40,25 @@ data class Release(
val platforms: List<String>,
val incompatibilities: List<Incompatibility>,
) {
@Serializable
sealed class Incompatibility {
@Serializable
object MinSdk : Incompatibility()
@Serializable
object MaxSdk : Incompatibility()
@Serializable
object Platform : Incompatibility()
@Serializable
data class Feature(val feature: String) : Incompatibility()
fun toJSON() = Json.encodeToString(this)
companion object {
fun fromJson(json: String) = Json.decodeFromString<Incompatibility>(json)
}
}
val identifier: String
@ -81,6 +100,7 @@ data class Release(
incompatibilities.forEach { serializeIncompatibility(it) }
}
}
fun toJSON() = Json.encodeToString(this)
companion object {
fun deserialize(parser: JsonParser): Release {
@ -203,5 +223,6 @@ data class Release(
}
}::class
}
fun fromJson(json: String) = Json.decodeFromString<Release>(json)
}
}

View File

@ -8,9 +8,14 @@ import com.fasterxml.jackson.core.JsonParser
import com.looker.droidify.utility.extension.json.collectNotNullStrings
import com.looker.droidify.utility.extension.json.forEachKey
import com.looker.droidify.utility.extension.json.writeArray
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import java.net.URL
@Entity
@Serializable
data class Repository(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "_id")
@ -73,6 +78,7 @@ data class Repository(
generator.writeNumberField("timestamp", timestamp)
generator.writeStringField("authentication", authentication)
}
fun toJSON() = Json.encodeToString(this)
companion object {
fun deserialize(parser: JsonParser): Repository {
@ -112,6 +118,7 @@ data class Repository(
lastModified, entityTag, updated, timestamp, authentication
)
}
fun fromJson(json: String) = Json.decodeFromString<Repository>(json)
fun newRepository(
address: String = "",

View File

@ -7,7 +7,12 @@ import com.looker.droidify.database.entity.Installed
import com.looker.droidify.database.entity.Release
import com.looker.droidify.utility.extension.json.*
import com.looker.droidify.utility.extension.text.nullIfEmpty
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
@Serializable
data class Product(
var repositoryId: Long,
val packageName: String,
@ -138,8 +143,11 @@ data class Product(
}
generator.writeArray("releases") { releases.forEach { writeDictionary { it.serialize(this) } } }
}
fun toJSON() = Json.encodeToString(this)
companion object {
fun fromJson(json: String) = Json.decodeFromString<Product>(json)
fun <T> findSuggested(
products: List<T>,
installed: Installed?,

View File

@ -3,7 +3,12 @@ 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 ProductPreference(val ignoreUpdates: Boolean, val ignoreVersionCode: Long) {
fun shouldIgnoreUpdate(versionCode: Long): Boolean {
return ignoreUpdates || ignoreVersionCode == versionCode
@ -13,6 +18,7 @@ data class ProductPreference(val ignoreUpdates: Boolean, val ignoreVersionCode:
generator.writeBooleanField("ignoreUpdates", ignoreUpdates)
generator.writeNumberField("ignoreVersionCode", ignoreVersionCode)
}
fun toJSON() = Json.encodeToString(this)
companion object {
fun deserialize(parser: JsonParser): ProductPreference {
@ -27,5 +33,6 @@ data class ProductPreference(val ignoreUpdates: Boolean, val ignoreVersionCode:
}
return ProductPreference(ignoreUpdates, ignoreVersionCode)
}
fun fromJson(json: String) = Json.decodeFromString<ProductPreference>(json)
}
}