import 'dart:async'; import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:journal/file_storage.dart'; import 'package:journal/note.dart'; import 'package:journal/serializers.dart'; import 'package:path_provider/path_provider.dart'; import 'package:path/path.dart' as p; abstract class NoteRepository { // Syncs the repo // - git pull with an auto merge // - git push // TODO: Better error message! Future sync(); Future addNote(Note note); Future updateNote(Note note); Future removeNote(Note note); Future> listNotes(); } Future getNotesDir() async { var appDir = await getApplicationDocumentsDirectory(); var dir = new Directory(p.join(appDir.path, "notes")); await dir.create(); return dir; } class GitNoteRepository implements NoteRepository { FileStorage _fileStorage = new FileStorage( getDirectory: getNotesDir, noteSerializer: new MarkdownYAMLSerializer(), fileNameGenerator: (Note note) => note.id, ); final String gitUrl; final String dirPath; GitNoteRepository({ @required this.gitUrl, @required this.dirPath, }) { // FIXME: This isn't correct. The gitUrl might not be cloned at this point! } @override Future addNote(Note note) async { return _fileStorage.addNote(note); } @override Future> listNotes() { return _fileStorage.listNotes(); } @override Future removeNote(Note note) async { return _fileStorage.removeNote(note); } @override Future sync() async { return false; } @override Future updateNote(Note note) async { return _fileStorage.updateNote(note); } }