Migrate to SQLite Driver APIs
This commit is contained in:
1 parent
71291b8800
commit
99696b11db
7 files changed
+41
-18
No files matched your search
@@ -39,6 +39,7 @@ import coil3.request.crossfade
|
||||
import coil3.serviceLoaderEnabled
|
||||
import coil3.util.DebugLogger
|
||||
import com.ehviewer.core.database.SearchDatabase
|
||||
import com.ehviewer.core.database.roomDb
|
||||
import com.ehviewer.core.files.deleteContent
|
||||
import com.ehviewer.core.ui.util.initSETConnection
|
||||
import com.ehviewer.core.util.isAtLeastO
|
||||
@@ -83,7 +84,6 @@ import logcat.LogPriority
|
||||
import logcat.LogcatLogger
|
||||
import logcat.asLog
|
||||
import okio.Path.Companion.toOkioPath
|
||||
import splitties.arch.room.roomDb
|
||||
import splitties.init.appCtx
|
||||
|
||||
private val lifecycle = ProcessLifecycleOwner.get().lifecycle
|
||||
|
||||
@@ -15,13 +15,12 @@
|
||||
*/
|
||||
package com.hippo.ehviewer
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import arrow.fx.coroutines.resource
|
||||
import arrow.fx.coroutines.resourceScope
|
||||
import com.ehviewer.core.data.model.asEntity
|
||||
import com.ehviewer.core.database.EhDatabase
|
||||
import com.ehviewer.core.database.Schema17to18
|
||||
import com.ehviewer.core.database.getDatabasePath
|
||||
import com.ehviewer.core.database.model.DownloadArtist
|
||||
import com.ehviewer.core.database.model.DownloadDirname
|
||||
import com.ehviewer.core.database.model.DownloadInfo
|
||||
@@ -32,13 +31,13 @@ import com.ehviewer.core.database.model.HistoryInfo
|
||||
import com.ehviewer.core.database.model.LocalFavoriteInfo
|
||||
import com.ehviewer.core.database.model.ProgressInfo
|
||||
import com.ehviewer.core.database.model.QuickSearch
|
||||
import com.ehviewer.core.database.roomDb
|
||||
import com.ehviewer.core.files.delete
|
||||
import com.ehviewer.core.files.sendTo
|
||||
import com.ehviewer.core.model.GalleryInfo
|
||||
import com.hippo.ehviewer.download.DownloadManager
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import okio.Path
|
||||
import okio.Path.Companion.toOkioPath
|
||||
import splitties.arch.room.roomDb
|
||||
|
||||
object EhDB {
|
||||
private const val DB_NAME = "eh.db"
|
||||
@@ -277,23 +276,23 @@ object EhDB {
|
||||
db.filterDao().update(filter)
|
||||
}
|
||||
|
||||
fun exportDB(context: Context, file: Path) {
|
||||
fun exportDB(file: Path) {
|
||||
db.query("PRAGMA wal_checkpoint(FULL)", null).use { it.moveToNext() }
|
||||
val dbFile = context.getDatabasePath(DB_NAME)
|
||||
dbFile.toOkioPath() sendTo file
|
||||
val dbFile = getDatabasePath(DB_NAME)
|
||||
dbFile sendTo file
|
||||
}
|
||||
|
||||
suspend fun importDB(context: Context, uri: Uri) = resourceScope {
|
||||
suspend fun importDB(file: Path) = resourceScope {
|
||||
val tempDBName = "tmp.db"
|
||||
val dbFile = getDatabasePath(tempDBName)
|
||||
file sendTo dbFile
|
||||
val oldDB = resource {
|
||||
context.deleteDatabase(tempDBName)
|
||||
roomDb<EhDatabase>(tempDBName) {
|
||||
createFromInputStream { context.contentResolver.openInputStream(uri) }
|
||||
addMigrations(Schema17to18())
|
||||
}
|
||||
} release { db ->
|
||||
db.close()
|
||||
context.deleteDatabase(tempDBName)
|
||||
dbFile.delete()
|
||||
}
|
||||
|
||||
db.galleryDao().insertOrIgnore(oldDB.galleryDao().list())
|
||||
|
||||
@@ -123,7 +123,7 @@ fun AnimatedVisibilityScope.AboutScreen(navigator: DestinationsNavigator) = Scre
|
||||
}
|
||||
}
|
||||
|
||||
context(ctx: Context, _: DialogState)
|
||||
context(_: Context, _: DialogState)
|
||||
suspend fun showNewVersion(release: Release) {
|
||||
awaitConfirmationOrCancel(
|
||||
confirmText = R.string.download,
|
||||
@@ -140,7 +140,7 @@ suspend fun showNewVersion(release: Release) {
|
||||
}
|
||||
if (Settings.backupBeforeUpdate.value) {
|
||||
val time = ReadableTime.getFilenamableTime()
|
||||
EhDB.exportDB(ctx, (downloadLocation / "$time.db"))
|
||||
EhDB.exportDB(downloadLocation / "$time.db")
|
||||
}
|
||||
// TODO: Download in the background and show progress in notification
|
||||
val path = AppConfig.tempDir / "update.apk"
|
||||
|
||||
@@ -96,13 +96,13 @@ private fun dumplog(uri: Uri): Unit = with(ctx) {
|
||||
context(ctx: Context)
|
||||
private fun exportDatabase(uri: Uri) {
|
||||
ctx.grantUriPermission(BuildConfig.APPLICATION_ID, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||
EhDB.exportDB(ctx, uri.toOkioPath())
|
||||
EhDB.exportDB(uri.toOkioPath())
|
||||
}
|
||||
|
||||
context(ctx: Context)
|
||||
private suspend fun importDatabase(uri: Uri) {
|
||||
ctx.grantUriPermission(BuildConfig.APPLICATION_ID, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||
EhDB.importDB(ctx, uri)
|
||||
EhDB.importDB(uri.toOkioPath())
|
||||
}
|
||||
|
||||
@Destination<RootGraph>
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.ehviewer.core.database
|
||||
|
||||
import androidx.room.Room
|
||||
import androidx.room.RoomDatabase
|
||||
import androidx.sqlite.driver.AndroidSQLiteDriver
|
||||
import okio.Path.Companion.toOkioPath
|
||||
import splitties.init.appCtx
|
||||
|
||||
actual inline fun <reified T : RoomDatabase> roomDb(
|
||||
name: String,
|
||||
builder: RoomDatabase.Builder<T>.() -> Unit,
|
||||
) = Room.databaseBuilder<T>(appCtx, name).setDriver(AndroidSQLiteDriver()).apply(builder).build()
|
||||
|
||||
actual fun getDatabasePath(name: String) = appCtx.getDatabasePath(name).toOkioPath()
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.ehviewer.core.database
|
||||
|
||||
import androidx.room.RoomDatabase
|
||||
import okio.Path
|
||||
|
||||
expect inline fun <reified T : RoomDatabase> roomDb(
|
||||
name: String,
|
||||
builder: RoomDatabase.Builder<T>.() -> Unit = {},
|
||||
): T
|
||||
|
||||
expect fun getDatabasePath(name: String): Path
|
||||
@@ -118,7 +118,6 @@ serialization-xml = { module = "io.github.pdvrieze.xmlutil:serialization", versi
|
||||
serialization-xml-io = { module = "io.github.pdvrieze.xmlutil:serialization-io", version.ref = "xmlutil" }
|
||||
|
||||
splitties-appctx = { module = "com.louiscad.splitties:splitties-appctx", version.ref = "splitties" }
|
||||
splitties-arch-room = { module = "com.louiscad.splitties:splitties-arch-room", version.ref = "splitties" }
|
||||
splitties-systemservices = { module = "com.louiscad.splitties:splitties-systemservices", version.ref = "splitties" }
|
||||
|
||||
telephoto-zoomable = { module = "me.saket.telephoto:zoomable", version.ref = "telephoto" }
|
||||
@@ -136,7 +135,7 @@ spotless-gradlePlugin = { module = "com.diffplug.spotless:spotless-plugin-gradle
|
||||
arrow = ["arrow-fx-coroutines", "arrow-functions", "arrow-resilience"]
|
||||
coil = ["coil-compose", "coil-gif", "coil-network"]
|
||||
kotlinx-serialization = ["serialization-cbor", "serialization-json", "serialization-json-io", "serialization-xml", "serialization-xml-io"]
|
||||
splitties = ["splitties-appctx", "splitties-arch-room", "splitties-systemservices"]
|
||||
splitties = ["splitties-appctx", "splitties-systemservices"]
|
||||
|
||||
[plugins]
|
||||
aboutlibraries = { id = "com.mikepenz.aboutlibraries.plugin", version.ref = "aboutlibraries" }
|
||||
|
||||
Reference in new issue
Block a user