From 10d65cd6fb10d0597922ab494c53bc569de04bcb Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Wed, 4 Dec 2019 14:22:17 +0100 Subject: [PATCH] Rename NoteFolder -> NotesFolder --- lib/appstate.dart | 4 +- lib/core/note_fs_entity.dart | 6 +-- .../{note_folder.dart => notes_folder.dart} | 44 ++++++++++++++++--- lib/screens/folder_listing.dart | 4 +- lib/screens/journal_listing.dart | 4 +- lib/state_container.dart | 6 +-- lib/widgets/folder_tree_view.dart | 8 ++-- 7 files changed, 54 insertions(+), 22 deletions(-) rename lib/core/{note_folder.dart => notes_folder.dart} (63%) diff --git a/lib/appstate.dart b/lib/appstate.dart index caf156fe..c866ba83 100644 --- a/lib/appstate.dart +++ b/lib/appstate.dart @@ -1,7 +1,7 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:fimber/fimber.dart'; import 'package:gitjournal/core/note.dart'; -import 'package:gitjournal/core/note_folder.dart'; +import 'package:gitjournal/core/notes_folder.dart'; class AppState { // @@ -28,7 +28,7 @@ class AppState { } List notes = []; - NoteFolder noteFolder; + NotesFolder noteFolder; AppState(SharedPreferences pref) { localGitRepoConfigured = pref.getBool("localGitRepoConfigured") ?? false; diff --git a/lib/core/note_fs_entity.dart b/lib/core/note_fs_entity.dart index 607c05d7..c3740b2e 100644 --- a/lib/core/note_fs_entity.dart +++ b/lib/core/note_fs_entity.dart @@ -1,11 +1,11 @@ import 'note.dart'; -import 'note_folder.dart'; +import 'notes_folder.dart'; // FIXME: Maybe the parent should be a part of the Note, and the NoteFolder // or maybe also a part of the NoteFolder class NoteFSEntity { - NoteFolder parent; - NoteFolder folder; + NotesFolder parent; + NotesFolder folder; Note note; NoteFSEntity(this.parent, {this.folder, this.note}) { diff --git a/lib/core/note_folder.dart b/lib/core/notes_folder.dart similarity index 63% rename from lib/core/note_folder.dart rename to lib/core/notes_folder.dart index 4cc64ef0..c756bfdf 100644 --- a/lib/core/note_folder.dart +++ b/lib/core/notes_folder.dart @@ -5,11 +5,12 @@ import 'package:path/path.dart'; import 'note.dart'; import 'note_fs_entity.dart'; -class NoteFolder { +class NotesFolder { + NotesFolder parent; List entities = []; String folderPath; - NoteFolder(this.folderPath); + NotesFolder(this.parent, this.folderPath); bool get isEmpty { return entities.isEmpty; @@ -55,24 +56,55 @@ class NoteFolder { var lister = dir.list(recursive: false, followLinks: false); await for (var fsEntity in lister) { if (fsEntity is Directory) { - var subFolder = NoteFolder(fsEntity.path); + var subFolder = NotesFolder(this, fsEntity.path); if (subFolder.name.startsWith('.')) { continue; } await subFolder.loadRecursively(); - var noteFSEntity = NoteFSEntity(this, folder: subFolder); + var noteFSEntity = NoteFSEntity(folder: subFolder); entities.add(noteFSEntity); } - var note = Note(fsEntity.path); + var note = Note(this, fsEntity.path); if (!note.filePath.toLowerCase().endsWith('.md')) { continue; } await note.load(); - var noteFSEntity = NoteFSEntity(this, note: note); + var noteFSEntity = NoteFSEntity(note: note); entities.add(noteFSEntity); } } + + void add(Note note) { + assert(note.parent == this); + entities.add(NoteFSEntity(note: note)); + } + + void insert(int index, Note note) { + assert(note.parent == this); + + for (var i = 0; i < entities.length; i++) { + var e = entities[i]; + if (e is NotesFolder) continue; + + if (index == 0) { + entities.insert(i, NoteFSEntity(note: note)); + return; + } + index--; + } + } + + void remove(Note note) { + assert(note.parent == this); + var i = entities.indexWhere((e) { + if (e.isFolder) return false; + return e.note.filePath == note.filePath; + }); + assert(i != -1); + + entities.removeAt(i); + } } diff --git a/lib/screens/folder_listing.dart b/lib/screens/folder_listing.dart index f53f8929..5a6a7e03 100644 --- a/lib/screens/folder_listing.dart +++ b/lib/screens/folder_listing.dart @@ -4,7 +4,7 @@ import 'package:gitjournal/widgets/app_bar_menu_button.dart'; import 'package:gitjournal/widgets/app_drawer.dart'; import 'package:gitjournal/widgets/folder_tree_view.dart'; import 'package:gitjournal/state_container.dart'; -import 'package:gitjournal/core/note_folder.dart'; +import 'package:gitjournal/core/notes_folder.dart'; import 'journal_listing.dart'; @@ -16,7 +16,7 @@ class FolderListingScreen extends StatelessWidget { var treeView = FolderTreeView( rootFolder: appState.noteFolder, - onFolderSelected: (NoteFolder folder) { + onFolderSelected: (NotesFolder folder) { var route = MaterialPageRoute( builder: (context) => JournalListingScreen( noteFolder: folder, diff --git a/lib/screens/journal_listing.dart b/lib/screens/journal_listing.dart index 66f28462..44ba51dc 100644 --- a/lib/screens/journal_listing.dart +++ b/lib/screens/journal_listing.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:gitjournal/core/note.dart'; -import 'package:gitjournal/core/note_folder.dart'; +import 'package:gitjournal/core/notes_folder.dart'; import 'package:gitjournal/utils.dart'; import 'package:gitjournal/apis/git.dart'; import 'package:gitjournal/screens/journal_editor.dart'; @@ -12,7 +12,7 @@ import 'package:gitjournal/widgets/journal_list.dart'; import 'package:gitjournal/themes.dart'; class JournalListingScreen extends StatelessWidget { - final NoteFolder noteFolder; + final NotesFolder noteFolder; final bool recursive; JournalListingScreen({@required this.noteFolder, this.recursive = false}); diff --git a/lib/state_container.dart b/lib/state_container.dart index 2dcd8331..a8f38f53 100644 --- a/lib/state_container.dart +++ b/lib/state_container.dart @@ -8,7 +8,7 @@ import 'package:gitjournal/analytics.dart'; import 'package:gitjournal/apis/git_migration.dart'; import 'package:gitjournal/appstate.dart'; import 'package:gitjournal/core/note.dart'; -import 'package:gitjournal/core/note_folder.dart'; +import 'package:gitjournal/core/notes_folder.dart'; import 'package:gitjournal/core/note_fileName.dart'; import 'package:gitjournal/storage/git_storage.dart'; import 'package:path/path.dart' as p; @@ -57,7 +57,7 @@ class StateContainerState extends State { dirName: appState.localGitRepoPath, ); } - appState.noteFolder = NoteFolder(noteRepo.notesBasePath); + appState.noteFolder = NotesFolder(noteRepo.notesBasePath); // Just a fail safe if (!appState.remoteGitRepoConfigured) { @@ -225,7 +225,7 @@ class StateContainerState extends State { baseDirectory: appState.gitBaseDirectory, dirName: appState.remoteGitRepoFolderName, ); - appState.noteFolder = NoteFolder(noteRepo.notesBasePath); + appState.noteFolder = NotesFolder(noteRepo.notesBasePath); await _persistConfig(); _loadNotesFromDisk(); diff --git a/lib/widgets/folder_tree_view.dart b/lib/widgets/folder_tree_view.dart index bab65860..85a9d881 100644 --- a/lib/widgets/folder_tree_view.dart +++ b/lib/widgets/folder_tree_view.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; -import 'package:gitjournal/core/note_folder.dart'; +import 'package:gitjournal/core/notes_folder.dart'; -typedef void FolderSelectedCallback(NoteFolder folder); +typedef void FolderSelectedCallback(NotesFolder folder); class FolderTreeView extends StatelessWidget { - final NoteFolder rootFolder; + final NotesFolder rootFolder; final FolderSelectedCallback onFolderSelected; FolderTreeView({ @@ -29,7 +29,7 @@ class FolderTreeView extends StatelessWidget { } class FolderTile extends StatefulWidget { - final NoteFolder folder; + final NotesFolder folder; final FolderSelectedCallback onFolderSelected; FolderTile(this.folder, this.onFolderSelected);