Add FileName option in Note title settings

This doesn't do anything right now. It just shows the option.
This commit is contained in:
Vishesh Handa
2021-02-12 15:32:10 +01:00
parent 57f25ae671
commit b7e274c937
9 changed files with 105 additions and 43 deletions

View File

@ -64,6 +64,7 @@ settings:
title: Title
fromH1: Text Header 1
fromYaml: From YAML 'title'
filename: FileName
exampleTitle: Pigeons
exampleBody: I think they might be evil. Even more evil than penguins.
exampleTag1: Birds

View File

@ -4,6 +4,7 @@ import 'package:flutter_emoji/flutter_emoji.dart';
import 'package:yaml/yaml.dart';
import 'package:gitjournal/core/notes_folder.dart';
import 'package:gitjournal/settings.dart';
import 'package:gitjournal/utils/datetime.dart';
import 'package:gitjournal/utils/logger.dart';
import 'md_yaml_doc.dart';
@ -26,7 +27,7 @@ class NoteSerializationSettings {
bool tagsInString = false;
bool tagsHaveHash = false;
bool saveTitleAsH1 = true;
SettingsTitle titleSettings = SettingsTitle.Default;
}
class NoteSerializer implements NoteSerializerInterface {
@ -36,7 +37,7 @@ class NoteSerializer implements NoteSerializerInterface {
settings.modifiedKey = config.yamlModifiedKey;
settings.createdKey = config.yamlCreatedKey;
settings.tagsKey = config.yamlTagsKey;
settings.saveTitleAsH1 = config.saveTitleInH1;
settings.titleSettings = config.titleSettings;
}
NoteSerializer.raw();
@ -59,7 +60,7 @@ class NoteSerializer implements NoteSerializerInterface {
if (note.title != null) {
var title = emojiParser.unemojify(note.title.trim());
if (settings.saveTitleAsH1) {
if (settings.titleSettings == SettingsTitle.InH1) {
if (title.isNotEmpty) {
data.body = '# $title\n\n${data.body}';
data.props.remove(settings.titleKey);
@ -148,7 +149,7 @@ class NoteSerializer implements NoteSerializerInterface {
note.title = emojiParser.emojify(title);
propsUsed.add(settings.titleKey);
settings.saveTitleAsH1 = false;
settings.titleSettings = SettingsTitle.InYaml;
} else {
var startsWithH1 = false;
for (var line in LineSplitter.split(note.body)) {

View File

@ -33,7 +33,7 @@ class NotesFolderConfig extends Equatable {
final String yamlModifiedKey;
final String yamlCreatedKey;
final String yamlTagsKey;
final bool saveTitleInH1;
final SettingsTitle titleSettings;
final Set<String> inlineTagPrefixes;
final String imageLocationSpec;
@ -51,7 +51,7 @@ class NotesFolderConfig extends Equatable {
@required this.yamlModifiedKey,
@required this.yamlCreatedKey,
@required this.yamlTagsKey,
@required this.saveTitleInH1,
@required this.titleSettings,
@required this.inlineTagPrefixes,
@required this.imageLocationSpec,
});
@ -69,7 +69,7 @@ class NotesFolderConfig extends Equatable {
yamlModifiedKey,
yamlCreatedKey,
yamlTagsKey,
saveTitleInH1,
titleSettings,
inlineTagPrefixes,
imageLocationSpec,
];
@ -102,7 +102,7 @@ class NotesFolderConfig extends Equatable {
yamlCreatedKey: settings.yamlCreatedKey,
yamlModifiedKey: settings.yamlModifiedKey,
yamlTagsKey: settings.yamlTagsKey,
saveTitleInH1: settings.saveTitleInH1,
titleSettings: settings.titleSettings,
inlineTagPrefixes: settings.inlineTagPrefixes,
imageLocationSpec: settings.imageLocationSpec,
);
@ -135,7 +135,7 @@ class NotesFolderConfig extends Equatable {
settings.yamlCreatedKey = yamlCreatedKey;
settings.yamlModifiedKey = yamlModifiedKey;
settings.yamlTagsKey = yamlTagsKey;
settings.saveTitleInH1 = saveTitleInH1;
settings.titleSettings = titleSettings;
settings.inlineTagPrefixes = inlineTagPrefixes;
settings.imageLocationSpec = imageLocationSpec;
settings.save();
@ -154,7 +154,7 @@ class NotesFolderConfig extends Equatable {
String yamlCreatedKey,
String yamlModifiedKey,
String yamlTagsKey,
bool saveTitleInH1,
SettingsTitle titleSettings,
Set<String> inlineTagPrefixes,
String imageLocationSpec,
}) {
@ -172,7 +172,7 @@ class NotesFolderConfig extends Equatable {
yamlCreatedKey: yamlCreatedKey ?? this.yamlCreatedKey,
yamlModifiedKey: yamlModifiedKey ?? this.yamlModifiedKey,
yamlTagsKey: yamlTagsKey ?? this.yamlTagsKey,
saveTitleInH1: saveTitleInH1 ?? this.saveTitleInH1,
titleSettings: titleSettings ?? this.titleSettings,
inlineTagPrefixes: inlineTagPrefixes ?? this.inlineTagPrefixes,
imageLocationSpec: imageLocationSpec ?? this.imageLocationSpec,
);
@ -229,7 +229,7 @@ class NotesFolderConfig extends Equatable {
var yamlCreatedKey = map['yamlCreatedKey']?.toString();
var yamlModifiedKey = map['yamlModifiedKey']?.toString();
var yamlTagsKey = map['yamlTagsKey']?.toString();
var saveTitleInH1 = map['saveTitleInH1']?.toString() != "false";
var titleSettings = map['titleSettings']?.toString();
// FIXME: What about inlineTagPrefixes?
@ -247,7 +247,7 @@ class NotesFolderConfig extends Equatable {
yamlCreatedKey: yamlCreatedKey,
yamlModifiedKey: yamlModifiedKey,
yamlTagsKey: yamlTagsKey,
saveTitleInH1: saveTitleInH1,
titleSettings: SettingsTitle.fromInternalString(titleSettings),
inlineTagPrefixes: {},
imageLocationSpec: "",
);
@ -282,7 +282,7 @@ class NotesFolderConfig extends Equatable {
'yamlModifiedKey': yamlModifiedKey,
'yamlCreatedKey': yamlCreatedKey,
'yamlTagsKey': yamlTagsKey,
'saveTitleInH1': saveTitleInH1,
'titleSettings': titleSettings.toInternalString(),
};
var yaml = toYAML(map);

View File

@ -66,7 +66,7 @@ class Repository with ChangeNotifier {
@required SharedPreferences pref,
@required String id,
}) async {
await migrateSettings(pref, gitBaseDir);
await migrateSettings(id, pref, gitBaseDir);
var settings = Settings(id);
settings.load(pref);

View File

@ -82,8 +82,9 @@ class _NoteMetadataSettingsScreenState
onChanged: (bool newVal) {
setState(() {
settings.yamlHeaderEnabled = newVal;
if (newVal == false) {
settings.saveTitleInH1 = true;
var titleInYaml = settings.titleSettings == SettingsTitle.InYaml;
if (newVal == false && titleInYaml) {
settings.titleSettings = SettingsTitle.Default;
}
settings.save();
});
@ -138,20 +139,14 @@ class _NoteMetadataSettingsScreenState
),
ListPreference(
title: tr("settings.noteMetaData.titleMetaData.title"),
options: [
tr("settings.noteMetaData.titleMetaData.fromH1"),
if (settings.yamlHeaderEnabled)
tr("settings.noteMetaData.titleMetaData.fromYaml"),
],
currentOption: settings.saveTitleInH1
? tr("settings.noteMetaData.titleMetaData.fromH1")
: tr("settings.noteMetaData.titleMetaData.fromYaml"),
onChange: (String newVal) {
setState(() {
settings.saveTitleInH1 =
newVal == tr("settings.noteMetaData.titleMetaData.fromH1");
options:
SettingsTitle.options.map((f) => f.toPublicString()).toList(),
currentOption: settings.titleSettings.toPublicString(),
onChange: (String publicStr) {
var format = SettingsTitle.fromPublicString(publicStr);
settings.titleSettings = format;
settings.save();
});
setState(() {});
},
),
ProOverlay(

View File

@ -32,6 +32,7 @@ class Settings extends ChangeNotifier {
String yamlCreatedKey = "created";
String yamlTagsKey = "tags";
String customMetaData = "";
SettingsTitle titleSettings = SettingsTitle.Default;
bool yamlHeaderEnabled = true;
String defaultNewNoteFolderSpec = "";
@ -45,7 +46,7 @@ class Settings extends ChangeNotifier {
SettingsFolderViewType defaultView = SettingsFolderViewType.Default;
bool showNoteSummary = true;
String folderViewHeaderType = "TitleGenerated";
int version = 2;
int version = 3;
SettingsHomeScreen homeScreen = SettingsHomeScreen.Default;
SettingsTheme theme = SettingsTheme.Default;
@ -58,7 +59,6 @@ class Settings extends ChangeNotifier {
String imageLocationSpec = "."; // . means the same folder
bool zenMode = false;
bool saveTitleInH1 = true;
bool swipeToDelete = true;
bool emojiParser = true;
@ -134,7 +134,8 @@ class Settings extends ChangeNotifier {
_getString(pref, "imageLocationSpec") ?? imageLocationSpec;
zenMode = _getBool(pref, "zenMode") ?? zenMode;
saveTitleInH1 = _getBool(pref, "saveTitleInH1") ?? saveTitleInH1;
titleSettings =
SettingsTitle.fromInternalString(_getString(pref, "titleSettings"));
swipeToDelete = _getBool(pref, "swipeToDelete") ?? swipeToDelete;
inlineTagPrefixes =
@ -239,8 +240,8 @@ class Settings extends ChangeNotifier {
await _setString(pref, "imageLocationSpec", imageLocationSpec,
defaultSet.imageLocationSpec);
await _setBool(pref, "zenMode", zenMode, defaultSet.zenMode);
await _setBool(
pref, "saveTitleInH1", saveTitleInH1, defaultSet.saveTitleInH1);
await _setString(pref, "titleSettings", titleSettings.toInternalString(),
defaultSet.titleSettings.toInternalString());
await _setBool(
pref, "swipeToDelete", swipeToDelete, defaultSet.swipeToDelete);
await _setStringSet(pref, "inlineTagPrefixes", inlineTagPrefixes,
@ -356,7 +357,7 @@ class Settings extends ChangeNotifier {
'theme': theme.toInternalString(),
'imageLocationSpec': imageLocationSpec,
'zenMode': zenMode.toString(),
'saveTitleInH1': saveTitleInH1.toString(),
'titleSettings': titleSettings.toInternalString(),
'swipeToDelete': swipeToDelete.toString(),
'inlineTagPrefixes': inlineTagPrefixes.join(' '),
'emojiParser': emojiParser.toString(),
@ -849,3 +850,56 @@ class SettingsTheme {
return ThemeMode.dark;
}
}
class SettingsTitle {
static const InYaml =
SettingsTitle("settings.noteMetaData.titleMetaData.fromYaml", "yaml");
static const InH1 =
SettingsTitle("settings.noteMetaData.titleMetaData.fromH1", "h1");
static const InFileName =
SettingsTitle("settings.noteMetaData.titleMetaData.filename", "filename");
static const Default = InH1;
final String _str;
final String _publicString;
const SettingsTitle(this._publicString, this._str);
String toInternalString() {
return _str;
}
String toPublicString() {
return tr(_publicString);
}
static const options = <SettingsTitle>[
InH1,
InYaml,
InFileName,
];
static SettingsTitle fromInternalString(String str) {
for (var opt in options) {
if (opt.toInternalString() == str) {
return opt;
}
}
return Default;
}
static SettingsTitle fromPublicString(String str) {
for (var opt in options) {
if (opt.toPublicString() == str) {
return opt;
}
}
return Default;
}
@override
String toString() {
assert(false, "SettingsTitle toString should never be called");
return "";
}
}

View File

@ -7,6 +7,7 @@ import 'package:gitjournal/settings.dart';
import 'package:gitjournal/utils/logger.dart';
Future<void> migrateSettings(
String id,
SharedPreferences pref,
String gitBaseDir,
) async {
@ -139,6 +140,16 @@ Future<void> migrateSettings(
await pref.remove("settingsVersion");
await pref.setInt(prefix + "settingsVersion", version);
}
if (version == 2) {
var saveTitleInH1 = pref.getBool(id + '_' + "saveTitleInH1");
if (saveTitleInH1 == false) {
var key = id + "_" + "titleSettings";
await pref.setString(key, "yaml");
}
version = 3;
}
}
Future<void> migrateSshKeys(

View File

@ -18,7 +18,7 @@ void main() {
var doc = MdYamlDoc(body: "I :heart: you", props: props);
var serializer = NoteSerializer.raw();
serializer.settings.saveTitleAsH1 = false;
serializer.settings.titleSettings = SettingsTitle.InYaml;
var note = Note(parent, "file-path-not-important");
serializer.decode(doc, note);
@ -40,7 +40,7 @@ void main() {
MdYamlDoc(body: "# Why not :coffee:?\n\nI :heart: you", props: props);
var serializer = NoteSerializer.raw();
serializer.settings.saveTitleAsH1 = true;
serializer.settings.titleSettings = SettingsTitle.InH1;
var note = Note(parent, "file-path-not-important");
serializer.decode(doc, note);
@ -89,7 +89,7 @@ void main() {
var doc = MdYamlDoc(body: "I :heart: you", props: props);
var serializer = NoteSerializer.raw();
serializer.settings.saveTitleAsH1 = true;
serializer.settings.titleSettings = SettingsTitle.InH1;
var note = Note(parent, "file-path-not-important");
serializer.decode(doc, note);
@ -111,7 +111,7 @@ void main() {
var doc = MdYamlDoc(body: "body", props: props);
var serializer = NoteSerializer.raw();
serializer.settings.saveTitleAsH1 = false;
serializer.settings.titleSettings = SettingsTitle.InYaml;
var note = Note(parent, "file-path-not-important");
serializer.decode(doc, note);
@ -136,7 +136,7 @@ void main() {
var doc = MdYamlDoc(body: "body", props: props);
var serializer = NoteSerializer.raw();
serializer.settings.saveTitleAsH1 = false;
serializer.settings.titleSettings = SettingsTitle.InYaml;
var note = Note(parent, "file-path-not-important");
serializer.decode(doc, note);

View File

@ -39,7 +39,7 @@ void main() {
yamlCreatedKey: 'created',
yamlModifiedKey: 'modified',
yamlTagsKey: 'tags',
saveTitleInH1: true,
titleSettings: SettingsTitle.InFileName,
inlineTagPrefixes: {},
imageLocationSpec: "",
);