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 = "";
|
String _title = "";
|
||||||
DateTime _created;
|
DateTime _created;
|
||||||
DateTime _modified;
|
DateTime _modified;
|
||||||
|
String _body = "";
|
||||||
MdYamlDoc _data = MdYamlDoc();
|
MdYamlDoc _data = MdYamlDoc();
|
||||||
NoteSerializer noteSerializer = NoteSerializer();
|
NoteSerializer noteSerializer = NoteSerializer();
|
||||||
|
|
||||||
@ -73,11 +74,11 @@ class Note with ChangeNotifier implements Comparable<Note> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String get body {
|
String get body {
|
||||||
return _data.body;
|
return _body;
|
||||||
}
|
}
|
||||||
|
|
||||||
set body(String newBody) {
|
set body(String newBody) {
|
||||||
_data.body = newBody;
|
_body = newBody;
|
||||||
_summary = null;
|
_summary = null;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'package:gitjournal/utils/datetime.dart';
|
import 'package:gitjournal/utils/datetime.dart';
|
||||||
import 'package:gitjournal/settings.dart';
|
import 'package:gitjournal/settings.dart';
|
||||||
|
import 'package:flutter_emoji/flutter_emoji.dart';
|
||||||
|
|
||||||
import 'md_yaml_doc.dart';
|
import 'md_yaml_doc.dart';
|
||||||
import 'note.dart';
|
import 'note.dart';
|
||||||
@ -9,6 +10,8 @@ abstract class NoteSerializerInterface {
|
|||||||
void decode(MdYamlDoc data, Note note);
|
void decode(MdYamlDoc data, Note note);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var emojiParser = EmojiParser();
|
||||||
|
|
||||||
class NoteSerializationSettings {
|
class NoteSerializationSettings {
|
||||||
String modifiedKey = Settings.instance.yamlModifiedKey;
|
String modifiedKey = Settings.instance.yamlModifiedKey;
|
||||||
String createdKey = "created";
|
String createdKey = "created";
|
||||||
@ -35,7 +38,7 @@ class NoteSerializer implements NoteSerializerInterface {
|
|||||||
if (note.title != null) {
|
if (note.title != null) {
|
||||||
var title = note.title.trim();
|
var title = note.title.trim();
|
||||||
if (title.isNotEmpty) {
|
if (title.isNotEmpty) {
|
||||||
data.props[settings.titleKey] = note.title;
|
data.props[settings.titleKey] = emojiParser.unemojify(note.title);
|
||||||
} else {
|
} else {
|
||||||
data.props.remove(settings.titleKey);
|
data.props.remove(settings.titleKey);
|
||||||
}
|
}
|
||||||
@ -43,7 +46,7 @@ class NoteSerializer implements NoteSerializerInterface {
|
|||||||
data.props.remove(settings.titleKey);
|
data.props.remove(settings.titleKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
data.body = note.body;
|
data.body = emojiParser.unemojify(note.body);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@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.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"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.2"
|
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:
|
flutter_launcher_icons:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
|
@ -34,6 +34,7 @@ dependencies:
|
|||||||
flutter_runtime_env: ^0.0.2
|
flutter_runtime_env: ^0.0.2
|
||||||
yaml_serializer: ^0.0.5
|
yaml_serializer: ^0.0.5
|
||||||
connectivity: ^0.4.6+1
|
connectivity: ^0.4.6+1
|
||||||
|
flutter_emoji: ">= 2.0.0"
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_launcher_icons: "^0.7.2"
|
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