Allow remote sync frequency to be controller

For now the only 2 options are - automaitic and manual.

I rather name it "Automatic" instead of "After each change" as that way
I can choose to do it more frequently, if desired.

Fixes #8
This commit is contained in:
Vishesh Handa
2020-02-09 22:21:02 +01:00
parent 9c02f1d8ac
commit e0f03d703e
4 changed files with 70 additions and 2 deletions

View File

@ -6,6 +6,8 @@ import 'package:fimber/fimber.dart';
import 'package:git_bindings/git_bindings.dart'; import 'package:git_bindings/git_bindings.dart';
import 'package:gitjournal/screens/githostsetup_sshkey.dart'; import 'package:gitjournal/screens/githostsetup_sshkey.dart';
import 'package:gitjournal/screens/settings_widgets.dart';
import 'package:gitjournal/settings.dart';
import 'package:gitjournal/utils.dart'; import 'package:gitjournal/utils.dart';
class GitRemoteSettingsScreen extends StatefulWidget { class GitRemoteSettingsScreen extends StatefulWidget {
@ -30,6 +32,7 @@ class _GitRemoteSettingsScreenState extends State<GitRemoteSettingsScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var textTheme = Theme.of(context).textTheme; var textTheme = Theme.of(context).textTheme;
var settings = Settings.instance;
var body = Column( var body = Column(
children: <Widget>[ children: <Widget>[
@ -50,6 +53,19 @@ class _GitRemoteSettingsScreenState extends State<GitRemoteSettingsScreen> {
text: "Regnerate Key", text: "Regnerate Key",
onPressed: () => _generateSshKey(context), onPressed: () => _generateSshKey(context),
), ),
ListPreference(
title: "Sync Frequency",
currentOption: settings.remoteSyncFrequency.toPublicString(),
options: RemoteSyncFrequency.options
.map((f) => f.toPublicString())
.toList(),
onChange: (String publicStr) {
var val = RemoteSyncFrequency.fromPublicString(publicStr);
Settings.instance.remoteSyncFrequency = val;
Settings.instance.save();
setState(() {});
},
),
], ],
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
); );

View File

@ -43,7 +43,6 @@ class ListPreference extends StatelessWidget {
children: children, children: children,
), ),
), ),
contentPadding: const EdgeInsets.all(0.0),
actions: <Widget>[ actions: <Widget>[
FlatButton( FlatButton(
child: const Text('CANCEL'), child: const Text('CANCEL'),

View File

@ -19,6 +19,8 @@ class Settings {
String yamlModifiedKey = "modified"; String yamlModifiedKey = "modified";
String defaultNewNoteFolder = "journal"; String defaultNewNoteFolder = "journal";
RemoteSyncFrequency remoteSyncFrequency = RemoteSyncFrequency.Default;
int version = 0; int version = 0;
void load(SharedPreferences pref) { void load(SharedPreferences pref) {
@ -36,6 +38,10 @@ class Settings {
yamlModifiedKey = pref.getString("yamlModifiedKey") ?? yamlModifiedKey; yamlModifiedKey = pref.getString("yamlModifiedKey") ?? yamlModifiedKey;
defaultNewNoteFolder = defaultNewNoteFolder =
pref.getString("defaultNewNoteFolder") ?? defaultNewNoteFolder; pref.getString("defaultNewNoteFolder") ?? defaultNewNoteFolder;
remoteSyncFrequency = RemoteSyncFrequency.fromInternalString(
pref.getString("remoteSyncFrequency"));
version = pref.getInt("settingsVersion") ?? version; version = pref.getInt("settingsVersion") ?? version;
} }
@ -48,6 +54,8 @@ class Settings {
pref.setBool("collectCrashReports", collectCrashReports); pref.setBool("collectCrashReports", collectCrashReports);
pref.setString("yamlModifiedKey", yamlModifiedKey); pref.setString("yamlModifiedKey", yamlModifiedKey);
pref.setString("defaultNewNoteFolder", defaultNewNoteFolder); pref.setString("defaultNewNoteFolder", defaultNewNoteFolder);
pref.setString(
"remoteSyncFrequency", remoteSyncFrequency.toInternalString());
pref.setInt("settingsVersion", version); pref.setInt("settingsVersion", version);
// Shouldn't we check if something has actually changed? // Shouldn't we check if something has actually changed?
@ -132,3 +140,43 @@ class NoteFileNameFormat {
return ""; return "";
} }
} }
class RemoteSyncFrequency {
static const Automatic = RemoteSyncFrequency("Automatic");
static const Manual = RemoteSyncFrequency("Manual");
static const Default = Automatic;
final String _str;
const RemoteSyncFrequency(this._str);
String toInternalString() {
return _str;
}
String toPublicString() {
return _str;
}
static const options = <RemoteSyncFrequency>[
Automatic,
Manual,
];
static RemoteSyncFrequency fromInternalString(String str) {
for (var opt in options) {
if (opt.toInternalString() == str) {
return opt;
}
}
return Default;
}
static RemoteSyncFrequency fromPublicString(String str) {
for (var opt in options) {
if (opt.toPublicString() == str) {
return opt;
}
}
return Default;
}
}

View File

@ -9,6 +9,7 @@ import 'package:gitjournal/appstate.dart';
import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/note.dart';
import 'package:gitjournal/core/notes_folder.dart'; import 'package:gitjournal/core/notes_folder.dart';
import 'package:gitjournal/core/git_repo.dart'; import 'package:gitjournal/core/git_repo.dart';
import 'package:gitjournal/settings.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter_crashlytics/flutter_crashlytics.dart'; import 'package:flutter_crashlytics/flutter_crashlytics.dart';
@ -116,7 +117,11 @@ class StateContainerState extends State<StateContainer> {
await _loadNotes(); await _loadNotes();
} }
Future<void> _syncNotes() { Future<void> _syncNotes() async {
var freq = Settings.instance.remoteSyncFrequency;
if (freq != RemoteSyncFrequency.Automatic) {
return;
}
return syncNotes(doNotThrow: true); return syncNotes(doNotThrow: true);
} }