Remove the whole local/remoteConfigured settings

We now infer this by checking if the directory exists, and by reading
the git config. It's a bit slower, but it's a far better method. I can
add a cache later, if it turns out to be too slow.
This commit is contained in:
Vishesh Handa
2020-10-16 15:13:34 +02:00
parent c63b984443
commit fd74a86abf
7 changed files with 30 additions and 27 deletions

View File

@ -69,11 +69,13 @@ class JournalApp extends StatefulWidget {
await settings.migrate(pref, appState.gitBaseDirectory);
// FIXME: This can be replaced with a fs stat
if (settings.localGitRepoConfigured == false) {
var gitRepoDir =
p.join(appState.gitBaseDirectory, settings.internalRepoFolderName);
var repoDirStat = File(gitRepoDir).statSync();
if (repoDirStat.type != FileSystemEntityType.directory) {
settings.internalRepoFolderName = "journal";
// FIXME: What about exceptions!
var repoPath = p.join(
appState.gitBaseDirectory,
settings.internalRepoFolderName,
@ -82,9 +84,13 @@ class JournalApp extends StatefulWidget {
Log.i("Calling GitInit at: $repoPath");
await GitRepository.init(repoPath);
settings.localGitRepoConfigured = true;
settings.save();
} else {
var gitRepo = await GitRepository.load(gitRepoDir);
var remotes = gitRepo.config.remotes;
appState.remoteGitRepoConfigured = remotes.isNotEmpty;
}
final cacheDir = await getApplicationSupportDirectory();
Widget app = ChangeNotifierProvider.value(

View File

@ -18,4 +18,6 @@ class AppState {
NotesFolderFS notesFolder;
var gitBaseDirectory = "";
bool remoteGitRepoConfigured = false;
}

View File

@ -407,7 +407,7 @@ class _FolderViewState extends State<FolderView> {
}
List<Widget> _buildNoteActions() {
final settings = Provider.of<Settings>(context);
final appState = Provider.of<StateContainer>(context).appState;
var extraActions = PopupMenuButton<DropDownChoices>(
key: const ValueKey("PopupMenu"),
@ -443,7 +443,7 @@ class _FolderViewState extends State<FolderView> {
onPressed: _folderViewChooserSelected,
key: const ValueKey("FolderViewSelector"),
),
if (settings.remoteGitRepoConfigured) SyncButton(),
if (appState.remoteGitRepoConfigured) SyncButton(),
IconButton(
icon: const Icon(Icons.search),
onPressed: () {

View File

@ -26,6 +26,7 @@ import 'package:gitjournal/screens/settings_note_metadata.dart';
import 'package:gitjournal/screens/settings_tags.dart';
import 'package:gitjournal/screens/settings_widgets.dart';
import 'package:gitjournal/settings.dart';
import 'package:gitjournal/state_container.dart';
import 'package:gitjournal/utils.dart';
import 'package:gitjournal/widgets/folder_selection_dialog.dart';
import 'package:gitjournal/widgets/pro_overlay.dart';
@ -64,7 +65,7 @@ class SettingsListState extends State<SettingsList> {
Widget build(BuildContext context) {
var settings = Provider.of<Settings>(context);
var appSettings = Provider.of<AppSettings>(context);
var remoteGitConfigured = settings.remoteGitRepoConfigured;
final appState = Provider.of<StateContainer>(context).appState;
var saveGitAuthor = (String gitAuthor) {
settings.gitAuthor = gitAuthor;
@ -225,7 +226,7 @@ class SettingsListState extends State<SettingsList> {
);
Navigator.of(context).push(route);
},
enabled: remoteGitConfigured,
enabled: appState.remoteGitRepoConfigured,
),
const SizedBox(height: 16.0),
ListTile(

View File

@ -59,11 +59,7 @@ class Settings extends ChangeNotifier {
bool bottomMenuBar = true;
// From AppState
String internalRepoFolderName = "";
bool localGitRepoConfigured = false;
bool remoteGitRepoConfigured = false;
String internalRepoFolderName = "journal";
bool storeInternally = true;
String storageLocation = "";
@ -132,9 +128,8 @@ class Settings extends ChangeNotifier {
pref.getStringList("inlineTagPrefixes")?.toSet() ?? inlineTagPrefixes;
// From AppState
localGitRepoConfigured = pref.getBool("localGitRepoConfigured") ?? false;
remoteGitRepoConfigured = pref.getBool("remoteGitRepoConfigured") ?? false;
internalRepoFolderName = pref.getString("remoteGitRepoPath") ?? "";
internalRepoFolderName =
pref.getString("remoteGitRepoPath") ?? internalRepoFolderName;
bottomMenuBar = pref.getBool("bottomMenuBar") ?? bottomMenuBar;
storeInternally = pref.getBool("storeInternally") ?? storeInternally;
@ -221,8 +216,6 @@ class Settings extends ChangeNotifier {
pref.setInt("settingsVersion", version);
pref.setBool("localGitRepoConfigured", localGitRepoConfigured);
pref.setBool("remoteGitRepoConfigured", remoteGitRepoConfigured);
pref.setString("remoteGitRepoPath", internalRepoFolderName);
notifyListeners();
@ -301,8 +294,6 @@ class Settings extends ChangeNotifier {
'swipeToDelete': swipeToDelete.toString(),
'inlineTagPrefixes': inlineTagPrefixes.join(' '),
'emojiParser': emojiParser.toString(),
'localGitRepoConfigured': localGitRepoConfigured.toString(),
'remoteGitRepoConfigured': remoteGitRepoConfigured.toString(),
'remoteGitRepoPath': internalRepoFolderName.toString(),
'bottomMenuBar': bottomMenuBar.toString(),
'storeInternally': storeInternally.toString(),
@ -323,6 +314,11 @@ class Settings extends ChangeNotifier {
var cache = p.join(gitBaseDir, "cache.json");
await File(cache).delete(recursive: true);
var localGitRepoConfigured =
pref.getBool("localGitRepoConfigured") ?? false;
var remoteGitRepoConfigured =
pref.getBool("remoteGitRepoConfigured") ?? false;
if (localGitRepoConfigured && !remoteGitRepoConfigured) {
Log.i("Migrating from local and remote repos to a single one");
var oldName = p.join(gitBaseDir, "journal_local");

View File

@ -41,7 +41,6 @@ class StateContainer with ChangeNotifier {
@required this.gitBaseDirectory,
@required this.cacheDirectory,
}) {
assert(settings.localGitRepoConfigured);
var repoPath = p.join(gitBaseDirectory, settings.internalRepoFolderName);
_gitRepo = GitNoteRepository(gitDirPath: repoPath, settings: settings);
@ -50,7 +49,7 @@ class StateContainer with ChangeNotifier {
// Makes it easier to filter the analytics
getAnalytics().firebase.setUserProperty(
name: 'onboarded',
value: settings.remoteGitRepoConfigured.toString(),
value: appState.remoteGitRepoConfigured.toString(),
);
var cachePath = p.join(cacheDirectory, "cache.json");
@ -84,7 +83,7 @@ class StateContainer with ChangeNotifier {
}
Future<void> syncNotes({bool doNotThrow = false}) async {
if (!settings.remoteGitRepoConfigured) {
if (!appState.remoteGitRepoConfigured) {
Log.d("Not syncing because RemoteRepo not configured");
return true;
}
@ -340,7 +339,6 @@ class StateContainer with ChangeNotifier {
await repo.setUpstreamTo(remote, remoteBranchName);
await _gitRepo.merge();
settings.remoteGitRepoConfigured = true;
await _persistConfig();
_loadNotes();

View File

@ -13,7 +13,7 @@ import 'package:url_launcher/url_launcher.dart';
import 'package:gitjournal/analytics.dart';
import 'package:gitjournal/app_settings.dart';
import 'package:gitjournal/settings.dart';
import 'package:gitjournal/state_container.dart';
import 'package:gitjournal/utils.dart';
import 'package:gitjournal/utils/logger.dart';
@ -21,12 +21,12 @@ class AppDrawer extends StatelessWidget {
@override
Widget build(BuildContext context) {
Widget setupGitButton;
var settings = Provider.of<Settings>(context);
var appState = Provider.of<StateContainer>(context).appState;
var appSettings = Provider.of<AppSettings>(context);
var textStyle = Theme.of(context).textTheme.bodyText1;
var currentRoute = ModalRoute.of(context).settings.name;
if (!settings.remoteGitRepoConfigured) {
if (!appState.remoteGitRepoConfigured) {
setupGitButton = ListTile(
leading: Icon(Icons.sync, color: textStyle.color),
title: Text(tr('drawer.setup'), style: textStyle),