From 96ce50bc689d80a3c6ef6445c11f39e5a4fc26eb Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Thu, 4 Feb 2021 10:27:29 +0100 Subject: [PATCH] Basic Implementation of RepoManager This is for multiple-repo setup. --- lib/app.dart | 5 +-- lib/repository_manager.dart | 64 +++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 lib/repository_manager.dart diff --git a/lib/app.dart b/lib/app.dart index 7072ad61..8a18913d 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -21,6 +21,7 @@ import 'package:gitjournal/app_router.dart'; import 'package:gitjournal/app_settings.dart'; import 'package:gitjournal/iap.dart'; import 'package:gitjournal/repository.dart'; +import 'package:gitjournal/repository_manager.dart'; import 'package:gitjournal/settings.dart'; import 'package:gitjournal/themes.dart'; import 'package:gitjournal/utils/logger.dart'; @@ -48,12 +49,12 @@ class JournalApp extends StatefulWidget { final gitBaseDirectory = (await getApplicationDocumentsDirectory()).path; final cacheDir = (await getApplicationSupportDirectory()).path; - var repo = await Repository.load( + var repoManager = RepositoryManager( gitBaseDir: gitBaseDirectory, cacheDir: cacheDir, pref: pref, - id: DEFAULT_ID, ); + var repo = await repoManager.buildActiveRepository(); Widget app = ChangeNotifierProvider.value( value: repo, diff --git a/lib/repository_manager.dart b/lib/repository_manager.dart new file mode 100644 index 00000000..ec9ffa9e --- /dev/null +++ b/lib/repository_manager.dart @@ -0,0 +1,64 @@ +import 'dart:io'; + +import 'package:flutter/material.dart'; + +import 'package:path/path.dart' as p; +import 'package:shared_preferences/shared_preferences.dart'; + +import 'package:gitjournal/repository.dart'; +import 'package:gitjournal/settings.dart'; + +class RepositoryInfo { + String id; + String folderName; + IconData iconData; + + // Add serialization to json / and from +} + +// Make this info a change notifier where the current value is ? +// -> things required to create the Repo? +class RepositoryManager with ChangeNotifier { + List repoIds; + String currentId; + + Repository _repo; + + final String gitBaseDir; + final String cacheDir; + final SharedPreferences pref; + + RepositoryManager({ + @required this.gitBaseDir, + @required this.cacheDir, + @required this.pref, + }) { + // From the pref load all the RepositoryInfos + } + + Future buildActiveRepository() async { + if (_repo != null) { + return _repo; + } + + currentId ??= DEFAULT_ID; + var repoCacheDir = p.join(cacheDir, currentId); + await Directory(repoCacheDir).create(recursive: true); + + _repo = await Repository.load( + gitBaseDir: gitBaseDir, + cacheDir: repoCacheDir, + pref: pref, + id: currentId, + ); + return _repo; + } + + // call notifyObservers(); + // --> After that what? + + // addRepo(info) -> id + // removeRepo(id) + // selectRepo(id) + // updateRepo(id, info) +}