From 5f1a270ca4040284857cfb5985ca38b0a616eebd Mon Sep 17 00:00:00 2001 From: Isira Seneviratne Date: Mon, 25 Aug 2025 14:32:19 +0530 Subject: [PATCH] Fix database import --- .../BackupRestoreSettingsFragment.java | 4 +--- .../settings/export/BackupFileLocator.kt | 12 ++++++------ .../settings/export/ImportExportManager.kt | 4 ++-- .../settings/ImportExportManagerTest.kt | 19 ++++++++++--------- 4 files changed, 19 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/settings/BackupRestoreSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/BackupRestoreSettingsFragment.java index e84248093..11c4daede 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/BackupRestoreSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/BackupRestoreSettingsFragment.java @@ -67,9 +67,7 @@ public class BackupRestoreSettingsFragment extends BasePreferenceFragment { @Override public void onCreatePreferences(@Nullable final Bundle savedInstanceState, @Nullable final String rootKey) { - final var dbDir = requireContext().getDatabasePath(BackupFileLocator.FILE_NAME_DB).toPath() - .getParent(); - manager = new ImportExportManager(new BackupFileLocator(dbDir)); + manager = new ImportExportManager(new BackupFileLocator(requireContext())); importExportDataPathKey = getString(R.string.import_export_data_path); diff --git a/app/src/main/java/org/schabi/newpipe/settings/export/BackupFileLocator.kt b/app/src/main/java/org/schabi/newpipe/settings/export/BackupFileLocator.kt index aaa28b810..97a7e642f 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/export/BackupFileLocator.kt +++ b/app/src/main/java/org/schabi/newpipe/settings/export/BackupFileLocator.kt @@ -1,12 +1,13 @@ package org.schabi.newpipe.settings.export +import android.content.Context import java.nio.file.Path import kotlin.io.path.div /** * Locates specific files of NewPipe based on the home directory of the app. */ -class BackupFileLocator(homeDir: Path) { +class BackupFileLocator(context: Context) { companion object { const val FILE_NAME_DB = "newpipe.db" @@ -18,9 +19,8 @@ class BackupFileLocator(homeDir: Path) { const val FILE_NAME_JSON_PREFS = "preferences.json" } - val dbDir = homeDir / "databases" - val db = homeDir / FILE_NAME_DB - val dbJournal = homeDir / "$FILE_NAME_DB-journal" - val dbShm = dbDir / "$FILE_NAME_DB-shm" - val dbWal = dbDir / "$FILE_NAME_DB-wal" + val db: Path = context.getDatabasePath(FILE_NAME_DB).toPath() + val dbJournal: Path = db.resolveSibling("$FILE_NAME_DB-journal") + val dbShm: Path = db.resolveSibling("$FILE_NAME_DB-shm") + val dbWal: Path = db.resolveSibling("$FILE_NAME_DB-wal") } diff --git a/app/src/main/java/org/schabi/newpipe/settings/export/ImportExportManager.kt b/app/src/main/java/org/schabi/newpipe/settings/export/ImportExportManager.kt index d33779fbf..b5ab72f51 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/export/ImportExportManager.kt +++ b/app/src/main/java/org/schabi/newpipe/settings/export/ImportExportManager.kt @@ -9,7 +9,7 @@ import java.io.FileNotFoundException import java.io.IOException import java.io.ObjectOutputStream import java.util.zip.ZipOutputStream -import kotlin.io.path.createDirectories +import kotlin.io.path.createParentDirectories import kotlin.io.path.deleteIfExists import org.schabi.newpipe.streams.io.SharpOutputStream import org.schabi.newpipe.streams.io.StoredFileHelper @@ -63,7 +63,7 @@ class ImportExportManager(private val fileLocator: BackupFileLocator) { */ @Throws(IOException::class) fun ensureDbDirectoryExists() { - fileLocator.dbDir.createDirectories() + fileLocator.db.createParentDirectories() } /** diff --git a/app/src/test/java/org/schabi/newpipe/settings/ImportExportManagerTest.kt b/app/src/test/java/org/schabi/newpipe/settings/ImportExportManagerTest.kt index 7b09c67f0..482b38237 100644 --- a/app/src/test/java/org/schabi/newpipe/settings/ImportExportManagerTest.kt +++ b/app/src/test/java/org/schabi/newpipe/settings/ImportExportManagerTest.kt @@ -4,11 +4,12 @@ import android.content.SharedPreferences import com.grack.nanojson.JsonParser import java.io.File import java.io.ObjectInputStream +import java.nio.file.Paths import java.util.zip.ZipFile -import kotlin.io.path.Path import kotlin.io.path.createTempDirectory import kotlin.io.path.createTempFile import kotlin.io.path.deleteIfExists +import kotlin.io.path.div import kotlin.io.path.exists import kotlin.io.path.fileSize import kotlin.io.path.inputStream @@ -52,7 +53,7 @@ class ImportExportManagerTest { @Test fun `The settings must be exported successfully in the correct format`() { - val db = Path(classloader.getResource("settings/newpipe.db")!!.file) + val db = Paths.get(classloader.getResource("settings/newpipe.db")!!.toURI()) `when`(fileLocator.db).thenReturn(db) val expectedPreferences = mapOf("such pref" to "much wow") @@ -87,21 +88,21 @@ class ImportExportManagerTest { @Test fun `Ensuring db directory existence must work`() { - val dir = createTempDirectory("newpipe_") - Assume.assumeTrue(dir.deleteIfExists()) - `when`(fileLocator.dbDir).thenReturn(dir) + val path = createTempDirectory("newpipe_") / BackupFileLocator.FILE_NAME_DB + Assume.assumeTrue(path.parent.deleteIfExists()) + `when`(fileLocator.db).thenReturn(path) ImportExportManager(fileLocator).ensureDbDirectoryExists() - assertTrue(dir.exists()) + assertTrue(path.parent.exists()) } @Test fun `Ensuring db directory existence must work when the directory already exists`() { - val dir = createTempDirectory("newpipe_") - `when`(fileLocator.dbDir).thenReturn(dir) + val path = createTempDirectory("newpipe_") / BackupFileLocator.FILE_NAME_DB + `when`(fileLocator.db).thenReturn(path) ImportExportManager(fileLocator).ensureDbDirectoryExists() - assertTrue(dir.exists()) + assertTrue(path.parent.exists()) } @Test