diff --git a/src/main/kotlin/com/looker/droidify/database/Database.kt b/src/main/kotlin/com/looker/droidify/database/Database.kt index 30ac607d..d083d7f4 100644 --- a/src/main/kotlin/com/looker/droidify/database/Database.kt +++ b/src/main/kotlin/com/looker/droidify/database/Database.kt @@ -453,10 +453,9 @@ object Database { fun transform(cursor: Cursor): Repository { return cursor.getBlob(cursor.getColumnIndex(Schema.Repository.ROW_DATA)) .jsonParse { - Repository.deserialize( - cursor.getLong(cursor.getColumnIndex(Schema.Repository.ROW_ID)), - it - ) + Repository.deserialize(it).apply { + this.id = cursor.getLong(cursor.getColumnIndex(Schema.Repository.ROW_ID)) + } } } } @@ -567,27 +566,37 @@ object Database { private fun transform(cursor: Cursor): Product { return cursor.getBlob(cursor.getColumnIndex(Schema.Product.ROW_DATA)) .jsonParse { - Product.deserialize( - cursor.getLong(cursor.getColumnIndex(Schema.Product.ROW_REPOSITORY_ID)), - cursor.getString(cursor.getColumnIndex(Schema.Product.ROW_DESCRIPTION)), it - ) + Product.deserialize(it).apply { + this.repositoryId = cursor + .getLong(cursor.getColumnIndex(Schema.Product.ROW_REPOSITORY_ID)) + this.description = cursor + .getString(cursor.getColumnIndex(Schema.Product.ROW_DESCRIPTION)) + } } } fun transformItem(cursor: Cursor): ProductItem { return cursor.getBlob(cursor.getColumnIndex(Schema.Product.ROW_DATA_ITEM)) .jsonParse { - ProductItem.deserialize( - cursor.getLong(cursor.getColumnIndex(Schema.Product.ROW_REPOSITORY_ID)), - cursor.getString(cursor.getColumnIndex(Schema.Product.ROW_PACKAGE_NAME)), - cursor.getString(cursor.getColumnIndex(Schema.Product.ROW_NAME)), - cursor.getString(cursor.getColumnIndex(Schema.Product.ROW_SUMMARY)), - cursor.getString(cursor.getColumnIndex(Schema.Installed.ROW_VERSION)) - .orEmpty(), - cursor.getInt(cursor.getColumnIndex(Schema.Product.ROW_COMPATIBLE)) != 0, - cursor.getInt(cursor.getColumnIndex(Schema.Synthetic.ROW_CAN_UPDATE)) != 0, - cursor.getInt(cursor.getColumnIndex(Schema.Synthetic.ROW_MATCH_RANK)), it - ) + ProductItem.deserialize(it).apply { + this.repositoryId = cursor + .getLong(cursor.getColumnIndex(Schema.Product.ROW_REPOSITORY_ID)) + this.packageName = cursor + .getString(cursor.getColumnIndex(Schema.Product.ROW_PACKAGE_NAME)) + this.name = cursor + .getString(cursor.getColumnIndex(Schema.Product.ROW_NAME)) + this.summary = cursor + .getString(cursor.getColumnIndex(Schema.Product.ROW_SUMMARY)) + this.installedVersion = cursor + .getString(cursor.getColumnIndex(Schema.Installed.ROW_VERSION)) + .orEmpty() + this.compatible = cursor + .getInt(cursor.getColumnIndex(Schema.Product.ROW_COMPATIBLE)) != 0 + this.canUpdate = cursor + .getInt(cursor.getColumnIndex(Schema.Synthetic.ROW_CAN_UPDATE)) != 0 + this.matchRank = cursor + .getInt(cursor.getColumnIndex(Schema.Synthetic.ROW_MATCH_RANK)) + } } } } diff --git a/src/main/kotlin/com/looker/droidify/entity/Product.kt b/src/main/kotlin/com/looker/droidify/entity/Product.kt index 4d1d24bc..322716d9 100644 --- a/src/main/kotlin/com/looker/droidify/entity/Product.kt +++ b/src/main/kotlin/com/looker/droidify/entity/Product.kt @@ -7,11 +7,11 @@ import com.looker.droidify.utility.extension.json.* import com.looker.droidify.utility.extension.text.nullIfEmpty data class Product( - val repositoryId: Long, + var repositoryId: Long, val packageName: String, val name: String, val summary: String, - val description: String, + var description: String, val whatsNew: String, val icon: String, val metadataIcon: String, @@ -93,10 +93,12 @@ data class Product( } fun serialize(generator: JsonGenerator) { + generator.writeNumberField("repositoryId",repositoryId) generator.writeNumberField("serialVersion", 1) generator.writeStringField("packageName", packageName) generator.writeStringField("name", name) generator.writeStringField("summary", summary) + generator.writeStringField("description", description) generator.writeStringField("whatsNew", whatsNew) generator.writeStringField("icon", icon) generator.writeStringField("metadataIcon", metadataIcon) @@ -169,10 +171,12 @@ data class Product( }, { extract(it).versionCode })) } - fun deserialize(repositoryId: Long, description: String, parser: JsonParser): Product { + fun deserialize(parser: JsonParser): Product { + var repositoryId = 0L var packageName = "" var name = "" var summary = "" + var description = "" var whatsNew = "" var icon = "" var metadataIcon = "" @@ -194,9 +198,11 @@ data class Product( var releases = emptyList() parser.forEachKey { it -> when { + it.string("repositoryId") -> repositoryId = valueAsLong it.string("packageName") -> packageName = valueAsString it.string("name") -> name = valueAsString it.string("summary") -> summary = valueAsString + it.string("description") -> description = valueAsString it.string("whatsNew") -> whatsNew = valueAsString it.string("icon") -> icon = valueAsString it.string("metadataIcon") -> metadataIcon = valueAsString diff --git a/src/main/kotlin/com/looker/droidify/entity/ProductItem.kt b/src/main/kotlin/com/looker/droidify/entity/ProductItem.kt index fe84ccfa..a13c1071 100644 --- a/src/main/kotlin/com/looker/droidify/entity/ProductItem.kt +++ b/src/main/kotlin/com/looker/droidify/entity/ProductItem.kt @@ -8,9 +8,9 @@ import com.looker.droidify.utility.KParcelable import com.looker.droidify.utility.extension.json.forEachKey data class ProductItem( - val repositoryId: Long, val packageName: String, val name: String, val summary: String, - val icon: String, val metadataIcon: String, val version: String, val installedVersion: String, - val compatible: Boolean, val canUpdate: Boolean, val matchRank: Int + var repositoryId: Long, var packageName: String, var name: String, var summary: String, + val icon: String, val metadataIcon: String, val version: String, var installedVersion: String, + var compatible: Boolean, var canUpdate: Boolean, var matchRank: Int ) { sealed class Section : KParcelable { object All : Section() { @@ -60,25 +60,45 @@ data class ProductItem( fun serialize(generator: JsonGenerator) { generator.writeNumberField("serialVersion", 1) + generator.writeNumberField("repositoryId", repositoryId) + generator.writeStringField("packageName", packageName) + generator.writeStringField("name", name) + generator.writeStringField("summary", summary) generator.writeStringField("icon", icon) generator.writeStringField("metadataIcon", metadataIcon) generator.writeStringField("version", version) + generator.writeStringField("installedVersion", installedVersion) + generator.writeBooleanField("compatible", compatible) + generator.writeBooleanField("canUpdate", canUpdate) + generator.writeNumberField("matchRank", matchRank) } companion object { - fun deserialize( - repositoryId: Long, packageName: String, name: String, summary: String, - installedVersion: String, compatible: Boolean, canUpdate: Boolean, matchRank: Int, - parser: JsonParser - ): ProductItem { + fun deserialize(parser: JsonParser): ProductItem { + var repositoryId = 0L + var packageName = "" + var name = "" + var summary = "" var icon = "" var metadataIcon = "" var version = "" + var installedVersion = "" + var compatible = false + var canUpdate = false + var matchRank = 0 parser.forEachKey { when { + it.number("repositoryId") -> repositoryId = valueAsLong + it.string("packageName") -> packageName = valueAsString + it.string("name") -> name = valueAsString + it.string("summary") -> summary = valueAsString it.string("icon") -> icon = valueAsString it.string("metadataIcon") -> metadataIcon = valueAsString it.string("version") -> version = valueAsString + it.string("installedVersion") -> installedVersion = valueAsString + it.boolean("compatible") -> compatible = valueAsBoolean + it.boolean("canUpdate") -> canUpdate = valueAsBoolean + it.number("matchRank") -> matchRank = valueAsInt else -> skipChildren() } } diff --git a/src/main/kotlin/com/looker/droidify/entity/Repository.kt b/src/main/kotlin/com/looker/droidify/entity/Repository.kt index 0cc66b7b..62f9280d 100644 --- a/src/main/kotlin/com/looker/droidify/entity/Repository.kt +++ b/src/main/kotlin/com/looker/droidify/entity/Repository.kt @@ -8,7 +8,7 @@ import com.looker.droidify.utility.extension.json.writeArray import java.net.URL data class Repository( - val id: Long, val address: String, val mirrors: List, + var id: Long, val address: String, val mirrors: List, val name: String, val description: String, val version: Int, val enabled: Boolean, val fingerprint: String, val lastModified: String, val entityTag: String, val updated: Long, val timestamp: Long, val authentication: String @@ -43,6 +43,7 @@ data class Repository( fun serialize(generator: JsonGenerator) { generator.writeNumberField("serialVersion", 1) + generator.writeNumberField("id", id) generator.writeStringField("address", address) generator.writeArray("mirrors") { mirrors.forEach { writeString(it) } } generator.writeStringField("name", name) @@ -58,7 +59,8 @@ data class Repository( } companion object { - fun deserialize(id: Long, parser: JsonParser): Repository { + fun deserialize(parser: JsonParser): Repository { + var id = 0L var address = "" var mirrors = emptyList() var name = "" @@ -73,6 +75,7 @@ data class Repository( var authentication = "" parser.forEachKey { when { + it.string("id") -> id = valueAsLong it.string("address") -> address = valueAsString it.array("mirrors") -> mirrors = collectNotNullStrings() it.string("name") -> name = valueAsString diff --git a/src/main/kotlin/com/looker/droidify/index/IndexMerger.kt b/src/main/kotlin/com/looker/droidify/index/IndexMerger.kt index 5720b8ae..81e37f28 100644 --- a/src/main/kotlin/com/looker/droidify/index/IndexMerger.kt +++ b/src/main/kotlin/com/looker/droidify/index/IndexMerger.kt @@ -74,7 +74,10 @@ class IndexMerger(file: File) : Closeable { val description = it.getString(0) val product = Json.factory.createParser(it.getBlob(1)).use { it.nextToken() - Product.deserialize(repositoryId, description, it) + Product.deserialize(it).apply { + this.repositoryId = repositoryId + this.description = description + } } val releases = it.getBlob(2)?.let { Json.factory.createParser(it).use {