Allows Notes to have a different modified yaml key

Possible Options - modified, mod, lastModified, lastMod, lastmodified or
lastmod. When read the the note we will figure out which one is being
used and accordingly write back that value.

This makes it easier to use GitJournal for editing Hugo websites as they
usually use the 'lastmod' field to indicate when the post was last modified.
This commit is contained in:
Vishesh Handa
2020-01-05 18:09:36 +01:00
parent a292896d5a
commit 442d9d2b4e
3 changed files with 101 additions and 8 deletions

View File

@ -24,6 +24,7 @@ class Note with ChangeNotifier implements Comparable<Note> {
DateTime _created;
DateTime _modified;
NoteData _data = NoteData();
NoteSerializer _noteSerializer = NoteSerializer();
DateTime _fileLastModified;
@ -87,18 +88,13 @@ class Note with ChangeNotifier implements Comparable<Note> {
}
NoteData get data {
var serializer = NoteSerializer();
serializer.encode(this, _data);
_noteSerializer.encode(this, _data);
return _data;
}
set data(NoteData data) {
_data = data;
// Fill the note's attributes from the data
var serializer = NoteSerializer();
serializer.decode(_data, this);
_noteSerializer.decode(_data, this);
notifyListeners();
}

View File

@ -43,9 +43,26 @@ class NoteSerializer implements NoteSerializerInterface {
@override
void decode(NoteData data, Note note) {
var modifiedKeyOptions = [
"modified",
"mod",
"lastModified",
"lastMod",
"lastmodified",
"lastmod",
];
for (var i = 0; i < modifiedKeyOptions.length; i++) {
var possibleKey = modifiedKeyOptions[i];
var modifiedVal = data.props[possibleKey];
if (modifiedVal != null) {
note.modified = parseDateTime(modifiedVal.toString());
settings.modifiedKey = possibleKey;
break;
}
}
note.body = data.body;
note.created = parseDateTime(data.props[settings.createdKey]?.toString());
note.modified = parseDateTime(data.props[settings.modifiedKey]?.toString());
note.title = data.props[settings.titleKey]?.toString() ?? "";
}
}

80
test/note_test.dart Normal file
View File

@ -0,0 +1,80 @@
import 'dart:io';
import 'package:gitjournal/core/note.dart';
import 'package:gitjournal/core/notes_folder.dart';
import 'package:path/path.dart' as p;
import 'package:test/test.dart';
void main() {
group('Note', () {
Directory tempDir;
setUpAll(() async {
tempDir = await Directory.systemTemp.createTemp('__notes_test__');
});
tearDownAll(() async {
tempDir.deleteSync(recursive: true);
});
test('Should respect modified key as modified', () async {
var content = """---
title: Foo
modified: 2017-02-15T22:41:19+01:00
---
Hello""";
var notePath = p.join(tempDir.path, "note.md");
File(notePath).writeAsString(content);
var parentFolder = NotesFolder(null, tempDir.path);
var note = Note(parentFolder, notePath);
await note.load();
note.modified = DateTime.utc(2019, 12, 02, 4, 0, 0);
await note.save();
var expectedContent = """---
title: Foo
modified: 2019-12-02T04:00:00+00:00
---
Hello""";
var actualContent = File(notePath).readAsStringSync();
expect(actualContent, equals(expectedContent));
});
test('Should respect modified key as mod', () async {
var content = """---
title: Foo
mod: 2017-02-15T22:41:19+01:00
---
Hello""";
var notePath = p.join(tempDir.path, "note.md");
File(notePath).writeAsString(content);
var parentFolder = NotesFolder(null, tempDir.path);
var note = Note(parentFolder, notePath);
await note.load();
note.modified = DateTime.utc(2019, 12, 02, 4, 0, 0);
await note.save();
var expectedContent = """---
title: Foo
mod: 2019-12-02T04:00:00+00:00
---
Hello""";
var actualContent = File(notePath).readAsStringSync();
expect(actualContent, equals(expectedContent));
});
});
}