mirror of
https://github.com/Aviortheking/Neo-Store.git
synced 2025-04-23 11:22:12 +00:00
Update: Simplify serialize and deserialize for data objects (Repository, Product & ProductItem)
This commit is contained in:
parent
39ebb6fdf6
commit
268d5be601
@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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<Release>()
|
||||
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
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
@ -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<String>,
|
||||
var id: Long, val address: String, val mirrors: List<String>,
|
||||
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<String>()
|
||||
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
|
||||
|
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user