1
0
mirror of https://github.com/GitJournal/GitJournal.git synced 2025-07-25 03:31:44 +08:00

Add a NoteFolder entity

This is the first step to add Folder support. For now the backend
understands the concepts of Folders, but the JournalList just shows all
of the notes, regardless of the folder.

Related to issue 
This commit is contained in:
Vishesh Handa
2019-12-01 10:35:09 +01:00
parent 6a9fe72e8d
commit 4dbcabb183
2 changed files with 67 additions and 9 deletions

40
lib/note_folder.dart Normal file

@ -0,0 +1,40 @@
import 'package:gitjournal/note.dart';
class NoteFSEntity {
NoteFolder parent;
NoteFolder folder;
Note note;
NoteFSEntity(this.parent, {this.folder, this.note}) {
assert(folder != null || note != null);
}
bool get isNote {
return note != null;
}
bool get isFolder {
return folder != null;
}
}
class NoteFolder {
List<NoteFSEntity> entities = [];
String folderPath;
NoteFolder(this.folderPath);
// Recurisvely gets all Notes within this folder
List<Note> getAllNotes() {
var notes = <Note>[];
for (var entity in entities) {
if (entity.isNote) {
notes.add(entity.note);
} else {
notes.addAll(entity.folder.getAllNotes());
}
}
return notes;
}
}

@ -5,6 +5,7 @@ import 'package:fimber/fimber.dart';
import 'package:flutter/foundation.dart';
import 'package:gitjournal/apis/git.dart';
import 'package:gitjournal/note.dart';
import 'package:gitjournal/note_folder.dart';
import 'package:gitjournal/settings.dart';
import 'package:path/path.dart' as p;
@ -76,22 +77,39 @@ class GitNoteRepository {
}
Future<List<Note>> listNotes() async {
final dir = Directory(notesBasePath);
var noteFolder = await loadFolder(NoteFolder(notesBasePath));
var notes = noteFolder.getAllNotes();
notes.sort((a, b) => b.compareTo(a));
var notes = <Note>[];
var lister = dir.list(recursive: false);
await for (var fileEntity in lister) {
var note = Note(fileEntity.path);
return notes;
}
// FIXME: This asynchronously loads everything. Maybe it should just list them, and the individual entities
// should be loaded as required?
Future<NoteFolder> loadFolder(NoteFolder rootFolder) async {
final dir = Directory(rootFolder.folderPath);
var lister = dir.list(recursive: false, followLinks: false);
await for (var fsEntity in lister) {
if (fsEntity is Directory) {
var subFolder = NoteFolder(fsEntity.path);
subFolder = await loadFolder(subFolder);
var noteFSEntity = NoteFSEntity(rootFolder, folder: subFolder);
rootFolder.entities.add(noteFSEntity);
}
var note = Note(fsEntity.path);
if (!note.filePath.toLowerCase().endsWith('.md')) {
continue;
}
await note.load();
notes.add(note);
var noteFSEntity = NoteFSEntity(rootFolder, note: note);
rootFolder.entities.add(noteFSEntity);
}
// Reverse sort
notes.sort((a, b) => b.compareTo(a));
return notes;
return rootFolder;
}
Future<bool> sync() async {