Update modified/created as unix timestamp if already in that format

Related to #349
This commit is contained in:
Vishesh Handa
2021-08-10 10:57:31 +02:00
parent 8845fbbb8c
commit e90233d45c
3 changed files with 52 additions and 8 deletions

View File

@ -33,6 +33,11 @@ abstract class NoteSerializerInterface {
var emojiParser = EmojiParser();
enum DateFormat {
Iso8601,
UnixTimeStamp,
}
class NoteSerializationSettings {
String modifiedKey = "modified";
String createdKey = "created";
@ -45,11 +50,16 @@ class NoteSerializationSettings {
SettingsTitle titleSettings = SettingsTitle.Default;
var modifiedFormat = DateFormat.Iso8601;
var createdFormat = DateFormat.Iso8601;
NoteSerializationSettings.fromConfig(NotesFolderConfig config) {
modifiedKey = config.yamlModifiedKey;
createdKey = config.yamlCreatedKey;
tagsKey = config.yamlTagsKey;
titleSettings = config.titleSettings;
// FIXME: modified / created format!
}
NoteSerializationSettings();
}
@ -65,13 +75,27 @@ class NoteSerializer implements NoteSerializerInterface {
data.body = emojiParser.unemojify(note.body);
if (note.created != null) {
data.props[settings.createdKey] = toIso8601WithTimezone(note.created!);
switch (settings.createdFormat) {
case DateFormat.Iso8601:
data.props[settings.createdKey] =
toIso8601WithTimezone(note.created!);
break;
case DateFormat.UnixTimeStamp:
data.props[settings.createdKey] = toUnixTimeStamp(note.created!);
}
} else {
data.props.remove(settings.createdKey);
}
if (note.modified != null) {
data.props[settings.modifiedKey] = toIso8601WithTimezone(note.modified!);
switch (settings.modifiedFormat) {
case DateFormat.Iso8601:
data.props[settings.modifiedKey] =
toIso8601WithTimezone(note.modified!);
break;
case DateFormat.UnixTimeStamp:
data.props[settings.modifiedKey] = toUnixTimeStamp(note.modified!);
}
} else {
data.props.remove(settings.modifiedKey);
}
@ -135,7 +159,13 @@ class NoteSerializer implements NoteSerializerInterface {
for (var possibleKey in modifiedKeyOptions) {
var val = data.props[possibleKey];
if (val != null) {
note.modified = parseDateTime(val.toString());
if (val is int) {
note.modified = parseUnixTimeStamp(val);
settings.modifiedFormat = DateFormat.UnixTimeStamp;
} else {
note.modified = parseDateTime(val.toString());
settings.modifiedFormat = DateFormat.Iso8601;
}
settings.modifiedKey = possibleKey;
propsUsed.add(possibleKey);
@ -152,7 +182,13 @@ class NoteSerializer implements NoteSerializerInterface {
for (var possibleKey in createdKeyOptions) {
var val = data.props[possibleKey];
if (val != null) {
note.created = parseDateTime(val.toString());
if (val is int) {
note.created = parseUnixTimeStamp(val);
settings.createdFormat = DateFormat.UnixTimeStamp;
} else {
note.created = parseDateTime(val.toString());
settings.createdFormat = DateFormat.Iso8601;
}
settings.createdKey = possibleKey;
propsUsed.add(possibleKey);

View File

@ -80,3 +80,11 @@ DateTime? parseDateTime(String str) {
return dt;
}
DateTime parseUnixTimeStamp(int val) {
return DateTime.fromMillisecondsSinceEpoch(val * 1000, isUtc: true);
}
int toUnixTimeStamp(DateTime dt) {
return dt.toUtc().millisecondsSinceEpoch ~/ 1000;
}

View File

@ -253,12 +253,12 @@ Hello
expect(note.created, DateTime.parse('2021-07-14T10:14:49Z'));
note.modified = DateTime.parse('2020-07-14T10:14:49Z');
note.created = DateTime.parse('2020-06-14T10:14:49Z');
note.created = DateTime.parse('2020-06-13T10:14:49Z');
var expectedContent = """---
bar: Foo
updated: 1626257689
created: 1626257689
updated: 1594721689
created: 1592043289
---
Hello
@ -268,6 +268,6 @@ Hello
var actualContent = File(notePath).readAsStringSync();
expect(actualContent, equals(expectedContent));
}, skip: true);
});
});
}