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

View File

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

View File

@ -407,7 +407,7 @@ class _FolderViewState extends State<FolderView> {
} }
List<Widget> _buildNoteActions() { List<Widget> _buildNoteActions() {
final settings = Provider.of<Settings>(context); final appState = Provider.of<StateContainer>(context).appState;
var extraActions = PopupMenuButton<DropDownChoices>( var extraActions = PopupMenuButton<DropDownChoices>(
key: const ValueKey("PopupMenu"), key: const ValueKey("PopupMenu"),
@ -443,7 +443,7 @@ class _FolderViewState extends State<FolderView> {
onPressed: _folderViewChooserSelected, onPressed: _folderViewChooserSelected,
key: const ValueKey("FolderViewSelector"), key: const ValueKey("FolderViewSelector"),
), ),
if (settings.remoteGitRepoConfigured) SyncButton(), if (appState.remoteGitRepoConfigured) SyncButton(),
IconButton( IconButton(
icon: const Icon(Icons.search), icon: const Icon(Icons.search),
onPressed: () { 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_tags.dart';
import 'package:gitjournal/screens/settings_widgets.dart'; import 'package:gitjournal/screens/settings_widgets.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/settings.dart';
import 'package:gitjournal/state_container.dart';
import 'package:gitjournal/utils.dart'; import 'package:gitjournal/utils.dart';
import 'package:gitjournal/widgets/folder_selection_dialog.dart'; import 'package:gitjournal/widgets/folder_selection_dialog.dart';
import 'package:gitjournal/widgets/pro_overlay.dart'; import 'package:gitjournal/widgets/pro_overlay.dart';
@ -64,7 +65,7 @@ class SettingsListState extends State<SettingsList> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
var settings = Provider.of<Settings>(context); var settings = Provider.of<Settings>(context);
var appSettings = Provider.of<AppSettings>(context); var appSettings = Provider.of<AppSettings>(context);
var remoteGitConfigured = settings.remoteGitRepoConfigured; final appState = Provider.of<StateContainer>(context).appState;
var saveGitAuthor = (String gitAuthor) { var saveGitAuthor = (String gitAuthor) {
settings.gitAuthor = gitAuthor; settings.gitAuthor = gitAuthor;
@ -225,7 +226,7 @@ class SettingsListState extends State<SettingsList> {
); );
Navigator.of(context).push(route); Navigator.of(context).push(route);
}, },
enabled: remoteGitConfigured, enabled: appState.remoteGitRepoConfigured,
), ),
const SizedBox(height: 16.0), const SizedBox(height: 16.0),
ListTile( ListTile(

View File

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

View File

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

View File

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