mirror of
https://github.com/TeamNewPipe/NewPipe
synced 2025-11-07 10:43:48 +00:00
Extract export database logic into own class
- Separate it from the UI. - Add happy path unit test.
This commit is contained in:
@@ -30,19 +30,15 @@ import org.schabi.newpipe.report.UserAction;
|
||||
import org.schabi.newpipe.util.FilePickerActivityHelper;
|
||||
import org.schabi.newpipe.util.ZipHelper;
|
||||
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.zip.ZipFile;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
|
||||
|
||||
@@ -50,6 +46,8 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
|
||||
private static final int REQUEST_IMPORT_PATH = 8945;
|
||||
private static final int REQUEST_EXPORT_PATH = 30945;
|
||||
|
||||
private ContentSettingsManager manager;
|
||||
|
||||
private File databasesDir;
|
||||
private File newpipeDb;
|
||||
private File newpipeDbJournal;
|
||||
@@ -131,6 +129,8 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
|
||||
newpipeSettings = new File(homeDir + "/databases/newpipe.settings");
|
||||
newpipeSettings.delete();
|
||||
|
||||
manager = new ContentSettingsManager(homeDir);
|
||||
|
||||
addPreferencesFromResource(R.xml.content_settings);
|
||||
|
||||
final Preference importDataPreference = findPreference(getString(R.string.import_data));
|
||||
@@ -212,33 +212,16 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
|
||||
//checkpoint before export
|
||||
NewPipeDatabase.checkpoint();
|
||||
|
||||
try (ZipOutputStream outZip = new ZipOutputStream(new BufferedOutputStream(
|
||||
new FileOutputStream(path)))) {
|
||||
ZipHelper.addFileToZip(outZip, newpipeDb.getPath(), "newpipe.db");
|
||||
final SharedPreferences preferences = PreferenceManager
|
||||
.getDefaultSharedPreferences(requireContext());
|
||||
manager.exportDatabase(preferences, path);
|
||||
|
||||
saveSharedPreferencesToFile(newpipeSettings);
|
||||
ZipHelper.addFileToZip(outZip, newpipeSettings.getPath(),
|
||||
"newpipe.settings");
|
||||
}
|
||||
|
||||
Toast.makeText(getContext(), R.string.export_complete_toast, Toast.LENGTH_SHORT)
|
||||
.show();
|
||||
Toast.makeText(getContext(), R.string.export_complete_toast, Toast.LENGTH_SHORT).show();
|
||||
} catch (final Exception e) {
|
||||
onError(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void saveSharedPreferencesToFile(final File dst) {
|
||||
try (ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(dst))) {
|
||||
final SharedPreferences pref
|
||||
= PreferenceManager.getDefaultSharedPreferences(requireContext());
|
||||
output.writeObject(pref.getAll());
|
||||
output.flush();
|
||||
} catch (final IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void importDatabase(final String filePath) {
|
||||
// check if file is supported
|
||||
try (ZipFile zipFile = new ZipFile(filePath)) {
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package org.schabi.newpipe.settings
|
||||
|
||||
import android.content.SharedPreferences
|
||||
import org.schabi.newpipe.util.ZipHelper
|
||||
import java.io.BufferedOutputStream
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.io.IOException
|
||||
import java.io.ObjectOutputStream
|
||||
import java.lang.Exception
|
||||
import java.util.zip.ZipOutputStream
|
||||
|
||||
class ContentSettingsManager(
|
||||
private val newpipeDb: File,
|
||||
private val newpipeSettings: File
|
||||
) {
|
||||
|
||||
constructor(homeDir: String) : this(
|
||||
File("$homeDir/databases/newpipe.db"),
|
||||
File("$homeDir/databases/newpipe.settings")
|
||||
)
|
||||
|
||||
/**
|
||||
* Exports given [SharedPreferences] to the file in given outputPath.
|
||||
* It also creates the file.
|
||||
*/
|
||||
@Throws(Exception::class)
|
||||
fun exportDatabase(preferences: SharedPreferences, outputPath: String) {
|
||||
ZipOutputStream(BufferedOutputStream(FileOutputStream(outputPath)))
|
||||
.use { outZip ->
|
||||
ZipHelper.addFileToZip(outZip, newpipeDb.path, "newpipe.db")
|
||||
|
||||
try {
|
||||
ObjectOutputStream(FileOutputStream(newpipeSettings)).use { output ->
|
||||
output.writeObject(preferences.all)
|
||||
output.flush()
|
||||
}
|
||||
} catch (e: IOException) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
|
||||
ZipHelper.addFileToZip(outZip, newpipeSettings.path, "newpipe.settings")
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user