Add emjoi support

Only supported for the body and title of notes.

Fixes #62
This commit is contained in:
Vishesh Handa
2020-02-15 01:56:18 +01:00
parent ffc7c8f483
commit b9c7fed6dc
5 changed files with 50 additions and 6 deletions

View File

@ -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();
}

View File

@ -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);
}
}

View File

@ -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:

View File

@ -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"

View 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");
});
});
}