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

@ -3,7 +3,7 @@ package com.looker.droidify.content
import android.content.Context
import android.content.SharedPreferences
import com.looker.droidify.database.DatabaseX
import com.looker.droidify.database.Lock
import com.looker.droidify.database.entity.Lock
import com.looker.droidify.entity.ProductPreference
import com.looker.droidify.utility.extension.json.Json
import com.looker.droidify.utility.extension.json.parseDictionary

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
}
}

View File

@ -3,7 +3,7 @@ package com.looker.droidify.entity
import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.core.JsonToken
import com.looker.droidify.database.Installed
import com.looker.droidify.database.entity.Installed
import com.looker.droidify.utility.extension.json.*
import com.looker.droidify.utility.extension.text.nullIfEmpty

View File

@ -43,7 +43,7 @@ import com.google.android.material.textview.MaterialTextView
import com.looker.droidify.R
import com.looker.droidify.content.Preferences
import com.looker.droidify.content.ProductPreferences
import com.looker.droidify.database.Installed
import com.looker.droidify.database.entity.Installed
import com.looker.droidify.entity.*
import com.looker.droidify.network.CoilDownloader
import com.looker.droidify.screen.ScreenshotsAdapter

View File

@ -7,7 +7,7 @@ import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.items
import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.dp
import com.looker.droidify.database.Product
import com.looker.droidify.database.entity.Product
@Composable
fun ProductsVerticalRecycler(productsList: List<Product>) {

View File

@ -73,7 +73,7 @@ class AppDetailFragment() : ScreenFragment(), AppDetailAdapter.Callbacks {
}
private class Installed(
val data: com.looker.droidify.database.Installed, val isSystem: Boolean,
val data: com.looker.droidify.database.entity.Installed, val isSystem: Boolean,
val launcherActivities: List<Pair<String, String>>,
)

View File

@ -5,7 +5,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import com.looker.droidify.database.Product
import com.looker.droidify.database.entity.Product
import com.looker.droidify.databinding.FragmentExploreXBinding
import com.looker.droidify.entity.Repository
import com.looker.droidify.ui.items.VAppItem

View File

@ -6,7 +6,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.looker.droidify.database.Product
import com.looker.droidify.database.entity.Product
import com.looker.droidify.databinding.FragmentInstalledXBinding
import com.looker.droidify.entity.Repository
import com.looker.droidify.ui.items.HAppItem

View File

@ -6,7 +6,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.looker.droidify.database.Product
import com.looker.droidify.database.entity.Product
import com.looker.droidify.databinding.FragmentLatestXBinding
import com.looker.droidify.entity.Repository
import com.looker.droidify.ui.items.HAppItem

View File

@ -9,7 +9,7 @@ import androidx.paging.LivePagedListBuilder
import androidx.paging.PagedList
import com.looker.droidify.content.Preferences
import com.looker.droidify.database.DatabaseX
import com.looker.droidify.database.Product
import com.looker.droidify.database.entity.Product
import com.looker.droidify.entity.ProductItem
import com.looker.droidify.ui.fragments.Request
import com.looker.droidify.ui.fragments.Source

View File

@ -4,7 +4,7 @@ import androidx.lifecycle.MediatorLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.looker.droidify.database.DatabaseX
import com.looker.droidify.database.Repository
import com.looker.droidify.database.entity.Repository
class RepositoriesViewModelX(val db: DatabaseX) : ViewModel() {

View File

@ -16,7 +16,7 @@ import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.core.JsonParser
import com.looker.droidify.*
import com.looker.droidify.content.Preferences
import com.looker.droidify.database.Installed
import com.looker.droidify.database.entity.Installed
import com.looker.droidify.entity.InstalledItem
import com.looker.droidify.entity.Product
import com.looker.droidify.entity.ProductItem
@ -240,18 +240,18 @@ fun jsonGenerate(callback: (JsonGenerator) -> Unit): ByteArray {
val PRODUCT_ASYNC_DIFFER_CONFIG
get() = AsyncDifferConfig.Builder(object :
DiffUtil.ItemCallback<com.looker.droidify.database.Product>() {
DiffUtil.ItemCallback<com.looker.droidify.database.entity.Product>() {
override fun areItemsTheSame(
oldItem: com.looker.droidify.database.Product,
newItem: com.looker.droidify.database.Product
oldItem: com.looker.droidify.database.entity.Product,
newItem: com.looker.droidify.database.entity.Product
): Boolean {
return oldItem.repository_id == newItem.repository_id
&& oldItem.package_name == newItem.package_name
}
override fun areContentsTheSame(
oldItem: com.looker.droidify.database.Product,
newItem: com.looker.droidify.database.Product
oldItem: com.looker.droidify.database.entity.Product,
newItem: com.looker.droidify.database.entity.Product
): Boolean {
return oldItem.data_item == newItem.data_item
}