Refactor db export with resourceDSL

This commit is contained in:
tarsin committed 2023-05-26 17:15:11 +08:00
1 parent 90ed83efd5
commit 3a004c41f8
2 files changed
+14 -19

No files matched your search

+7 -9
View File
@@ -38,7 +38,6 @@ import com.hippo.ehviewer.download.DownloadManager
import com.hippo.ehviewer.util.sendTo
object EhDB {
private const val CUR_DB_VER = 4
private val db = ehDatabase
// Fix state
@@ -366,12 +365,15 @@ object EhDB {
for (item in list) to.insert(item)
}
@Synchronized
fun exportDB(context: Context, uri: Uri): Boolean {
suspend fun exportDB(context: Context, uri: Uri) {
val ehExportName = "eh.export.db"
runCatching {
resource {
context.deleteDatabase(ehExportName)
val newDb = databaseBuilder(context, EhDatabase::class.java, ehExportName).build()
databaseBuilder(context, EhDatabase::class.java, ehExportName).build()
} release {
it.close()
context.deleteDatabase(ehExportName)
} use { newDb ->
copyDao(db.downloadsDao(), newDb.downloadsDao())
copyDao(db.downloadLabelDao(), newDb.downloadLabelDao())
copyDao(db.downloadDirnameDao(), newDb.downloadDirnameDao())
@@ -386,11 +388,7 @@ object EhDB {
fromFd sendTo toFd
}
}
return true
}.onFailure {
it.printStackTrace()
}
return false
}
suspend fun importDB(context: Context, uri: Uri) {
@@ -30,7 +30,6 @@ import androidx.preference.Preference
import com.hippo.ehviewer.AppConfig
import com.hippo.ehviewer.BuildConfig
import com.hippo.ehviewer.EhDB
import com.hippo.ehviewer.GetText
import com.hippo.ehviewer.R
import com.hippo.ehviewer.client.EhEngine
import com.hippo.ehviewer.client.data.FavListUrlBuilder
@@ -75,20 +74,18 @@ class AdvancedFragment : BasePreferenceFragment() {
.setView(R.layout.preference_dialog_task)
.show()
lifecycleScope.launchIO {
val success = EhDB.exportDB(requireActivity(), uri)
val e = runSuspendCatching {
EhDB.exportDB(requireActivity(), uri)
}.exceptionOrNull()?.run {
printStackTrace()
getString(R.string.settings_advanced_export_data_failed)
}
withUIContext {
if (alertDialog.isShowing) {
alertDialog.dismiss()
}
showTip(
if (success) {
GetText.getString(
R.string.settings_advanced_export_data_to,
uri.toString(),
)
} else {
GetText.getString(R.string.settings_advanced_export_data_failed)
},
e ?: getString(R.string.settings_advanced_export_data_to, uri.toString()),
BaseScene.LENGTH_SHORT,
)
}