mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-09-18 09:22:47 +08:00
Add emjoi support
Only supported for the body and title of notes. Fixes #62
This commit is contained in:
@ -24,6 +24,7 @@ class Note with ChangeNotifier implements Comparable<Note> {
|
||||
String _title = "";
|
||||
DateTime _created;
|
||||
DateTime _modified;
|
||||
String _body = "";
|
||||
MdYamlDoc _data = MdYamlDoc();
|
||||
NoteSerializer noteSerializer = NoteSerializer();
|
||||
|
||||
@ -73,11 +74,11 @@ class Note with ChangeNotifier implements Comparable<Note> {
|
||||
}
|
||||
|
||||
String get body {
|
||||
return _data.body;
|
||||
return _body;
|
||||
}
|
||||
|
||||
set body(String newBody) {
|
||||
_data.body = newBody;
|
||||
_body = newBody;
|
||||
_summary = null;
|
||||
notifyListeners();
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
import 'package:gitjournal/utils/datetime.dart';
|
||||
import 'package:gitjournal/settings.dart';
|
||||
import 'package:flutter_emoji/flutter_emoji.dart';
|
||||
|
||||
import 'md_yaml_doc.dart';
|
||||
import 'note.dart';
|
||||
@ -9,6 +10,8 @@ abstract class NoteSerializerInterface {
|
||||
void decode(MdYamlDoc data, Note note);
|
||||
}
|
||||
|
||||
var emojiParser = EmojiParser();
|
||||
|
||||
class NoteSerializationSettings {
|
||||
String modifiedKey = Settings.instance.yamlModifiedKey;
|
||||
String createdKey = "created";
|
||||
@ -35,7 +38,7 @@ class NoteSerializer implements NoteSerializerInterface {
|
||||
if (note.title != null) {
|
||||
var title = note.title.trim();
|
||||
if (title.isNotEmpty) {
|
||||
data.props[settings.titleKey] = note.title;
|
||||
data.props[settings.titleKey] = emojiParser.unemojify(note.title);
|
||||
} else {
|
||||
data.props.remove(settings.titleKey);
|
||||
}
|
||||
@ -43,7 +46,7 @@ class NoteSerializer implements NoteSerializerInterface {
|
||||
data.props.remove(settings.titleKey);
|
||||
}
|
||||
|
||||
data.body = note.body;
|
||||
data.body = emojiParser.unemojify(note.body);
|
||||
}
|
||||
|
||||
@override
|
||||
@ -66,8 +69,10 @@ class NoteSerializer implements NoteSerializerInterface {
|
||||
}
|
||||
}
|
||||
|
||||
note.body = data.body;
|
||||
note.body = emojiParser.emojify(data.body);
|
||||
note.created = parseDateTime(data.props[settings.createdKey]?.toString());
|
||||
note.title = data.props[settings.titleKey]?.toString() ?? "";
|
||||
|
||||
var title = data.props[settings.titleKey]?.toString() ?? "";
|
||||
note.title = emojiParser.emojify(title);
|
||||
}
|
||||
}
|
||||
|
@ -179,6 +179,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.2.2"
|
||||
flutter_emoji:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_emoji
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.2.1+1"
|
||||
flutter_launcher_icons:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
|
@ -34,6 +34,7 @@ dependencies:
|
||||
flutter_runtime_env: ^0.0.2
|
||||
yaml_serializer: ^0.0.5
|
||||
connectivity: ^0.4.6+1
|
||||
flutter_emoji: ">= 2.0.0"
|
||||
|
||||
dev_dependencies:
|
||||
flutter_launcher_icons: "^0.7.2"
|
||||
|
30
test/note_serializer_test.dart
Normal file
30
test/note_serializer_test.dart
Normal file
@ -0,0 +1,30 @@
|
||||
import 'dart:collection';
|
||||
|
||||
import 'package:gitjournal/core/md_yaml_doc.dart';
|
||||
import 'package:gitjournal/core/note.dart';
|
||||
import 'package:test/test.dart';
|
||||
import 'package:gitjournal/core/note_serializer.dart';
|
||||
|
||||
void main() {
|
||||
group('Note Serializer Test', () {
|
||||
test('Test emojis', () {
|
||||
var props = LinkedHashMap<String, dynamic>.from(
|
||||
<String, dynamic>{"title": "Why not :coffee:?"});
|
||||
var doc = MdYamlDoc("I :heart: you", props);
|
||||
|
||||
var serializer = NoteSerializer();
|
||||
var note = Note(null, "file-path-not-important");
|
||||
serializer.decode(doc, note);
|
||||
|
||||
expect(note.body, "I ❤️ you");
|
||||
expect(note.title, "Why not ☕?");
|
||||
|
||||
note.body = "Why not ☕?";
|
||||
note.title = "I ❤️ you";
|
||||
|
||||
serializer.encode(note, doc);
|
||||
expect(doc.body, "Why not :coffee:?");
|
||||
expect(doc.props['title'].toString(), "I :heart: you");
|
||||
});
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user