From cf4b5e17c510c0b4f3b8ad7a1c2ccbdd4f85f2f5 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 031f0d36c..e794ace72 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/BackupRestoreSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/BackupRestoreSettingsFragment.java @@ -57,9 +57,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 0ce2d5f4d..38227e10e 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" @Deprecated( @@ -17,9 +18,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 6b0eb7eb9..cbf860d2c 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 @@ -12,7 +12,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 class ImportExportManager(private val fileLocator: BackupFileLocator) { @@ -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 f362963db..6f6ba671e 100644 --- a/app/src/test/java/org/schabi/newpipe/settings/ImportExportManagerTest.kt +++ b/app/src/test/java/org/schabi/newpipe/settings/ImportExportManagerTest.kt @@ -25,11 +25,12 @@ import org.schabi.newpipe.streams.io.StoredFileHelper import us.shandian.giga.io.FileStream 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