mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-08-02 12:03:24 +08:00
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:
@ -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(
|
||||||
|
@ -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,
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user