NoteEditor: Improve modified check

If the only modification is the addition of a 'modified' tag, then we
shouldn't count it as modified.

I'm not too fond of this logic.
This commit is contained in:
Vishesh Handa
2020-02-09 17:33:19 +01:00
parent 49192026a7
commit 20f8d7f7fe
3 changed files with 19 additions and 16 deletions

View File

@ -24,7 +24,7 @@ class Note with ChangeNotifier implements Comparable<Note> {
DateTime _created; DateTime _created;
DateTime _modified; DateTime _modified;
NoteData _data = NoteData(); NoteData _data = NoteData();
NoteSerializer _noteSerializer = NoteSerializer(); NoteSerializer noteSerializer = NoteSerializer();
DateTime _fileLastModified; DateTime _fileLastModified;
@ -88,13 +88,13 @@ class Note with ChangeNotifier implements Comparable<Note> {
} }
NoteData get data { NoteData get data {
_noteSerializer.encode(this, _data); noteSerializer.encode(this, _data);
return _data; return _data;
} }
set data(NoteData data) { set data(NoteData data) {
_data = data; _data = data;
_noteSerializer.decode(_data, this); noteSerializer.decode(_data, this);
notifyListeners(); notifyListeners();
} }

View File

@ -10,6 +10,11 @@ class NoteData {
props = props ?? LinkedHashMap<String, dynamic>(); props = props ?? LinkedHashMap<String, dynamic>();
} }
NoteData.from(NoteData other) {
body = String.fromCharCodes(other.body.codeUnits);
props = LinkedHashMap<String, dynamic>.from(other.props);
}
@override @override
int get hashCode => body.hashCode ^ props.hashCode; int get hashCode => body.hashCode ^ props.hashCode;

View File

@ -1,12 +1,12 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/note.dart';
import 'package:gitjournal/core/note_data.dart';
import 'package:gitjournal/core/notes_folder.dart'; import 'package:gitjournal/core/notes_folder.dart';
import 'package:gitjournal/editors/markdown_editor.dart'; import 'package:gitjournal/editors/markdown_editor.dart';
import 'package:gitjournal/editors/raw_editor.dart'; import 'package:gitjournal/editors/raw_editor.dart';
import 'package:gitjournal/editors/todo_editor.dart'; import 'package:gitjournal/editors/todo_editor.dart';
import 'package:gitjournal/state_container.dart'; import 'package:gitjournal/state_container.dart';
import 'package:gitjournal/core/note_data_serializers.dart';
import 'package:gitjournal/widgets/folder_selection_dialog.dart'; import 'package:gitjournal/widgets/folder_selection_dialog.dart';
import 'package:gitjournal/widgets/rename_dialog.dart'; import 'package:gitjournal/widgets/rename_dialog.dart';
@ -36,7 +36,7 @@ enum EditorType { Markdown, Raw, Todo }
class NoteEditorState extends State<NoteEditor> { class NoteEditorState extends State<NoteEditor> {
Note note; Note note;
EditorType editorType = EditorType.Markdown; EditorType editorType = EditorType.Markdown;
String noteSerialized = ""; NoteData originalNoteData = NoteData();
final _rawEditorKey = GlobalKey<RawEditorState>(); final _rawEditorKey = GlobalKey<RawEditorState>();
final _markdownEditorKey = GlobalKey<MarkdownEditorState>(); final _markdownEditorKey = GlobalKey<MarkdownEditorState>();
@ -51,8 +51,7 @@ class NoteEditorState extends State<NoteEditor> {
} }
NoteEditorState.fromNote(this.note) { NoteEditorState.fromNote(this.note) {
var serializer = MarkdownYAMLSerializer(); originalNoteData = NoteData.from(note.data);
noteSerialized = serializer.encode(note.data);
} }
@override @override
@ -224,14 +223,14 @@ class NoteEditorState extends State<NoteEditor> {
if (_isNewNote) { if (_isNewNote) {
return note.title.isNotEmpty || note.body.isNotEmpty; return note.title.isNotEmpty || note.body.isNotEmpty;
} }
var serializer = MarkdownYAMLSerializer();
var finalNoteSerialized = serializer.encode(note.data); if (note.data != originalNoteData) {
bool modified = finalNoteSerialized != noteSerialized; var newWithoutModified = NoteData.from(note.data);
if (modified) { newWithoutModified.props.remove(note.noteSerializer.settings.modifiedKey);
print("Original Serialization: " + noteSerialized);
print("New Serialization: " + finalNoteSerialized); return newWithoutModified != originalNoteData;
} }
return modified; return false;
} }
void _saveNote(Note note) { void _saveNote(Note note) {
@ -291,8 +290,7 @@ class NoteEditorState extends State<NoteEditor> {
FlatButton( FlatButton(
onPressed: () { onPressed: () {
// FIXME: This shouldn't be required. Why is the original note modified? // FIXME: This shouldn't be required. Why is the original note modified?
var serializer = MarkdownYAMLSerializer(); note.data = originalNoteData;
note.data = serializer.decode(noteSerialized);
Navigator.pop(context); // Alert box Navigator.pop(context); // Alert box
Navigator.pop(context); // Note Editor Navigator.pop(context); // Note Editor