diff --git a/app/src/main/java/com/hippo/ehviewer/EhDB.kt b/app/src/main/java/com/hippo/ehviewer/EhDB.kt index f53003b08..17f60621e 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhDB.kt +++ b/app/src/main/java/com/hippo/ehviewer/EhDB.kt @@ -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) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.kt b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.kt index e1ae0d3c0..3c0a4e0f4 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.kt @@ -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, ) }