From a7a66c2b55eb8382e543f92711712d5e22a34f4a Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Fri, 14 Jul 2023 16:28:13 +0300 Subject: [PATCH] multiplatform: adjusted database export path (#2698) --- .../kotlin/chat/simplex/common/platform/Files.android.kt | 2 ++ .../commonMain/kotlin/chat/simplex/common/platform/Files.kt | 6 ++++++ .../chat/simplex/common/views/database/DatabaseView.kt | 6 +++--- .../kotlin/chat/simplex/common/platform/Files.desktop.kt | 2 ++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/Files.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/Files.android.kt index f809b82ca..c044e0ad8 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/Files.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/Files.android.kt @@ -21,6 +21,8 @@ actual val dbAbsolutePrefixPath: String = dataDir.absolutePath + File.separator actual val chatDatabaseFileName: String = "files_chat.db" actual val agentDatabaseFileName: String = "files_agent.db" +actual val databaseExportDir: File = androidAppContext.cacheDir + @Composable actual fun rememberFileChooserLauncher(getContent: Boolean, onResult: (URI?) -> Unit): FileChooserLauncher { val launcher = rememberLauncherForActivityResult( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Files.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Files.kt index f7e40d7f1..ccaeef416 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Files.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Files.kt @@ -17,6 +17,12 @@ expect val dbAbsolutePrefixPath: String expect val chatDatabaseFileName: String expect val agentDatabaseFileName: String +/** +* This is used only for temporary storing db archive for export. +* Providing [tmpDir] instead crashes the app. Check db export before moving from this path to something else +* */ +expect val databaseExportDir: File + fun copyFileToFile(from: File, to: URI, finally: () -> Unit) { try { to.outputStream().use { stream -> diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt index fb41c0830..277d3ebe6 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt @@ -476,7 +476,7 @@ private suspend fun exportChatArchive( val ts = SimpleDateFormat("yyyy-MM-dd'T'HHmmss", Locale.US).format(Date.from(archiveTime.toJavaInstant())) val archiveName = "simplex-chat.$ts.zip" val archivePath = "${filesDir.absolutePath}${File.separator}$archiveName" - val config = ArchiveConfig(archivePath, parentTempDirectory = tmpDir.toString()) + val config = ArchiveConfig(archivePath, parentTempDirectory = databaseExportDir.toString()) m.controller.apiExportArchive(config) deleteOldArchive(m) m.controller.appPrefs.chatArchiveName.set(archiveName) @@ -529,7 +529,7 @@ private fun importArchive( try { m.controller.apiDeleteStorage() try { - val config = ArchiveConfig(archivePath, parentTempDirectory = tmpDir.toString()) + val config = ArchiveConfig(archivePath, parentTempDirectory = databaseExportDir.toString()) val archiveErrors = m.controller.apiImportArchive(config) DatabaseUtils.ksDatabasePassword.remove() appFilesCountAndSize.value = directoryFileCountAndSize(appFilesDir.absolutePath) @@ -563,7 +563,7 @@ private fun saveArchiveFromURI(importedArchiveURI: URI): String? { val inputStream = importedArchiveURI.inputStream() val archiveName = getFileName(importedArchiveURI) if (inputStream != null && archiveName != null) { - val archivePath = "$tmpDir${File.separator}$archiveName" + val archivePath = "$databaseExportDir${File.separator}$archiveName" val destFile = File(archivePath) Files.copy(inputStream, destFile.toPath()) archivePath diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Files.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Files.desktop.kt index 657d683e7..9792f5772 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Files.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Files.desktop.kt @@ -25,6 +25,8 @@ actual val dbAbsolutePrefixPath: String = dataDir.absolutePath + File.separator actual val chatDatabaseFileName: String = "simplex_v1_chat.db" actual val agentDatabaseFileName: String = "simplex_v1_agent.db" +actual val databaseExportDir: File = tmpDir + @Composable actual fun rememberFileChooserLauncher(getContent: Boolean, onResult: (URI?) -> Unit): FileChooserLauncher = remember { FileChooserLauncher(getContent, onResult) }