mirror of
https://github.com/Aviortheking/Neo-Store.git
synced 2025-06-08 00:39:54 +00:00
Add: Migrate antifeatures, donates, licenses & screenshots into from entity into database.entity Product
This commit is contained in:
parent
3f490c2487
commit
5f923f70dd
@ -24,6 +24,10 @@ const val ROW_ICON = "icon"
|
|||||||
const val ROW_METADATA_ICON = "metadataIcon"
|
const val ROW_METADATA_ICON = "metadataIcon"
|
||||||
const val ROW_RELEASES = "releases"
|
const val ROW_RELEASES = "releases"
|
||||||
const val ROW_CATEGORIES = "categories"
|
const val ROW_CATEGORIES = "categories"
|
||||||
|
const val ROW_ANTIFEATURES = "categories"
|
||||||
|
const val ROW_LICENSES = "categories"
|
||||||
|
const val ROW_DONATES = "categories"
|
||||||
|
const val ROW_SCREENSHOTS = "categories"
|
||||||
const val ROW_VERSION = "version"
|
const val ROW_VERSION = "version"
|
||||||
const val ROW_SIGNATURE = "signature"
|
const val ROW_SIGNATURE = "signature"
|
||||||
const val ROW_ID = "_id"
|
const val ROW_ID = "_id"
|
||||||
|
@ -3,6 +3,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.database.entity.Release.Companion.deserializeIncompatibilities
|
||||||
|
import com.looker.droidify.entity.Donate
|
||||||
|
import com.looker.droidify.entity.Screenshot
|
||||||
import com.looker.droidify.utility.extension.json.writeDictionary
|
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
|
||||||
@ -73,4 +75,34 @@ object Converters {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TypeConverter
|
||||||
|
@JvmStatic
|
||||||
|
fun toScreenshots(byteArray: ByteArray): List<Screenshot> {
|
||||||
|
val string = byteArray.toString()
|
||||||
|
return if (string == "") emptyList()
|
||||||
|
else string.split(",").mapNotNull { byteArray.jsonParse { Screenshot.deserialize(it) } }
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmName("screenshotsToByteArray")
|
||||||
|
@TypeConverter
|
||||||
|
@JvmStatic
|
||||||
|
fun toByteArray(screenshots: List<Screenshot>) = jsonGenerate {
|
||||||
|
screenshots.forEach { item -> item.serialize(it) }.toString().toByteArray()
|
||||||
|
}
|
||||||
|
|
||||||
|
@TypeConverter
|
||||||
|
@JvmStatic
|
||||||
|
fun toDonates(byteArray: ByteArray): List<Donate> {
|
||||||
|
val string = byteArray.toString()
|
||||||
|
return if (string == "") emptyList()
|
||||||
|
else string.split(",").mapNotNull { byteArray.jsonParse { Donate.deserialize(it) } }
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmName("donatesToByteArray")
|
||||||
|
@TypeConverter
|
||||||
|
@JvmStatic
|
||||||
|
fun toByteArray(donates: List<Donate>) = jsonGenerate {
|
||||||
|
donates.forEach { item -> item.serialize(it) }.toString().toByteArray()
|
||||||
|
}
|
||||||
}
|
}
|
@ -109,14 +109,15 @@ interface ProductDao : BaseDao<Product> {
|
|||||||
product.${ROW_SIGNATURES} != ''"""
|
product.${ROW_SIGNATURES} != ''"""
|
||||||
|
|
||||||
// Select the return fields
|
// Select the return fields
|
||||||
builder += """SELECT product.rowid AS _id, product.${ROW_REPOSITORY_ID},
|
builder += """SELECT product.rowid AS _id, product.$ROW_REPOSITORY_ID,
|
||||||
product.${ROW_PACKAGE_NAME}, product.${ROW_NAME},
|
product.$ROW_PACKAGE_NAME, product.$ROW_NAME,
|
||||||
product.${ROW_SUMMARY}, installed.${ROW_VERSION},
|
product.$ROW_SUMMARY, installed.$ROW_VERSION,
|
||||||
(COALESCE(lock.${ROW_VERSION_CODE}, -1) NOT IN (0, product.${ROW_VERSION_CODE}) AND
|
(COALESCE(lock.$ROW_VERSION_CODE, -1) NOT IN (0, product.$ROW_VERSION_CODE) AND
|
||||||
product.${ROW_COMPATIBLE} != 0 AND product.${ROW_VERSION_CODE} >
|
product.$ROW_COMPATIBLE != 0 AND product.$ROW_VERSION_CODE >
|
||||||
COALESCE(installed.${ROW_VERSION_CODE}, 0xffffffff) AND $signatureMatches)
|
COALESCE(installed.$ROW_VERSION_CODE, 0xffffffff) AND $signatureMatches)
|
||||||
AS ${ROW_CAN_UPDATE}, product.${ROW_COMPATIBLE},
|
AS $ROW_CAN_UPDATE, product.$ROW_COMPATIBLE, product.$ROW_ICON,
|
||||||
product.${ROW_ICON}, product.${ROW_METADATA_ICON}, product.${ROW_RELEASES}, product.${ROW_CATEGORIES},"""
|
product.$ROW_METADATA_ICON, product.$ROW_RELEASES, product.$ROW_CATEGORIES,
|
||||||
|
product.$ROW_ANTIFEATURES, product.$ROW_LICENSES, product.$ROW_DONATES, product.$ROW_SCREENSHOTS,"""
|
||||||
|
|
||||||
// Calculate the matching score with the search query
|
// Calculate the matching score with the search query
|
||||||
if (searchQuery.isNotEmpty()) {
|
if (searchQuery.isNotEmpty()) {
|
||||||
@ -283,6 +284,10 @@ interface ProductTempDao : BaseDao<ProductTemp> {
|
|||||||
metadataIcon = it.metadataIcon
|
metadataIcon = it.metadataIcon
|
||||||
releases = it.releases
|
releases = it.releases
|
||||||
categories = it.categories
|
categories = it.categories
|
||||||
|
antiFeatures = it.antiFeatures
|
||||||
|
licenses = it.licenses
|
||||||
|
donates = it.donates
|
||||||
|
screenshots = it.screenshots
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
it.categories.forEach { category ->
|
it.categories.forEach { category ->
|
||||||
|
@ -21,7 +21,7 @@ import kotlinx.coroutines.launch
|
|||||||
CategoryTemp::class,
|
CategoryTemp::class,
|
||||||
Installed::class,
|
Installed::class,
|
||||||
Lock::class
|
Lock::class
|
||||||
], version = 3
|
], version = 4
|
||||||
)
|
)
|
||||||
@TypeConverters(Converters::class)
|
@TypeConverters(Converters::class)
|
||||||
abstract class DatabaseX : RoomDatabase() {
|
abstract class DatabaseX : RoomDatabase() {
|
||||||
|
@ -2,7 +2,9 @@ package com.looker.droidify.database.entity
|
|||||||
|
|
||||||
import androidx.room.ColumnInfo
|
import androidx.room.ColumnInfo
|
||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
|
import com.looker.droidify.entity.Donate
|
||||||
import com.looker.droidify.entity.ProductItem
|
import com.looker.droidify.entity.ProductItem
|
||||||
|
import com.looker.droidify.entity.Screenshot
|
||||||
|
|
||||||
@Entity(tableName = "product", primaryKeys = ["repository_id", "package_name"])
|
@Entity(tableName = "product", primaryKeys = ["repository_id", "package_name"])
|
||||||
open class Product {
|
open class Product {
|
||||||
@ -21,6 +23,10 @@ open class Product {
|
|||||||
var metadataIcon = ""
|
var metadataIcon = ""
|
||||||
var releases: List<Release> = emptyList()
|
var releases: List<Release> = emptyList()
|
||||||
var categories: List<String> = emptyList()
|
var categories: List<String> = emptyList()
|
||||||
|
var antiFeatures: List<String> = emptyList()
|
||||||
|
var licenses: List<String> = emptyList()
|
||||||
|
var donates: List<Donate> = emptyList()
|
||||||
|
var screenshots: List<Screenshot> = emptyList()
|
||||||
|
|
||||||
// TODO Remove in next iteration
|
// TODO Remove in next iteration
|
||||||
@ColumnInfo(typeAffinity = ColumnInfo.BLOB)
|
@ColumnInfo(typeAffinity = ColumnInfo.BLOB)
|
||||||
|
@ -130,9 +130,9 @@ data class Product(
|
|||||||
generator.writeArray("screenshots") {
|
generator.writeArray("screenshots") {
|
||||||
screenshots.forEach {
|
screenshots.forEach {
|
||||||
writeDictionary {
|
writeDictionary {
|
||||||
writeStringField("locale", it.locale)
|
it.serialize(
|
||||||
writeStringField("type", it.type.jsonName)
|
this
|
||||||
writeStringField("path", it.path)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -199,46 +199,10 @@ data class Product(
|
|||||||
it.array("categories") -> categories = collectNotNullStrings()
|
it.array("categories") -> categories = collectNotNullStrings()
|
||||||
it.array("antiFeatures") -> antiFeatures = collectNotNullStrings()
|
it.array("antiFeatures") -> antiFeatures = collectNotNullStrings()
|
||||||
it.array("licenses") -> licenses = collectNotNullStrings()
|
it.array("licenses") -> licenses = collectNotNullStrings()
|
||||||
it.array("donates") -> donates = collectNotNull(JsonToken.START_OBJECT) {
|
it.array("donates") -> donates =
|
||||||
var type = ""
|
collectNotNull(JsonToken.START_OBJECT, Donate::deserialize)
|
||||||
var url = ""
|
|
||||||
var address = ""
|
|
||||||
var id = ""
|
|
||||||
forEachKey {
|
|
||||||
when {
|
|
||||||
it.string("type") -> type = valueAsString
|
|
||||||
it.string("url") -> url = valueAsString
|
|
||||||
it.string("address") -> address = valueAsString
|
|
||||||
it.string("id") -> id = valueAsString
|
|
||||||
else -> skipChildren()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
when (type) {
|
|
||||||
"" -> Donate.Regular(url)
|
|
||||||
"bitcoin" -> Donate.Bitcoin(address)
|
|
||||||
"litecoin" -> Donate.Litecoin(address)
|
|
||||||
"flattr" -> Donate.Flattr(id)
|
|
||||||
"liberapay" -> Donate.Liberapay(id)
|
|
||||||
"openCollective" -> Donate.OpenCollective(id)
|
|
||||||
else -> null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
it.array("screenshots") -> screenshots =
|
it.array("screenshots") -> screenshots =
|
||||||
collectNotNull(JsonToken.START_OBJECT) {
|
collectNotNull(JsonToken.START_OBJECT, Screenshot::deserialize)
|
||||||
var locale = ""
|
|
||||||
var type = ""
|
|
||||||
var path = ""
|
|
||||||
forEachKey {
|
|
||||||
when {
|
|
||||||
it.string("locale") -> locale = valueAsString
|
|
||||||
it.string("type") -> type = valueAsString
|
|
||||||
it.string("path") -> path = valueAsString
|
|
||||||
else -> skipChildren()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Screenshot.Type.values().find { it.jsonName == type }
|
|
||||||
?.let { Screenshot(locale, it, path) }
|
|
||||||
}
|
|
||||||
it.array("releases") -> releases =
|
it.array("releases") -> releases =
|
||||||
collectNotNull(JsonToken.START_OBJECT, Release.Companion::deserialize)
|
collectNotNull(JsonToken.START_OBJECT, Release.Companion::deserialize)
|
||||||
else -> skipChildren()
|
else -> skipChildren()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user