diff --git a/app/src/main/kotlin/com/hippo/ehviewer/EhDB.kt b/app/src/main/kotlin/com/hippo/ehviewer/EhDB.kt index c181a854c..122ec85ed 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/EhDB.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/EhDB.kt @@ -15,6 +15,8 @@ */ package com.hippo.ehviewer +import androidx.room.execSQL +import androidx.room.useWriterConnection import arrow.fx.coroutines.resource import arrow.fx.coroutines.resourceScope import com.ehviewer.core.data.model.asEntity @@ -276,8 +278,11 @@ object EhDB { db.filterDao().update(filter) } - fun exportDB(file: Path) { - db.query("PRAGMA wal_checkpoint(FULL)", null).use { it.moveToNext() } + suspend fun exportDB(file: Path) { + db.useWriterConnection { conn -> + conn.execSQL("PRAGMA wal_checkpoint(FULL)") + conn.execSQL("VACUUM") + } val dbFile = getDatabasePath(DB_NAME) dbFile sendTo file } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt index 7f1c51934..5cf1f7736 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt @@ -94,7 +94,7 @@ private fun dumplog(uri: Uri): Unit = with(ctx) { } context(ctx: Context) -private fun exportDatabase(uri: Uri) { +private suspend fun exportDatabase(uri: Uri) { ctx.grantUriPermission(BuildConfig.APPLICATION_ID, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION) EhDB.exportDB(uri.toOkioPath()) }