From 04879827848a0f355bd1e521bc0cae71fea5b828 Mon Sep 17 00:00:00 2001 From: machiav3lli Date: Fri, 1 Apr 2022 01:53:39 +0200 Subject: [PATCH] Update: Make Release, Repository, Product(entity) and ProductPreference K-serializable --- .../droidify/database/entity/Release.kt | 21 +++++++++++++++++++ .../droidify/database/entity/Repository.kt | 7 +++++++ .../com/looker/droidify/entity/Product.kt | 8 +++++++ .../droidify/entity/ProductPreference.kt | 7 +++++++ 4 files changed, 43 insertions(+) diff --git a/src/main/kotlin/com/looker/droidify/database/entity/Release.kt b/src/main/kotlin/com/looker/droidify/database/entity/Release.kt index 72105895..b7d68a31 100644 --- a/src/main/kotlin/com/looker/droidify/database/entity/Release.kt +++ b/src/main/kotlin/com/looker/droidify/database/entity/Release.kt @@ -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, val incompatibilities: List, ) { + @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(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(json) } } diff --git a/src/main/kotlin/com/looker/droidify/database/entity/Repository.kt b/src/main/kotlin/com/looker/droidify/database/entity/Repository.kt index 6fc27c95..21e3c903 100644 --- a/src/main/kotlin/com/looker/droidify/database/entity/Repository.kt +++ b/src/main/kotlin/com/looker/droidify/database/entity/Repository.kt @@ -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(json) fun newRepository( address: String = "", diff --git a/src/main/kotlin/com/looker/droidify/entity/Product.kt b/src/main/kotlin/com/looker/droidify/entity/Product.kt index b19d797f..1231040c 100644 --- a/src/main/kotlin/com/looker/droidify/entity/Product.kt +++ b/src/main/kotlin/com/looker/droidify/entity/Product.kt @@ -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(json) + fun findSuggested( products: List, installed: Installed?, diff --git a/src/main/kotlin/com/looker/droidify/entity/ProductPreference.kt b/src/main/kotlin/com/looker/droidify/entity/ProductPreference.kt index 5ff311c9..909c8a3c 100644 --- a/src/main/kotlin/com/looker/droidify/entity/ProductPreference.kt +++ b/src/main/kotlin/com/looker/droidify/entity/ProductPreference.kt @@ -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(json) } }