mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-29 18:38:36 +08:00
Migrate setting to be repo specific
Each attribute of the settings is prefixed with the "id" of the repo.
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,
|
||||||
id: "0",
|
id: DEFAULT_ID,
|
||||||
);
|
);
|
||||||
|
|
||||||
Widget app = ChangeNotifierProvider.value(
|
Widget app = ChangeNotifierProvider.value(
|
||||||
|
@ -10,6 +10,8 @@ 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';
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
|
const DEFAULT_ID = "0";
|
||||||
|
|
||||||
class Settings extends ChangeNotifier {
|
class Settings extends ChangeNotifier {
|
||||||
Settings(this.id);
|
Settings(this.id);
|
||||||
|
|
||||||
@ -40,7 +42,7 @@ class Settings extends ChangeNotifier {
|
|||||||
SettingsFolderViewType defaultView = SettingsFolderViewType.Default;
|
SettingsFolderViewType defaultView = SettingsFolderViewType.Default;
|
||||||
bool showNoteSummary = true;
|
bool showNoteSummary = true;
|
||||||
String folderViewHeaderType = "TitleGenerated";
|
String folderViewHeaderType = "TitleGenerated";
|
||||||
int version = 1;
|
int version = 2;
|
||||||
|
|
||||||
SettingsHomeScreen homeScreen = SettingsHomeScreen.Default;
|
SettingsHomeScreen homeScreen = SettingsHomeScreen.Default;
|
||||||
|
|
||||||
@ -69,78 +71,95 @@ class Settings extends ChangeNotifier {
|
|||||||
String sshPassword = "";
|
String sshPassword = "";
|
||||||
|
|
||||||
void load(SharedPreferences pref) {
|
void load(SharedPreferences pref) {
|
||||||
gitAuthor = pref.getString("gitAuthor") ?? gitAuthor;
|
gitAuthor = _getString(pref, "gitAuthor") ?? gitAuthor;
|
||||||
gitAuthorEmail = pref.getString("gitAuthorEmail") ?? gitAuthorEmail;
|
gitAuthorEmail = _getString(pref, "gitAuthorEmail") ?? gitAuthorEmail;
|
||||||
|
|
||||||
noteFileNameFormat = NoteFileNameFormat.fromInternalString(
|
noteFileNameFormat = NoteFileNameFormat.fromInternalString(
|
||||||
pref.getString("noteFileNameFormat"));
|
_getString(pref, "noteFileNameFormat"));
|
||||||
journalNoteFileNameFormat = NoteFileNameFormat.fromInternalString(
|
journalNoteFileNameFormat = NoteFileNameFormat.fromInternalString(
|
||||||
pref.getString("journalNoteFileNameFormat"));
|
_getString(pref, "journalNoteFileNameFormat"));
|
||||||
|
|
||||||
yamlModifiedKey = pref.getString("yamlModifiedKey") ?? yamlModifiedKey;
|
yamlModifiedKey = _getString(pref, "yamlModifiedKey") ?? yamlModifiedKey;
|
||||||
yamlCreatedKey = pref.getString("yamlCreatedKey") ?? yamlCreatedKey;
|
yamlCreatedKey = _getString(pref, "yamlCreatedKey") ?? yamlCreatedKey;
|
||||||
yamlTagsKey = pref.getString("yamlTagsKey") ?? yamlTagsKey;
|
yamlTagsKey = _getString(pref, "yamlTagsKey") ?? yamlTagsKey;
|
||||||
customMetaData = pref.getString("customMetaData") ?? customMetaData;
|
customMetaData = _getString(pref, "customMetaData") ?? customMetaData;
|
||||||
|
|
||||||
yamlHeaderEnabled = pref.getBool("yamlHeaderEnabled") ?? yamlHeaderEnabled;
|
yamlHeaderEnabled =
|
||||||
defaultNewNoteFolderSpec =
|
_getBool(pref, "yamlHeaderEnabled") ?? yamlHeaderEnabled;
|
||||||
pref.getString("defaultNewNoteFolderSpec") ?? defaultNewNoteFolderSpec;
|
defaultNewNoteFolderSpec = _getString(pref, "defaultNewNoteFolderSpec") ??
|
||||||
|
defaultNewNoteFolderSpec;
|
||||||
journalEditordefaultNewNoteFolderSpec =
|
journalEditordefaultNewNoteFolderSpec =
|
||||||
pref.getString("journalEditordefaultNewNoteFolderSpec") ??
|
_getString(pref, "journalEditordefaultNewNoteFolderSpec") ??
|
||||||
journalEditordefaultNewNoteFolderSpec;
|
journalEditordefaultNewNoteFolderSpec;
|
||||||
journalEditorSingleNote =
|
journalEditorSingleNote =
|
||||||
pref.getBool("journalEditorSingleNote") ?? journalEditorSingleNote;
|
_getBool(pref, "journalEditorSingleNote") ?? journalEditorSingleNote;
|
||||||
|
|
||||||
remoteSyncFrequency = RemoteSyncFrequency.fromInternalString(
|
remoteSyncFrequency = RemoteSyncFrequency.fromInternalString(
|
||||||
pref.getString("remoteSyncFrequency"));
|
_getString(pref, "remoteSyncFrequency"));
|
||||||
|
|
||||||
sortingField =
|
sortingField =
|
||||||
SortingField.fromInternalString(pref.getString("sortingField"));
|
SortingField.fromInternalString(_getString(pref, "sortingField"));
|
||||||
sortingOrder =
|
sortingOrder =
|
||||||
SortingOrder.fromInternalString(pref.getString("sortingOrder"));
|
SortingOrder.fromInternalString(_getString(pref, "sortingOrder"));
|
||||||
defaultEditor =
|
defaultEditor = SettingsEditorType.fromInternalString(
|
||||||
SettingsEditorType.fromInternalString(pref.getString("defaultEditor"));
|
_getString(pref, "defaultEditor"));
|
||||||
defaultView = SettingsFolderViewType.fromInternalString(
|
defaultView = SettingsFolderViewType.fromInternalString(
|
||||||
pref.getString("defaultView"));
|
_getString(pref, "defaultView"));
|
||||||
|
|
||||||
markdownDefaultView = SettingsMarkdownDefaultView.fromInternalString(
|
markdownDefaultView = SettingsMarkdownDefaultView.fromInternalString(
|
||||||
pref.getString("markdownDefaultView"));
|
_getString(pref, "markdownDefaultView"));
|
||||||
markdownLastUsedView = SettingsMarkdownDefaultView.fromInternalString(
|
markdownLastUsedView = SettingsMarkdownDefaultView.fromInternalString(
|
||||||
pref.getString("markdownLastUsedView"));
|
_getString(pref, "markdownLastUsedView"));
|
||||||
if (markdownLastUsedView == SettingsMarkdownDefaultView.LastUsed) {
|
if (markdownLastUsedView == SettingsMarkdownDefaultView.LastUsed) {
|
||||||
markdownLastUsedView = SettingsMarkdownDefaultView.Edit;
|
markdownLastUsedView = SettingsMarkdownDefaultView.Edit;
|
||||||
}
|
}
|
||||||
|
|
||||||
showNoteSummary = pref.getBool("showNoteSummary") ?? showNoteSummary;
|
showNoteSummary = _getBool(pref, "showNoteSummary") ?? showNoteSummary;
|
||||||
folderViewHeaderType =
|
folderViewHeaderType =
|
||||||
pref.getString("folderViewHeaderType") ?? folderViewHeaderType;
|
_getString(pref, "folderViewHeaderType") ?? folderViewHeaderType;
|
||||||
|
|
||||||
version = pref.getInt("settingsVersion") ?? version;
|
version = _getInt(pref, "settingsVersion") ?? version;
|
||||||
emojiParser = pref.getBool("emojiParser") ?? emojiParser;
|
emojiParser = _getBool(pref, "emojiParser") ?? emojiParser;
|
||||||
|
|
||||||
homeScreen =
|
homeScreen =
|
||||||
SettingsHomeScreen.fromInternalString(pref.getString("homeScreen"));
|
SettingsHomeScreen.fromInternalString(_getString(pref, "homeScreen"));
|
||||||
|
|
||||||
imageLocationSpec =
|
imageLocationSpec =
|
||||||
pref.getString("imageLocationSpec") ?? imageLocationSpec;
|
_getString(pref, "imageLocationSpec") ?? imageLocationSpec;
|
||||||
|
|
||||||
zenMode = pref.getBool("zenMode") ?? zenMode;
|
zenMode = _getBool(pref, "zenMode") ?? zenMode;
|
||||||
saveTitleInH1 = pref.getBool("saveTitleInH1") ?? saveTitleInH1;
|
saveTitleInH1 = _getBool(pref, "saveTitleInH1") ?? saveTitleInH1;
|
||||||
swipeToDelete = pref.getBool("swipeToDelete") ?? swipeToDelete;
|
swipeToDelete = _getBool(pref, "swipeToDelete") ?? swipeToDelete;
|
||||||
|
|
||||||
inlineTagPrefixes =
|
inlineTagPrefixes =
|
||||||
pref.getStringList("inlineTagPrefixes")?.toSet() ?? inlineTagPrefixes;
|
_getStringList(pref, "inlineTagPrefixes")?.toSet() ?? inlineTagPrefixes;
|
||||||
|
|
||||||
// From AppState
|
// From AppState
|
||||||
folderName = pref.getString("remoteGitRepoPath") ?? folderName;
|
folderName = _getString(pref, "remoteGitRepoPath") ?? folderName;
|
||||||
|
|
||||||
sshPublicKey = pref.getString("sshPublicKey") ?? sshPublicKey;
|
sshPublicKey = _getString(pref, "sshPublicKey") ?? sshPublicKey;
|
||||||
sshPrivateKey = pref.getString("sshPrivateKey") ?? sshPrivateKey;
|
sshPrivateKey = _getString(pref, "sshPrivateKey") ?? sshPrivateKey;
|
||||||
sshPassword = pref.getString("sshPassword") ?? sshPassword;
|
sshPassword = _getString(pref, "sshPassword") ?? sshPassword;
|
||||||
|
|
||||||
bottomMenuBar = pref.getBool("bottomMenuBar") ?? bottomMenuBar;
|
bottomMenuBar = _getBool(pref, "bottomMenuBar") ?? bottomMenuBar;
|
||||||
storeInternally = pref.getBool("storeInternally") ?? storeInternally;
|
storeInternally = _getBool(pref, "storeInternally") ?? storeInternally;
|
||||||
storageLocation = pref.getString("storageLocation") ?? "";
|
storageLocation = _getString(pref, "storageLocation") ?? "";
|
||||||
|
}
|
||||||
|
|
||||||
|
String _getString(SharedPreferences pref, String key) {
|
||||||
|
return pref.getString(id + '_' + key);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool _getBool(SharedPreferences pref, String key) {
|
||||||
|
return pref.getBool(id + '_' + key);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> _getStringList(SharedPreferences pref, String key) {
|
||||||
|
return pref.getStringList(id + '_' + key);
|
||||||
|
}
|
||||||
|
|
||||||
|
int _getInt(SharedPreferences pref, String key) {
|
||||||
|
return pref.getInt(id + '_' + key);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> save() async {
|
Future<void> save() async {
|
||||||
@ -238,6 +257,7 @@ class Settings extends ChangeNotifier {
|
|||||||
String value,
|
String value,
|
||||||
String defaultValue,
|
String defaultValue,
|
||||||
) async {
|
) async {
|
||||||
|
key = id + '_' + key;
|
||||||
if (value == defaultValue) {
|
if (value == defaultValue) {
|
||||||
await pref.remove(key);
|
await pref.remove(key);
|
||||||
} else {
|
} else {
|
||||||
@ -251,6 +271,7 @@ class Settings extends ChangeNotifier {
|
|||||||
bool value,
|
bool value,
|
||||||
bool defaultValue,
|
bool defaultValue,
|
||||||
) async {
|
) async {
|
||||||
|
key = id + '_' + key;
|
||||||
if (value == defaultValue) {
|
if (value == defaultValue) {
|
||||||
await pref.remove(key);
|
await pref.remove(key);
|
||||||
} else {
|
} else {
|
||||||
@ -264,6 +285,8 @@ class Settings extends ChangeNotifier {
|
|||||||
Set<String> value,
|
Set<String> value,
|
||||||
Set<String> defaultValue,
|
Set<String> defaultValue,
|
||||||
) async {
|
) async {
|
||||||
|
key = id + '_' + key;
|
||||||
|
|
||||||
final eq = const SetEquality().equals;
|
final eq = const SetEquality().equals;
|
||||||
|
|
||||||
if (eq(value, defaultValue)) {
|
if (eq(value, defaultValue)) {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:gitjournal/settings.dart';
|
||||||
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';
|
||||||
|
|
||||||
@ -9,10 +10,7 @@ Future<void> migrateSettings(
|
|||||||
SharedPreferences pref,
|
SharedPreferences pref,
|
||||||
String gitBaseDir,
|
String gitBaseDir,
|
||||||
) async {
|
) async {
|
||||||
var version = pref.getInt('settingsVersion') ?? '-1';
|
var version = pref.getInt('settingsVersion') ?? -1;
|
||||||
if (version == -1) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (version == 0) {
|
if (version == 0) {
|
||||||
Log.i("Migrating settings from v0 -> v1");
|
Log.i("Migrating settings from v0 -> v1");
|
||||||
@ -103,4 +101,78 @@ Future<void> migrateSettings(
|
|||||||
version = 1;
|
version = 1;
|
||||||
await pref.setInt("settingsVersion", version);
|
await pref.setInt("settingsVersion", version);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (version == 1) {
|
||||||
|
Log.i("Migrating settings from v1 -> v2");
|
||||||
|
var prefix = "${DEFAULT_ID}_";
|
||||||
|
|
||||||
|
var stringKeys = [
|
||||||
|
'gitAuthor',
|
||||||
|
'gitAuthorEmail',
|
||||||
|
'noteFileNameFormat',
|
||||||
|
'journalNoteFileNameFormat',
|
||||||
|
'yamlModifiedKey',
|
||||||
|
'yamlCreatedKey',
|
||||||
|
'yamlTagsKey',
|
||||||
|
'customMetaData',
|
||||||
|
'defaultNewNoteFolderSpec',
|
||||||
|
'journalEditordefaultNewNoteFolderSpec',
|
||||||
|
'remoteSyncFrequency',
|
||||||
|
'sortingField',
|
||||||
|
'sortingOrder',
|
||||||
|
'defaultEditor',
|
||||||
|
'defaultView',
|
||||||
|
'markdownDefaultView',
|
||||||
|
'markdownLastUsedView',
|
||||||
|
'folderViewHeaderType',
|
||||||
|
'homeScreen',
|
||||||
|
'imageLocationSpec',
|
||||||
|
'remoteGitRepoPath',
|
||||||
|
'sshPublicKey',
|
||||||
|
'sshPrivateKey',
|
||||||
|
'sshPassword',
|
||||||
|
'storageLocation',
|
||||||
|
];
|
||||||
|
for (var key in stringKeys) {
|
||||||
|
var value = pref.getString(key);
|
||||||
|
if (value != null) {
|
||||||
|
await pref.remove(key);
|
||||||
|
await pref.setString(prefix + key, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var boolKeys = [
|
||||||
|
'yamlHeaderEnabled',
|
||||||
|
'journalEditorSingleNote',
|
||||||
|
'showNoteSummary',
|
||||||
|
'emojiParser',
|
||||||
|
'zenMode',
|
||||||
|
'saveTitleInH1',
|
||||||
|
'swipeToDelete',
|
||||||
|
'bottomMenuBar',
|
||||||
|
'storeInternally',
|
||||||
|
];
|
||||||
|
for (var key in boolKeys) {
|
||||||
|
var value = pref.getBool(key);
|
||||||
|
if (value != null) {
|
||||||
|
await pref.remove(key);
|
||||||
|
await pref.setBool(prefix + key, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var stringListKeys = [
|
||||||
|
'inlineTagPrefixes',
|
||||||
|
];
|
||||||
|
for (var key in stringListKeys) {
|
||||||
|
var value = pref.getStringList(key);
|
||||||
|
if (value != null) {
|
||||||
|
await pref.remove(key);
|
||||||
|
await pref.setStringList(prefix + key, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
version = 2;
|
||||||
|
await pref.remove("settingsVersion");
|
||||||
|
await pref.setInt(prefix + "settingsVersion", version);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user