mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-27 01:02:14 +08:00
Add FileName option in Note title settings
This doesn't do anything right now. It just shows the option.
This commit is contained in:
@ -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
|
||||
|
@ -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)) {
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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(
|
||||
|
@ -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 "";
|
||||
}
|
||||
}
|
||||
|
@ -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(
|
||||
|
@ -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);
|
||||
|
@ -39,7 +39,7 @@ void main() {
|
||||
yamlCreatedKey: 'created',
|
||||
yamlModifiedKey: 'modified',
|
||||
yamlTagsKey: 'tags',
|
||||
saveTitleInH1: true,
|
||||
titleSettings: SettingsTitle.InFileName,
|
||||
inlineTagPrefixes: {},
|
||||
imageLocationSpec: "",
|
||||
);
|
||||
|
Reference in New Issue
Block a user