NotesFolder: Make sure listeners are always added/removed

Also make sure the _entities and _entityMap are always in sync.

The NotesFolder is complex enough that it could really use some proper
unit testing. Though since it is so tightly coupled to the FileSystem,
it would be quite an elaborate test to write.
This commit is contained in:
Vishesh Handa
2019-12-08 02:26:35 +01:00
parent 1eb9611140
commit ee9d38e420

View File

@ -168,20 +168,27 @@ class NotesFolder with ChangeNotifier {
void add(Note note) { void add(Note note) {
assert(note.parent == this); assert(note.parent == this);
_entities.add(NoteFSEntity(note: note)); note.addListener(_entityChanged);
var entity = NoteFSEntity(note: note);
_entities.add(entity);
_entityMap[note.filePath] = entity;
notifyListeners(); notifyListeners();
} }
void insert(int index, Note note) { void insert(int index, Note note) {
assert(note.parent == this); assert(note.parent == this);
note.addListener(_entityChanged);
for (var i = 0; i < _entities.length; i++) { for (var i = 0; i < _entities.length; i++) {
var e = _entities[i]; var e = _entities[i];
if (e is NotesFolder) continue; if (e is NotesFolder) continue;
if (index == 0) { if (index == 0) {
_entities.insert(i, NoteFSEntity(note: note)); var entity = NoteFSEntity(note: note);
_entities.insert(i, entity);
_entityMap[note.filePath] = entity;
notifyListeners(); notifyListeners();
return; return;
} }
@ -191,6 +198,8 @@ class NotesFolder with ChangeNotifier {
void remove(Note note) { void remove(Note note) {
assert(note.parent == this); assert(note.parent == this);
note.removeListener(_entityChanged);
var i = _entities.indexWhere((e) { var i = _entities.indexWhere((e) {
if (e.isFolder) return false; if (e.isFolder) return false;
return e.note.filePath == note.filePath; return e.note.filePath == note.filePath;
@ -198,6 +207,8 @@ class NotesFolder with ChangeNotifier {
assert(i != -1); assert(i != -1);
_entities.removeAt(i); _entities.removeAt(i);
_entityMap.remove(note.filePath);
notifyListeners(); notifyListeners();
} }
@ -209,11 +220,16 @@ class NotesFolder with ChangeNotifier {
if (!file.existsSync()) { if (!file.existsSync()) {
file.createSync(recursive: true); file.createSync(recursive: true);
} }
notifyListeners();
} }
void addFolder(NotesFolder folder) { void addFolder(NotesFolder folder) {
assert(folder.parent == this); assert(folder.parent == this);
_entities.add(NoteFSEntity(folder: folder)); folder.addListener(_entityChanged);
var entity = NoteFSEntity(folder: folder);
_entities.add(entity);
_entityMap[folder.folderPath] = entity;
notifyListeners(); notifyListeners();
} }