Basic Implementation of RepoManager

This is for multiple-repo setup.
This commit is contained in:
Vishesh Handa
2021-02-04 10:27:29 +01:00
parent 8eb8905d6d
commit 96ce50bc68
2 changed files with 67 additions and 2 deletions

View File

@ -21,6 +21,7 @@ import 'package:gitjournal/app_router.dart';
import 'package:gitjournal/app_settings.dart'; import 'package:gitjournal/app_settings.dart';
import 'package:gitjournal/iap.dart'; import 'package:gitjournal/iap.dart';
import 'package:gitjournal/repository.dart'; import 'package:gitjournal/repository.dart';
import 'package:gitjournal/repository_manager.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/settings.dart';
import 'package:gitjournal/themes.dart'; import 'package:gitjournal/themes.dart';
import 'package:gitjournal/utils/logger.dart'; import 'package:gitjournal/utils/logger.dart';
@ -48,12 +49,12 @@ class JournalApp extends StatefulWidget {
final gitBaseDirectory = (await getApplicationDocumentsDirectory()).path; final gitBaseDirectory = (await getApplicationDocumentsDirectory()).path;
final cacheDir = (await getApplicationSupportDirectory()).path; final cacheDir = (await getApplicationSupportDirectory()).path;
var repo = await Repository.load( var repoManager = RepositoryManager(
gitBaseDir: gitBaseDirectory, gitBaseDir: gitBaseDirectory,
cacheDir: cacheDir, cacheDir: cacheDir,
pref: pref, pref: pref,
id: DEFAULT_ID,
); );
var repo = await repoManager.buildActiveRepository();
Widget app = ChangeNotifierProvider.value( Widget app = ChangeNotifierProvider.value(
value: repo, value: repo,

View File

@ -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<String> 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<Repository> 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)
}