mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-29 02:07:39 +08:00
Add experimental support for not saving the yaml header
Fixes #19 This is experimental as it changes the whole concept of a Note - We have till now always assumed that a Note can have attached metadata. With this, there is no longer any metadata. So other parts of the application need to start reacting accordingly. For example the Mardkown Editor should not allow you to modify the title. This also makes it easier to implement '.txt' file support.
This commit is contained in:
@ -1,6 +1,7 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gitjournal/settings.dart';
|
||||||
import 'package:gitjournal/utils/markdown.dart';
|
import 'package:gitjournal/utils/markdown.dart';
|
||||||
import 'package:path/path.dart' as p;
|
import 'package:path/path.dart' as p;
|
||||||
|
|
||||||
@ -38,7 +39,7 @@ class Note with ChangeNotifier implements Comparable<Note> {
|
|||||||
Note(this.parent, this._filePath);
|
Note(this.parent, this._filePath);
|
||||||
|
|
||||||
Note.newNote(this.parent) {
|
Note.newNote(this.parent) {
|
||||||
_created = DateTime.now();
|
created = DateTime.now();
|
||||||
}
|
}
|
||||||
|
|
||||||
String get filePath {
|
String get filePath {
|
||||||
@ -55,6 +56,8 @@ class Note with ChangeNotifier implements Comparable<Note> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
set created(DateTime dt) {
|
set created(DateTime dt) {
|
||||||
|
if (!canHaveMetadata) return;
|
||||||
|
|
||||||
_created = dt;
|
_created = dt;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
@ -64,6 +67,8 @@ class Note with ChangeNotifier implements Comparable<Note> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
set modified(DateTime dt) {
|
set modified(DateTime dt) {
|
||||||
|
if (!canHaveMetadata) return;
|
||||||
|
|
||||||
_modified = dt;
|
_modified = dt;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
@ -88,10 +93,16 @@ class Note with ChangeNotifier implements Comparable<Note> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
set title(String title) {
|
set title(String title) {
|
||||||
|
if (!canHaveMetadata) return;
|
||||||
|
|
||||||
_title = title;
|
_title = title;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool get canHaveMetadata {
|
||||||
|
return Settings.instance.yamlHeaderEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
MdYamlDoc get data {
|
MdYamlDoc get data {
|
||||||
noteSerializer.encode(this, _data);
|
noteSerializer.encode(this, _data);
|
||||||
return _data;
|
return _data;
|
||||||
|
@ -6,23 +6,25 @@ import 'package:gitjournal/settings.dart';
|
|||||||
import 'package:path/path.dart' as p;
|
import 'package:path/path.dart' as p;
|
||||||
|
|
||||||
String getFileName(Note note) {
|
String getFileName(Note note) {
|
||||||
|
var date =
|
||||||
|
note.created ?? note.modified ?? note.fileLastModified ?? DateTime.now();
|
||||||
switch (Settings.instance.noteFileNameFormat) {
|
switch (Settings.instance.noteFileNameFormat) {
|
||||||
case NoteFileNameFormat.FromTitle:
|
case NoteFileNameFormat.FromTitle:
|
||||||
if (note.title.isNotEmpty) {
|
if (note.title.isNotEmpty) {
|
||||||
return buildTitleFileName(note.parent.folderPath, note.title);
|
return buildTitleFileName(note.parent.folderPath, note.title);
|
||||||
} else {
|
} else {
|
||||||
return toIso8601WithTimezone(note.created) + ".md";
|
return toIso8601WithTimezone(date) + ".md";
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NoteFileNameFormat.Iso8601:
|
case NoteFileNameFormat.Iso8601:
|
||||||
return toIso8601(note.created) + ".md";
|
return toIso8601(date) + ".md";
|
||||||
case NoteFileNameFormat.Iso8601WithTimeZone:
|
case NoteFileNameFormat.Iso8601WithTimeZone:
|
||||||
return toIso8601WithTimezone(note.created) + ".md";
|
return toIso8601WithTimezone(date) + ".md";
|
||||||
case NoteFileNameFormat.Iso8601WithTimeZoneWithoutColon:
|
case NoteFileNameFormat.Iso8601WithTimeZoneWithoutColon:
|
||||||
return toIso8601WithTimezone(note.created).replaceAll(":", "_") + ".md";
|
return toIso8601WithTimezone(date).replaceAll(":", "_") + ".md";
|
||||||
}
|
}
|
||||||
|
|
||||||
return note.created.toString();
|
return date.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
String buildTitleFileName(String parentDir, String title) {
|
String buildTitleFileName(String parentDir, String title) {
|
||||||
|
@ -15,6 +15,11 @@ class _NoteMetadataSettingsScreenState
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
var textTheme = Theme.of(context).textTheme;
|
var textTheme = Theme.of(context).textTheme;
|
||||||
|
String yamlHeader = " \n";
|
||||||
|
if (Settings.instance.yamlHeaderEnabled) {
|
||||||
|
var map = _buildMap();
|
||||||
|
yamlHeader = MarkdownYAMLCodec.toYamlHeader(map).trim();
|
||||||
|
}
|
||||||
|
|
||||||
var body = Column(
|
var body = Column(
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
@ -26,9 +31,19 @@ class _NoteMetadataSettingsScreenState
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 16.0),
|
const SizedBox(height: 16.0),
|
||||||
NoteMetaDataExample(_buildMap()),
|
NoteMetaDataExample(yamlHeader),
|
||||||
const SizedBox(height: 16.0),
|
const SizedBox(height: 16.0),
|
||||||
const Divider(),
|
const Divider(),
|
||||||
|
SwitchListTile(
|
||||||
|
title: const Text("Enable YAML Header"),
|
||||||
|
value: Settings.instance.yamlHeaderEnabled,
|
||||||
|
onChanged: (bool newVal) {
|
||||||
|
setState(() {
|
||||||
|
Settings.instance.yamlHeaderEnabled = newVal;
|
||||||
|
Settings.instance.save();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
ListPreference(
|
ListPreference(
|
||||||
title: "Modified Field",
|
title: "Modified Field",
|
||||||
options: [
|
options: [
|
||||||
@ -44,6 +59,7 @@ class _NoteMetadataSettingsScreenState
|
|||||||
Settings.instance.save();
|
Settings.instance.save();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
enabled: Settings.instance.yamlHeaderEnabled,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
@ -75,8 +91,7 @@ class _NoteMetadataSettingsScreenState
|
|||||||
class NoteMetaDataExample extends StatelessWidget {
|
class NoteMetaDataExample extends StatelessWidget {
|
||||||
final String yamlHeader;
|
final String yamlHeader;
|
||||||
|
|
||||||
NoteMetaDataExample(Map<String, dynamic> data)
|
NoteMetaDataExample(this.yamlHeader);
|
||||||
: yamlHeader = MarkdownYAMLCodec.toYamlHeader(data);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
@ -18,6 +18,7 @@ class Settings {
|
|||||||
bool collectCrashReports = true;
|
bool collectCrashReports = true;
|
||||||
|
|
||||||
String yamlModifiedKey = "modified";
|
String yamlModifiedKey = "modified";
|
||||||
|
bool yamlHeaderEnabled = true;
|
||||||
String defaultNewNoteFolder = "journal";
|
String defaultNewNoteFolder = "journal";
|
||||||
|
|
||||||
RemoteSyncFrequency remoteSyncFrequency = RemoteSyncFrequency.Default;
|
RemoteSyncFrequency remoteSyncFrequency = RemoteSyncFrequency.Default;
|
||||||
@ -38,6 +39,7 @@ class Settings {
|
|||||||
pref.getBool("collectCrashReports") ?? collectCrashReports;
|
pref.getBool("collectCrashReports") ?? collectCrashReports;
|
||||||
|
|
||||||
yamlModifiedKey = pref.getString("yamlModifiedKey") ?? yamlModifiedKey;
|
yamlModifiedKey = pref.getString("yamlModifiedKey") ?? yamlModifiedKey;
|
||||||
|
yamlHeaderEnabled = pref.getBool("yamlHeaderEnabled") ?? yamlHeaderEnabled;
|
||||||
defaultNewNoteFolder =
|
defaultNewNoteFolder =
|
||||||
pref.getString("defaultNewNoteFolder") ?? defaultNewNoteFolder;
|
pref.getString("defaultNewNoteFolder") ?? defaultNewNoteFolder;
|
||||||
|
|
||||||
@ -59,6 +61,7 @@ class Settings {
|
|||||||
pref.setBool("collectUsageStatistics", collectUsageStatistics);
|
pref.setBool("collectUsageStatistics", collectUsageStatistics);
|
||||||
pref.setBool("collectCrashReports", collectCrashReports);
|
pref.setBool("collectCrashReports", collectCrashReports);
|
||||||
pref.setString("yamlModifiedKey", yamlModifiedKey);
|
pref.setString("yamlModifiedKey", yamlModifiedKey);
|
||||||
|
pref.setBool("yamlHeaderEnabled", yamlHeaderEnabled);
|
||||||
pref.setString("defaultNewNoteFolder", defaultNewNoteFolder);
|
pref.setString("defaultNewNoteFolder", defaultNewNoteFolder);
|
||||||
pref.setString(
|
pref.setString(
|
||||||
"remoteSyncFrequency", remoteSyncFrequency.toInternalString());
|
"remoteSyncFrequency", remoteSyncFrequency.toInternalString());
|
||||||
@ -80,6 +83,7 @@ class Settings {
|
|||||||
"collectUsageStatistics": collectUsageStatistics,
|
"collectUsageStatistics": collectUsageStatistics,
|
||||||
"collectCrashReports": collectCrashReports,
|
"collectCrashReports": collectCrashReports,
|
||||||
"yamlModifiedKey": yamlModifiedKey,
|
"yamlModifiedKey": yamlModifiedKey,
|
||||||
|
"yamlHeaderEnabled": yamlHeaderEnabled,
|
||||||
"defaultNewNoteFolder": defaultNewNoteFolder,
|
"defaultNewNoteFolder": defaultNewNoteFolder,
|
||||||
"defaultEditor": defaultEditor.toInternalString(),
|
"defaultEditor": defaultEditor.toInternalString(),
|
||||||
"version": version,
|
"version": version,
|
||||||
|
Reference in New Issue
Block a user