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 #18
This commit is contained in:
lib
40
lib/note_folder.dart
Normal file
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 {
|
||||
|
Reference in New Issue
Block a user