diff --git a/lib/core/flattened_notes_folder.dart b/lib/core/flattened_notes_folder.dart index 9e60b89b..9303702a 100644 --- a/lib/core/flattened_notes_folder.dart +++ b/lib/core/flattened_notes_folder.dart @@ -103,4 +103,14 @@ class FlattenedNotesFolder with NotesFolderNotifier implements NotesFolder { @override String get name => "All Notes"; + + @override + NotesFolderConfig get config { + return _parentFolder.config; + } + + @override + set config(NotesFolderConfig conf) { + _parentFolder.config = conf; + } } diff --git a/lib/core/notes_cache.dart b/lib/core/notes_cache.dart index 04ed56b0..1d5cef12 100644 --- a/lib/core/notes_cache.dart +++ b/lib/core/notes_cache.dart @@ -57,15 +57,13 @@ class NotesCache { } } - Future buildCache( - NotesFolderFS rootFolder, - SortingMode sortingMode, - ) async { + Future buildCache(NotesFolderFS rootFolder) async { if (!enabled) return; print("Saving the NotesCache"); var notes = rootFolder.getAllNotes(); + var sortingMode = rootFolder.config.sortingMode; var fileList = _fetchFirst10(notes, sortingMode).map((f) => f.filePath).toList(); return saveToDisk(fileList); diff --git a/lib/core/notes_folder.dart b/lib/core/notes_folder.dart index 109a2978..aa50e0a3 100644 --- a/lib/core/notes_folder.dart +++ b/lib/core/notes_folder.dart @@ -1,6 +1,9 @@ import 'note.dart'; +import 'notes_folder_config.dart'; import 'notes_folder_notifier.dart'; +export 'notes_folder_config.dart'; + abstract class NotesFolder implements NotesFolderNotifier { bool get isEmpty; bool get hasNotes; @@ -11,5 +14,8 @@ abstract class NotesFolder implements NotesFolderNotifier { NotesFolder get parent; NotesFolder get fsFolder; + NotesFolderConfig get config; + set config(NotesFolderConfig config); + String pathSpec(); } diff --git a/lib/core/notes_folder_fs.dart b/lib/core/notes_folder_fs.dart index 8b9e0773..48c6187a 100644 --- a/lib/core/notes_folder_fs.dart +++ b/lib/core/notes_folder_fs.dart @@ -341,4 +341,14 @@ class NotesFolderFS with NotesFolderNotifier implements NotesFolder { return null; } + + @override + NotesFolderConfig get config { + return NotesFolderConfig.fromSettings(); + } + + @override + set config(NotesFolderConfig conf) { + conf.save(); + } } diff --git a/lib/core/sorted_notes_folder.dart b/lib/core/sorted_notes_folder.dart index 7197ffa4..85655c98 100644 --- a/lib/core/sorted_notes_folder.dart +++ b/lib/core/sorted_notes_folder.dart @@ -164,4 +164,14 @@ class SortedNotesFolder with NotesFolderNotifier implements NotesFolder { NotesFolder get fsFolder { return folder; } + + @override + NotesFolderConfig get config { + return folder.config; + } + + @override + set config(NotesFolderConfig config) { + folder.config = config; + } } diff --git a/lib/core/virtual_notes_folder.dart b/lib/core/virtual_notes_folder.dart index 87272a6a..83f2debe 100644 --- a/lib/core/virtual_notes_folder.dart +++ b/lib/core/virtual_notes_folder.dart @@ -32,4 +32,14 @@ class VirtualNotesFolder with NotesFolderNotifier implements NotesFolder { NotesFolder get fsFolder { return null; } + + @override + NotesFolderConfig get config { + return NotesFolderConfig.fromSettings(); + } + + @override + set config(NotesFolderConfig conf) { + conf.save(); + } } diff --git a/lib/folder_views/journal_view.dart b/lib/folder_views/journal_view.dart index dad617af..0744277a 100644 --- a/lib/folder_views/journal_view.dart +++ b/lib/folder_views/journal_view.dart @@ -5,7 +5,6 @@ import 'package:gitjournal/folder_views/list_view.dart'; import 'package:intl/intl.dart'; import 'package:gitjournal/core/sorting_mode.dart'; -import 'package:gitjournal/settings.dart'; import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/notes_folder.dart'; @@ -37,12 +36,15 @@ class JournalView extends StatelessWidget { Widget _buildRow(BuildContext context, Note note) { Widget titleWidget = Container(); var textTheme = Theme.of(context).textTheme; + DateTime date; - if (Settings.instance.sortingMode == SortingMode.Modified) { + var sortingMode = folder.config.sortingMode; + if (sortingMode == SortingMode.Modified) { date = note.modified; - } else if (Settings.instance.sortingMode == SortingMode.Created) { + } else if (sortingMode == SortingMode.Created) { date = note.created; } + if (date != null) { var dateStr = _dateFormat.format(date); var time = _timeFormat.format(date); diff --git a/lib/folder_views/standard_view.dart b/lib/folder_views/standard_view.dart index f3f4f293..3769cb0f 100644 --- a/lib/folder_views/standard_view.dart +++ b/lib/folder_views/standard_view.dart @@ -2,7 +2,6 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:gitjournal/core/sorting_mode.dart'; import 'package:gitjournal/folder_views/list_view.dart'; -import 'package:gitjournal/settings.dart'; import 'package:intl/intl.dart'; @@ -79,11 +78,13 @@ class StandardView extends StatelessWidget { Widget trailing = Container(); DateTime date; - if (Settings.instance.sortingMode == SortingMode.Modified) { + var sortingMode = folder.config.sortingMode; + if (sortingMode == SortingMode.Modified) { date = note.modified; - } else if (Settings.instance.sortingMode == SortingMode.Created) { + } else if (sortingMode == SortingMode.Created) { date = note.created; } + if (date != null) { var dateStr = _dateFormat.format(date); trailing = Text(dateStr, style: textTheme.caption); diff --git a/lib/screens/folder_view.dart b/lib/screens/folder_view.dart index 0d58aec3..10c45eaf 100644 --- a/lib/screens/folder_view.dart +++ b/lib/screens/folder_view.dart @@ -46,48 +46,23 @@ class _FolderViewState extends State { super.initState(); sortedNotesFolder = SortedNotesFolder( folder: widget.notesFolder, - sortingMode: Settings.instance.sortingMode, + sortingMode: widget.notesFolder.config.sortingMode, ); - switch (Settings.instance.defaultView) { - case SettingsFolderViewType.Standard: - _viewType = FolderViewType.Standard; - break; - case SettingsFolderViewType.Journal: - _viewType = FolderViewType.Journal; - break; - case SettingsFolderViewType.Card: - _viewType = FolderViewType.Card; - break; - case SettingsFolderViewType.Grid: - _viewType = FolderViewType.Grid; - break; - } - - _showSummary = Settings.instance.showNoteSummary; - - switch (Settings.instance.folderViewHeaderType) { - case "TitleGenerated": - _headerType = StandardViewHeader.TitleGenerated; - break; - case "FileName": - _headerType = StandardViewHeader.FileName; - break; - case "TitleOrFileName": - _headerType = StandardViewHeader.TitleOrFileName; - break; - } + _viewType = widget.notesFolder.config.defaultView; + _showSummary = widget.notesFolder.config.showNoteSummary; + _headerType = widget.notesFolder.config.viewHeader; } @override Widget build(BuildContext context) { var container = Provider.of(context); final appState = container.appState; + final defaultEditor = widget.notesFolder.config.defaultEditor; var createButton = FloatingActionButton( key: const ValueKey("FAB"), - onPressed: () => - _newPost(context, Settings.instance.defaultEditor.toEditorType()), + onPressed: () => _newPost(context, defaultEditor), child: Icon(Icons.add), ); @@ -263,9 +238,10 @@ class _FolderViewState extends State { if (newSortingMode != null) { setState(() { + sortedNotesFolder.config = sortedNotesFolder.config.copyWith( + sortingMode: newSortingMode, + ); sortedNotesFolder.changeSortingMode(newSortingMode); - Settings.instance.sortingMode = newSortingMode; - Settings.instance.save(); }); } } @@ -279,29 +255,21 @@ class _FolderViewState extends State { _headerType = newHeader; }); - String ht; - switch (newHeader) { - case StandardViewHeader.FileName: - ht = "FileName"; - break; - case StandardViewHeader.TitleGenerated: - ht = "TitleGenerated"; - break; - case StandardViewHeader.TitleOrFileName: - ht = "TitleOrFileName"; - break; - } - - Settings.instance.folderViewHeaderType = ht; - Settings.instance.save(); + sortedNotesFolder.config = sortedNotesFolder.config.copyWith( + viewHeader: _headerType, + ); + sortedNotesFolder.config.save(); }; var summaryChanged = (bool newVal) { setState(() { _showSummary = newVal; }); - Settings.instance.showNoteSummary = newVal; - Settings.instance.save(); + + sortedNotesFolder.config = sortedNotesFolder.config.copyWith( + showNoteSummary: newVal, + ); + sortedNotesFolder.config.save(); }; return StatefulBuilder( @@ -409,22 +377,10 @@ class _FolderViewState extends State { if (newViewType != null) { setState(() { _viewType = newViewType; - - switch (_viewType) { - case FolderViewType.Standard: - Settings.instance.defaultView = SettingsFolderViewType.Standard; - break; - case FolderViewType.Journal: - Settings.instance.defaultView = SettingsFolderViewType.Journal; - break; - case FolderViewType.Card: - Settings.instance.defaultView = SettingsFolderViewType.Card; - break; - case FolderViewType.Grid: - Settings.instance.defaultView = SettingsFolderViewType.Grid; - break; - } - Settings.instance.save(); + widget.notesFolder.config = widget.notesFolder.config.copyWith( + defaultView: newViewType, + ); + widget.notesFolder.config.save(); }); } } diff --git a/lib/screens/note_editor.dart b/lib/screens/note_editor.dart index ae2bf5ff..3a0d4fb4 100644 --- a/lib/screens/note_editor.dart +++ b/lib/screens/note_editor.dart @@ -7,7 +7,6 @@ import 'package:gitjournal/editors/journal_editor.dart'; import 'package:gitjournal/editors/markdown_editor.dart'; import 'package:gitjournal/editors/raw_editor.dart'; import 'package:gitjournal/editors/checklist_editor.dart'; -import 'package:gitjournal/settings.dart'; import 'package:gitjournal/state_container.dart'; import 'package:gitjournal/widgets/folder_selection_dialog.dart'; import 'package:gitjournal/widgets/note_editor_selector.dart'; @@ -22,7 +21,7 @@ class NoteEditor extends StatefulWidget { final EditorType defaultEditorType; NoteEditor.fromNote(this.note) - : notesFolder = null, + : notesFolder = note.parent, defaultEditorType = null; NoteEditor.newNote(this.notesFolder, this.defaultEditorType) : note = null; @@ -74,7 +73,7 @@ class NoteEditorState extends State { editorType = EditorType.Checklist; break; case NoteType.Unknown: - editorType = Settings.instance.defaultEditor.toEditorType(); + editorType = widget.notesFolder.config.defaultEditor; break; } } diff --git a/lib/settings.dart b/lib/settings.dart index fa3e3ad2..59be37e1 100644 --- a/lib/settings.dart +++ b/lib/settings.dart @@ -1,3 +1,4 @@ +import 'package:gitjournal/folder_views/common.dart'; import 'package:gitjournal/screens/note_editor.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:gitjournal/core/sorting_mode.dart'; @@ -256,6 +257,20 @@ class SettingsEditorType { } } + static SettingsEditorType fromEditorType(EditorType editorType) { + switch (editorType) { + case EditorType.Checklist: + return SettingsEditorType.Checklist; + case EditorType.Raw: + return SettingsEditorType.Raw; + case EditorType.Markdown: + return SettingsEditorType.Markdown; + case EditorType.Journal: + return SettingsEditorType.Journal; + } + return SettingsEditorType.Default; + } + static const options = [ Markdown, Raw, @@ -337,4 +352,33 @@ class SettingsFolderViewType { assert(false, "FolderViewType toString should never be called"); return ""; } + + FolderViewType toFolderViewType() { + switch (this) { + case Standard: + return FolderViewType.Standard; + case Journal: + return FolderViewType.Journal; + case Card: + return FolderViewType.Card; + case Grid: + return FolderViewType.Grid; + } + + return FolderViewType.Standard; + } + + static SettingsFolderViewType fromFolderViewType(FolderViewType viewType) { + switch (viewType) { + case FolderViewType.Standard: + return SettingsFolderViewType.Standard; + case FolderViewType.Journal: + return SettingsFolderViewType.Journal; + case FolderViewType.Card: + return SettingsFolderViewType.Card; + case FolderViewType.Grid: + return SettingsFolderViewType.Grid; + } + return SettingsFolderViewType.Default; + } } diff --git a/lib/state_container.dart b/lib/state_container.dart index a16ad774..af213285 100644 --- a/lib/state_container.dart +++ b/lib/state_container.dart @@ -79,10 +79,7 @@ class StateContainer with ChangeNotifier { Future _loadNotes() async { // FIXME: We should report the notes that failed to load await appState.notesFolder.loadRecursively(); - await _notesCache.buildCache( - appState.notesFolder, - Settings.instance.sortingMode, - ); + await _notesCache.buildCache(appState.notesFolder); } Future syncNotes({bool doNotThrow = false}) async {