Update: Break down Tables into entities and Covnerters

This commit is contained in:
machiav3lli
2022-01-22 02:11:23 +01:00
parent 51736ecbef
commit bf1a6420cd
20 changed files with 149 additions and 129 deletions

View File

@ -0,0 +1,34 @@
package com.looker.droidify.database
import androidx.room.TypeConverter
import com.looker.droidify.entity.ProductItem
import com.looker.droidify.entity.Repository
import com.looker.droidify.utility.jsonGenerate
import com.looker.droidify.utility.jsonParse
object Converters {
@TypeConverter
@JvmStatic
fun toRepository(byteArray: ByteArray) = byteArray.jsonParse { Repository.deserialize(it) }
@TypeConverter
@JvmStatic
fun toByteArray(repository: Repository) = jsonGenerate(repository::serialize)
@TypeConverter
@JvmStatic
fun toProduct(byteArray: ByteArray) =
byteArray.jsonParse { com.looker.droidify.entity.Product.deserialize(it) }
@TypeConverter
@JvmStatic
fun toByteArray(product: com.looker.droidify.entity.Product) = jsonGenerate(product::serialize)
@TypeConverter
@JvmStatic
fun toProductItem(byteArray: ByteArray) = byteArray.jsonParse { ProductItem.deserialize(it) }
@TypeConverter
@JvmStatic
fun toByteArray(productItem: ProductItem) = jsonGenerate(productItem::serialize)
}

View File

@ -8,6 +8,7 @@ import androidx.room.*
import androidx.sqlite.db.SimpleSQLiteQuery
import androidx.sqlite.db.SupportSQLiteQuery
import com.looker.droidify.*
import com.looker.droidify.database.entity.*
import com.looker.droidify.entity.ProductItem
import io.reactivex.rxjava3.core.Flowable

View File

@ -5,6 +5,7 @@ import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import com.looker.droidify.database.entity.*
import com.looker.droidify.entity.Repository.Companion.defaultRepositories
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope

View File

@ -1,113 +0,0 @@
package com.looker.droidify.database
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
import androidx.room.TypeConverter
import com.looker.droidify.entity.ProductItem
import com.looker.droidify.entity.Repository
import com.looker.droidify.utility.jsonGenerate
import com.looker.droidify.utility.jsonParse
// TODO LATER: reduce redundancy by merging the entity and database classes
@Entity
class Repository {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "_id")
var id: Long = 0
var enabled = 0
var deleted = false
@ColumnInfo(typeAffinity = ColumnInfo.BLOB)
var data: Repository? = null
val trueData: Repository?
get() = data?.copy(id = id)
class IdAndDeleted {
@ColumnInfo(name = "_id")
var id = 0L
var deleted = false
}
}
@Entity(tableName = "product", primaryKeys = ["repository_id", "package_name"])
open class Product {
var repository_id = 0L
var package_name = ""
var name = ""
var summary = ""
var description = ""
var added = 0L
var updated = 0L
var version_code = 0L
var signatures = ""
var compatible = 0
@ColumnInfo(typeAffinity = ColumnInfo.BLOB)
var data: com.looker.droidify.entity.Product? = null
@ColumnInfo(typeAffinity = ColumnInfo.BLOB)
var data_item: ProductItem? = null
}
@Entity(tableName = "temporary_product")
class ProductTemp : Product()
@Entity(tableName = "category", primaryKeys = ["repository_id", "package_name", "name"])
open class Category {
var repository_id: Long = 0
var package_name = ""
var name = ""
}
@Entity(tableName = "temporary_category")
class CategoryTemp : Category()
@Entity(tableName = "memory_installed")
class Installed(pName: String = "") {
@PrimaryKey
var package_name = pName
var version = ""
var version_code = 0L
var signature = ""
}
@Entity(tableName = "memory_lock")
class Lock {
@PrimaryKey
var package_name = ""
var version_code = 0L
}
object Converters {
@TypeConverter
@JvmStatic
fun toRepository(byteArray: ByteArray) = byteArray.jsonParse { Repository.deserialize(it) }
@TypeConverter
@JvmStatic
fun toByteArray(repository: Repository) = jsonGenerate(repository::serialize)
@TypeConverter
@JvmStatic
fun toProduct(byteArray: ByteArray) =
byteArray.jsonParse { com.looker.droidify.entity.Product.deserialize(it) }
@TypeConverter
@JvmStatic
fun toByteArray(product: com.looker.droidify.entity.Product) = jsonGenerate(product::serialize)
@TypeConverter
@JvmStatic
fun toProductItem(byteArray: ByteArray) = byteArray.jsonParse { ProductItem.deserialize(it) }
@TypeConverter
@JvmStatic
fun toByteArray(productItem: ProductItem) = jsonGenerate(productItem::serialize)
}

View File

@ -0,0 +1,13 @@
package com.looker.droidify.database.entity
import androidx.room.Entity
@Entity(tableName = "category", primaryKeys = ["repository_id", "package_name", "name"])
open class Category {
var repository_id: Long = 0
var package_name = ""
var name = ""
}
@Entity(tableName = "temporary_category")
class CategoryTemp : Category()

View File

@ -0,0 +1,14 @@
package com.looker.droidify.database.entity
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "memory_installed")
class Installed(pName: String = "") {
@PrimaryKey
var package_name = pName
var version = ""
var version_code = 0L
var signature = ""
}

View File

@ -0,0 +1,11 @@
package com.looker.droidify.database.entity
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "memory_lock")
class Lock {
@PrimaryKey
var package_name = ""
var version_code = 0L
}

View File

@ -0,0 +1,29 @@
package com.looker.droidify.database.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
import com.looker.droidify.entity.ProductItem
@Entity(tableName = "product", primaryKeys = ["repository_id", "package_name"])
open class Product {
var repository_id = 0L
var package_name = ""
var name = ""
var summary = ""
var description = ""
var added = 0L
var updated = 0L
var version_code = 0L
var signatures = ""
var compatible = 0
@ColumnInfo(typeAffinity = ColumnInfo.BLOB)
var data: com.looker.droidify.entity.Product? = null
@ColumnInfo(typeAffinity = ColumnInfo.BLOB)
var data_item: ProductItem? = null
}
@Entity(tableName = "temporary_product")
class ProductTemp : Product()

View File

@ -0,0 +1,30 @@
package com.looker.droidify.database.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.looker.droidify.entity.Repository
// TODO LATER: reduce redundancy by merging the entity and database classes
@Entity
class Repository {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "_id")
var id: Long = 0
var enabled = 0
var deleted = false
@ColumnInfo(typeAffinity = ColumnInfo.BLOB)
var data: Repository? = null
val trueData: Repository?
get() = data?.copy(id = id)
class IdAndDeleted {
@ColumnInfo(name = "_id")
var id = 0L
var deleted = false
}
}