Update: Migrate from Database to DatabaseX (4.7/5 in replacing SQLite with Room)

This commit is contained in:
machiav3lli
2021-11-01 01:05:15 +01:00
parent 9235ed6e0d
commit dc65c060e7
15 changed files with 128 additions and 99 deletions

View File

@ -87,9 +87,10 @@ class CursorOwner : Fragment(), LoaderManager.LoaderCallbacks<Cursor> {
override fun onCreateLoader(id: Int, args: Bundle?): Loader<Cursor> {
val request = activeRequests[id]!!.request
val db = DatabaseX.getInstance(requireContext())
return QueryLoader(requireContext()) {
when (request) {
is Request.ProductsAvailable -> Database.ProductAdapter
is Request.ProductsAvailable -> db.productDao
.query(
installed = false,
updates = false,
@ -98,7 +99,7 @@ class CursorOwner : Fragment(), LoaderManager.LoaderCallbacks<Cursor> {
order = request.order,
signal = it
)
is Request.ProductsInstalled -> Database.ProductAdapter
is Request.ProductsInstalled -> db.productDao
.query(
installed = true,
updates = false,
@ -107,7 +108,7 @@ class CursorOwner : Fragment(), LoaderManager.LoaderCallbacks<Cursor> {
order = request.order,
signal = it
)
is Request.ProductsUpdates -> Database.ProductAdapter
is Request.ProductsUpdates -> db.productDao
.query(
installed = true,
updates = true,
@ -116,7 +117,7 @@ class CursorOwner : Fragment(), LoaderManager.LoaderCallbacks<Cursor> {
order = request.order,
signal = it
)
is Request.Repositories -> Database.RepositoryAdapter.query(it)
is Request.Repositories -> db.repositoryDao.allCursor
}
}
}

View File

@ -1,8 +1,10 @@
package com.looker.droidify.database
import android.content.Context
import androidx.room.*
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
@Database(
entities = [
@ -47,15 +49,16 @@ abstract class DatabaseX : RoomDatabase() {
}
}
@Transaction
fun cleanUp(pairs: Set<Pair<Long, Boolean>>) {
val result = pairs.windowed(10, 10, true).map {
val ids = it.map { it.first }.toLongArray()
val productsCount = productDao.deleteById(*ids)
val categoriesCount = categoryDao.deleteById(*ids)
val deleteIds = it.filter { it.second }.map { it.first }.toLongArray()
repositoryDao.deleteById(*deleteIds)
productsCount != 0 || categoriesCount != 0
runInTransaction {
val result = pairs.windowed(10, 10, true).map {
val ids = it.map { it.first }.toLongArray()
val productsCount = productDao.deleteById(*ids)
val categoriesCount = categoryDao.deleteById(*ids)
val deleteIds = it.filter { it.second }.map { it.first }.toLongArray()
repositoryDao.deleteById(*deleteIds)
productsCount != 0 || categoriesCount != 0
}
}
// Use live objects and observers instead
/*if (result.any { it }) {
@ -63,16 +66,17 @@ abstract class DatabaseX : RoomDatabase() {
}*/
}
@Transaction
fun finishTemporary(repository: com.looker.droidify.entity.Repository, success: Boolean) {
if (success) {
productDao.deleteById(repository.id)
categoryDao.deleteById(repository.id)
productDao.insert(*(productTempDao.all))
categoryDao.insert(*(categoryTempDao.all))
repositoryDao.put(repository)
runInTransaction {
if (success) {
productDao.deleteById(repository.id)
categoryDao.deleteById(repository.id)
productDao.insert(*(productTempDao.all))
categoryDao.insert(*(categoryTempDao.all))
repositoryDao.put(repository)
}
productTempDao.emptyTable()
categoryTempDao.emptyTable()
}
productTempDao.emptyTable()
categoryTempDao.emptyTable()
}
}

View File

@ -16,7 +16,7 @@ class Repository {
var id: Long = 0
var enabled = 0
var deleted = 0
var deleted = false
@ColumnInfo(typeAffinity = ColumnInfo.BLOB)
var data: Repository? = null
@ -25,7 +25,7 @@ class Repository {
@ColumnInfo(name = "_id")
var id = 0L
var deleted = 0
var deleted = false
}
}
@ -64,12 +64,12 @@ open class Category {
class CategoryTemp : Category()
@Entity(tableName = "memory.installed")
class Installed {
class Installed(pName: String = "") {
@PrimaryKey
var package_name = ""
var package_name = pName
var version = ""
var version_code = 0
var version_code = 0L
var signature = ""
}
@ -78,7 +78,7 @@ class Lock {
@PrimaryKey
var package_name = ""
var version_code = 0
var version_code = 0L
}
object Converters {