Make Setting Migrations independent of the Settings class

That class is going to lose many of its members, and I don't want to
keep the old ones just for compatibility sake.

Also give each setting the concept on an id - will be used later.
This commit is contained in:
Vishesh Handa
2020-10-23 14:37:31 +02:00
parent c9673da721
commit a9abf5d9b3
4 changed files with 41 additions and 27 deletions

View File

@ -44,7 +44,7 @@ class JournalApp extends StatefulWidget {
gitBaseDir: gitBaseDirectory, gitBaseDir: gitBaseDirectory,
cacheDir: cacheDir, cacheDir: cacheDir,
pref: pref, pref: pref,
name: "journal", id: "0",
); );
Widget app = ChangeNotifierProvider.value( Widget app = ChangeNotifierProvider.value(

View File

@ -37,7 +37,7 @@ class Repository with ChangeNotifier {
final String gitBaseDirectory; final String gitBaseDirectory;
final String cacheDir; final String cacheDir;
final String name; final String id;
GitNoteRepository _gitRepo; GitNoteRepository _gitRepo;
NotesCache _notesCache; NotesCache _notesCache;
@ -59,12 +59,12 @@ class Repository with ChangeNotifier {
@required String gitBaseDir, @required String gitBaseDir,
@required String cacheDir, @required String cacheDir,
@required SharedPreferences pref, @required SharedPreferences pref,
@required String name, @required String id,
}) async { }) async {
var settings = Settings(name); await migrateSettings(pref, gitBaseDir);
settings.load(pref);
await migrateSettings(settings, pref, gitBaseDir); var settings = Settings(id);
settings.load(pref);
logEvent(Event.Settings, parameters: settings.toLoggableMap()); logEvent(Event.Settings, parameters: settings.toLoggableMap());
@ -88,9 +88,7 @@ class Repository with ChangeNotifier {
var remoteConfigured = false; var remoteConfigured = false;
if (repoDirStat.type != FileSystemEntityType.directory) { if (repoDirStat.type != FileSystemEntityType.directory) {
settings.folderName = name; Log.i("Calling GitInit for ${settings.folderName} at: $repoPath");
Log.i("Calling GitInit for $name at: $repoPath");
await GitRepository.init(repoPath); await GitRepository.init(repoPath);
settings.save(); settings.save();
@ -106,12 +104,12 @@ class Repository with ChangeNotifier {
cacheDir: cacheDir, cacheDir: cacheDir,
remoteGitRepoConfigured: remoteConfigured, remoteGitRepoConfigured: remoteConfigured,
settings: settings, settings: settings,
name: name, id: id,
); );
} }
Repository._internal({ Repository._internal({
@required this.name, @required this.id,
@required this.repoPath, @required this.repoPath,
@required this.gitBaseDirectory, @required this.gitBaseDirectory,
@required this.cacheDir, @required this.cacheDir,

View File

@ -8,11 +8,14 @@ import 'package:shared_preferences/shared_preferences.dart';
import 'package:gitjournal/core/sorting_mode.dart'; import 'package:gitjournal/core/sorting_mode.dart';
import 'package:gitjournal/folder_views/common.dart'; import 'package:gitjournal/folder_views/common.dart';
import 'package:gitjournal/screens/note_editor.dart'; import 'package:gitjournal/screens/note_editor.dart';
import 'package:uuid/uuid.dart';
class Settings extends ChangeNotifier { class Settings extends ChangeNotifier {
Settings(this.folderName); Settings(this.id);
String folderName; final String id;
String folderName = "journal";
// Properties // Properties
String gitAuthor = "GitJournal"; String gitAuthor = "GitJournal";
@ -142,7 +145,7 @@ class Settings extends ChangeNotifier {
Future<void> save() async { Future<void> save() async {
var pref = await SharedPreferences.getInstance(); var pref = await SharedPreferences.getInstance();
var defaultSet = Settings(folderName); var defaultSet = Settings(id);
_setString(pref, "gitAuthor", gitAuthor, defaultSet.gitAuthor); _setString(pref, "gitAuthor", gitAuthor, defaultSet.gitAuthor);
_setString( _setString(
@ -709,3 +712,7 @@ class SettingsHomeScreen {
return ""; return "";
} }
} }
String generateRandomId() {
return Uuid().v4().substring(0, 8);
}

View File

@ -3,15 +3,18 @@ import 'dart:io';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:gitjournal/settings.dart';
import 'package:gitjournal/utils/logger.dart'; import 'package:gitjournal/utils/logger.dart';
Future<void> migrateSettings( Future<void> migrateSettings(
Settings settings,
SharedPreferences pref, SharedPreferences pref,
String gitBaseDir, String gitBaseDir,
) async { ) async {
if (settings.version == 0) { var version = pref.getInt('settingsVersion') ?? '-1';
if (version == -1) {
return;
}
if (version == 0) {
Log.i("Migrating settings from v0 -> v1"); Log.i("Migrating settings from v0 -> v1");
var cache = p.join(gitBaseDir, "cache.json"); var cache = p.join(gitBaseDir, "cache.json");
if (File(cache).existsSync()) { if (File(cache).existsSync()) {
@ -29,9 +32,9 @@ Future<void> migrateSettings(
var newName = p.join(gitBaseDir, "journal"); var newName = p.join(gitBaseDir, "journal");
await Directory(oldName).rename(newName); await Directory(oldName).rename(newName);
settings.folderName = "journal"; var folderName = "journal";
pref.setString('remoteGitRepoPath', settings.folderName); await pref.setString('remoteGitRepoPath', folderName);
} }
var oldDir = Directory(p.join(gitBaseDir, '../files')); var oldDir = Directory(p.join(gitBaseDir, '../files'));
@ -67,9 +70,12 @@ Future<void> migrateSettings(
var publicKeyExists = File(sshPublicKeyPath).existsSync(); var publicKeyExists = File(sshPublicKeyPath).existsSync();
var privateKeyExists = File(sshPrivateKeyPath).existsSync(); var privateKeyExists = File(sshPrivateKeyPath).existsSync();
if (publicKeyExists && privateKeyExists) { if (publicKeyExists && privateKeyExists) {
settings.sshPublicKey = await File(sshPublicKeyPath).readAsString(); var sshPublicKey = await File(sshPublicKeyPath).readAsString();
settings.sshPrivateKey = await File(sshPrivateKeyPath).readAsString(); var sshPrivateKey = await File(sshPrivateKeyPath).readAsString();
settings.sshPassword = "";
await pref.setString("sshPublicKey", sshPublicKey);
await pref.setString("sshPrivateKey", sshPrivateKey);
await pref.setString("sshPassword", "");
} }
await oldSshDir.delete(recursive: true); await oldSshDir.delete(recursive: true);
@ -83,15 +89,18 @@ Future<void> migrateSettings(
var publicKeyExists = File(sshPublicKeyPath).existsSync(); var publicKeyExists = File(sshPublicKeyPath).existsSync();
var privateKeyExists = File(sshPrivateKeyPath).existsSync(); var privateKeyExists = File(sshPrivateKeyPath).existsSync();
if (publicKeyExists && privateKeyExists) { if (publicKeyExists && privateKeyExists) {
settings.sshPublicKey = await File(sshPublicKeyPath).readAsString(); var sshPublicKey = await File(sshPublicKeyPath).readAsString();
settings.sshPrivateKey = await File(sshPrivateKeyPath).readAsString(); var sshPrivateKey = await File(sshPrivateKeyPath).readAsString();
settings.sshPassword = "";
await pref.setString("sshPublicKey", sshPublicKey);
await pref.setString("sshPrivateKey", sshPrivateKey);
await pref.setString("sshPassword", "");
} }
await newSshDir.delete(recursive: true); await newSshDir.delete(recursive: true);
} }
settings.version = 1; version = 1;
pref.setInt("settingsVersion", settings.version); await pref.setInt("settingsVersion", version);
} }
} }