mirror of
https://github.com/Aviortheking/Neo-Store.git
synced 2025-04-28 05:42:14 +00:00
Add: ReleaseDAO
This commit is contained in:
parent
e95b3aeea3
commit
29593031c8
@ -2,6 +2,8 @@ package com.looker.droidify.database
|
|||||||
|
|
||||||
import androidx.room.TypeConverter
|
import androidx.room.TypeConverter
|
||||||
import com.looker.droidify.database.entity.Release
|
import com.looker.droidify.database.entity.Release
|
||||||
|
import com.looker.droidify.database.entity.Release.Companion.deserializeIncompatibilities
|
||||||
|
import com.looker.droidify.utility.extension.json.writeDictionary
|
||||||
import com.looker.droidify.utility.jsonGenerate
|
import com.looker.droidify.utility.jsonGenerate
|
||||||
import com.looker.droidify.utility.jsonParse
|
import com.looker.droidify.utility.jsonParse
|
||||||
|
|
||||||
@ -35,8 +37,40 @@ object Converters {
|
|||||||
else string.split(",").map { byteArray.jsonParse { Release.deserialize(it) } }
|
else string.split(",").map { byteArray.jsonParse { Release.deserialize(it) } }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@JvmName("releasesToByteArray")
|
||||||
@TypeConverter
|
@TypeConverter
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun toByteArray(releases: List<Release>) =
|
fun toByteArray(releases: List<Release>) =
|
||||||
jsonGenerate { releases.forEach { item -> item.serialize(it) }.toString().toByteArray() }
|
jsonGenerate { releases.forEach { item -> item.serialize(it) }.toString().toByteArray() }
|
||||||
|
|
||||||
|
@TypeConverter
|
||||||
|
@JvmStatic
|
||||||
|
fun toIncompatibilities(byteArray: ByteArray) =
|
||||||
|
byteArray.jsonParse { it.deserializeIncompatibilities() }
|
||||||
|
|
||||||
|
@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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -188,6 +188,17 @@ interface ProductDao : BaseDao<Product> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Dao
|
||||||
|
interface ReleaseDao : BaseDao<Release> {
|
||||||
|
// This one for the mode combining releases of different sources
|
||||||
|
@Query("SELECT * FROM `release` WHERE packageName = :packageName")
|
||||||
|
fun get(packageName: String): List<Release?>
|
||||||
|
|
||||||
|
// This one for the separating releases of different sources
|
||||||
|
@Query("SELECT * FROM `release` WHERE packageName = :packageName AND signature = :signature")
|
||||||
|
fun get(packageName: String, signature: String): List<Release?>
|
||||||
|
}
|
||||||
|
|
||||||
@Dao
|
@Dao
|
||||||
interface CategoryDao : BaseDao<Category> {
|
interface CategoryDao : BaseDao<Category> {
|
||||||
@get:Query(
|
@get:Query(
|
||||||
|
@ -15,17 +15,19 @@ import kotlinx.coroutines.launch
|
|||||||
entities = [
|
entities = [
|
||||||
Repository::class,
|
Repository::class,
|
||||||
Product::class,
|
Product::class,
|
||||||
|
Release::class,
|
||||||
ProductTemp::class,
|
ProductTemp::class,
|
||||||
Category::class,
|
Category::class,
|
||||||
CategoryTemp::class,
|
CategoryTemp::class,
|
||||||
Installed::class,
|
Installed::class,
|
||||||
Lock::class
|
Lock::class
|
||||||
], version = 1
|
], version = 2
|
||||||
)
|
)
|
||||||
@TypeConverters(Converters::class)
|
@TypeConverters(Converters::class)
|
||||||
abstract class DatabaseX : RoomDatabase() {
|
abstract class DatabaseX : RoomDatabase() {
|
||||||
abstract val repositoryDao: RepositoryDao
|
abstract val repositoryDao: RepositoryDao
|
||||||
abstract val productDao: ProductDao
|
abstract val productDao: ProductDao
|
||||||
|
abstract val releaseDao: ReleaseDao
|
||||||
abstract val productTempDao: ProductTempDao
|
abstract val productTempDao: ProductTempDao
|
||||||
abstract val categoryDao: CategoryDao
|
abstract val categoryDao: CategoryDao
|
||||||
abstract val categoryTempDao: CategoryTempDao
|
abstract val categoryTempDao: CategoryTempDao
|
||||||
|
@ -78,25 +78,7 @@ data class Release(
|
|||||||
generator.writeArray("features") { features.forEach { writeString(it) } }
|
generator.writeArray("features") { features.forEach { writeString(it) } }
|
||||||
generator.writeArray("platforms") { platforms.forEach { writeString(it) } }
|
generator.writeArray("platforms") { platforms.forEach { writeString(it) } }
|
||||||
generator.writeArray("incompatibilities") {
|
generator.writeArray("incompatibilities") {
|
||||||
incompatibilities.forEach {
|
incompatibilities.forEach { serializeIncompatibility(it) }
|
||||||
writeDictionary {
|
|
||||||
when (it) {
|
|
||||||
is Incompatibility.MinSdk -> {
|
|
||||||
writeStringField("type", "minSdk")
|
|
||||||
}
|
|
||||||
is Incompatibility.MaxSdk -> {
|
|
||||||
writeStringField("type", "maxSdk")
|
|
||||||
}
|
|
||||||
is Incompatibility.Platform -> {
|
|
||||||
writeStringField("type", "platform")
|
|
||||||
}
|
|
||||||
is Incompatibility.Feature -> {
|
|
||||||
writeStringField("type", "feature")
|
|
||||||
writeStringField("feature", it.feature)
|
|
||||||
}
|
|
||||||
}::class
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,24 +134,7 @@ data class Release(
|
|||||||
it.array("features") -> features = collectNotNullStrings()
|
it.array("features") -> features = collectNotNullStrings()
|
||||||
it.array("platforms") -> platforms = collectNotNullStrings()
|
it.array("platforms") -> platforms = collectNotNullStrings()
|
||||||
it.array("incompatibilities") -> incompatibilities =
|
it.array("incompatibilities") -> incompatibilities =
|
||||||
collectNotNull(JsonToken.START_OBJECT) {
|
deserializeIncompatibilities()
|
||||||
var type = ""
|
|
||||||
var feature = ""
|
|
||||||
forEachKey {
|
|
||||||
when {
|
|
||||||
it.string("type") -> type = valueAsString
|
|
||||||
it.string("feature") -> feature = valueAsString
|
|
||||||
else -> skipChildren()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
when (type) {
|
|
||||||
"minSdk" -> Incompatibility.MinSdk
|
|
||||||
"maxSdk" -> Incompatibility.MaxSdk
|
|
||||||
"platform" -> Incompatibility.Platform
|
|
||||||
"feature" -> Incompatibility.Feature(feature)
|
|
||||||
else -> null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else -> skipChildren()
|
else -> skipChildren()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -200,5 +165,43 @@ data class Release(
|
|||||||
incompatibilities
|
incompatibilities
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun JsonParser.deserializeIncompatibilities() = collectNotNull(JsonToken.START_OBJECT) {
|
||||||
|
var type = ""
|
||||||
|
var feature = ""
|
||||||
|
forEachKey {
|
||||||
|
when {
|
||||||
|
it.string("type") -> type = valueAsString
|
||||||
|
it.string("feature") -> feature = valueAsString
|
||||||
|
else -> skipChildren()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
when (type) {
|
||||||
|
"minSdk" -> Incompatibility.MinSdk
|
||||||
|
"maxSdk" -> Incompatibility.MaxSdk
|
||||||
|
"platform" -> Incompatibility.Platform
|
||||||
|
"feature" -> Incompatibility.Feature(feature)
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun JsonGenerator.serializeIncompatibility(incompatibility: Incompatibility) =
|
||||||
|
writeDictionary {
|
||||||
|
when (incompatibility) {
|
||||||
|
is Incompatibility.MinSdk -> {
|
||||||
|
writeStringField("type", "minSdk")
|
||||||
|
}
|
||||||
|
is Incompatibility.MaxSdk -> {
|
||||||
|
writeStringField("type", "maxSdk")
|
||||||
|
}
|
||||||
|
is Incompatibility.Platform -> {
|
||||||
|
writeStringField("type", "platform")
|
||||||
|
}
|
||||||
|
is Incompatibility.Feature -> {
|
||||||
|
writeStringField("type", "feature")
|
||||||
|
writeStringField("feature", incompatibility.feature)
|
||||||
|
}
|
||||||
|
}::class
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user