From fd74a86abf548ff28cbb8ebb95d5c030f48d8bb6 Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Fri, 16 Oct 2020 15:13:34 +0200 Subject: [PATCH] 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. --- lib/app.dart | 14 ++++++++++---- lib/appstate.dart | 2 ++ lib/screens/folder_view.dart | 4 ++-- lib/screens/settings_screen.dart | 5 +++-- lib/settings.dart | 20 ++++++++------------ lib/state_container.dart | 6 ++---- lib/widgets/app_drawer.dart | 6 +++--- 7 files changed, 30 insertions(+), 27 deletions(-) diff --git a/lib/app.dart b/lib/app.dart index 3fb4419b..90945e24 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -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( diff --git a/lib/appstate.dart b/lib/appstate.dart index a5c93de8..7f4f4978 100644 --- a/lib/appstate.dart +++ b/lib/appstate.dart @@ -18,4 +18,6 @@ class AppState { NotesFolderFS notesFolder; var gitBaseDirectory = ""; + + bool remoteGitRepoConfigured = false; } diff --git a/lib/screens/folder_view.dart b/lib/screens/folder_view.dart index 48bf2c9e..79d52fa9 100644 --- a/lib/screens/folder_view.dart +++ b/lib/screens/folder_view.dart @@ -407,7 +407,7 @@ class _FolderViewState extends State { } List _buildNoteActions() { - final settings = Provider.of(context); + final appState = Provider.of(context).appState; var extraActions = PopupMenuButton( key: const ValueKey("PopupMenu"), @@ -443,7 +443,7 @@ class _FolderViewState extends State { onPressed: _folderViewChooserSelected, key: const ValueKey("FolderViewSelector"), ), - if (settings.remoteGitRepoConfigured) SyncButton(), + if (appState.remoteGitRepoConfigured) SyncButton(), IconButton( icon: const Icon(Icons.search), onPressed: () { diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart index 6824fed7..463189a8 100644 --- a/lib/screens/settings_screen.dart +++ b/lib/screens/settings_screen.dart @@ -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 { Widget build(BuildContext context) { var settings = Provider.of(context); var appSettings = Provider.of(context); - var remoteGitConfigured = settings.remoteGitRepoConfigured; + final appState = Provider.of(context).appState; var saveGitAuthor = (String gitAuthor) { settings.gitAuthor = gitAuthor; @@ -225,7 +226,7 @@ class SettingsListState extends State { ); Navigator.of(context).push(route); }, - enabled: remoteGitConfigured, + enabled: appState.remoteGitRepoConfigured, ), const SizedBox(height: 16.0), ListTile( diff --git a/lib/settings.dart b/lib/settings.dart index 691759c7..71dfd52d 100644 --- a/lib/settings.dart +++ b/lib/settings.dart @@ -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"); diff --git a/lib/state_container.dart b/lib/state_container.dart index b21629af..73786e53 100644 --- a/lib/state_container.dart +++ b/lib/state_container.dart @@ -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 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(); diff --git a/lib/widgets/app_drawer.dart b/lib/widgets/app_drawer.dart index 0c5e1b43..0be613eb 100644 --- a/lib/widgets/app_drawer.dart +++ b/lib/widgets/app_drawer.dart @@ -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(context); + var appState = Provider.of(context).appState; var appSettings = Provider.of(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),