From f4ad226341e5f69da345bb5c1cd11ade85aaad3b Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Mon, 18 May 2020 00:13:20 +0200 Subject: [PATCH] NoteFileName Format: Move it to Folder Settings This way each folder can have its own default file naming scheme. --- lib/core/note.dart | 48 ++++++++++++++++++++++++++-- lib/core/note_fileName.dart | 51 ------------------------------ lib/core/notes_folder_config.dart | 11 +++++++ test/notes_folder_config_test.dart | 2 ++ 4 files changed, 59 insertions(+), 53 deletions(-) delete mode 100644 lib/core/note_fileName.dart diff --git a/lib/core/note.dart b/lib/core/note.dart index fc4b105e..c61fb416 100644 --- a/lib/core/note.dart +++ b/lib/core/note.dart @@ -6,12 +6,12 @@ import 'package:gitjournal/core/notes_folder_fs.dart'; import 'package:gitjournal/settings.dart'; import 'package:gitjournal/utils/markdown.dart'; import 'package:gitjournal/utils/logger.dart'; +import 'package:gitjournal/utils/datetime.dart'; import 'package:path/path.dart' as p; import 'md_yaml_doc.dart'; import 'md_yaml_doc_codec.dart'; -import 'note_fileName.dart'; import 'note_serializer.dart'; enum NoteLoadState { @@ -59,7 +59,7 @@ class Note with NotesNotifier { String get filePath { if (_filePath == null) { - _filePath = p.join(parent.folderPath, getFileName(this)); + _filePath = p.join(parent.folderPath, _buildFileName()); if (!_filePath.toLowerCase().endsWith('.md')) { _filePath += '.md'; } @@ -312,4 +312,48 @@ class Note with NotesNotifier { } return p.join(parent.pathSpec(), fileName); } + + String _buildFileName() { + var date = created ?? modified ?? fileLastModified ?? DateTime.now(); + switch (parent.config.fileNameFormat) { + case NoteFileNameFormat.SimpleDate: + return toSimpleDateTime(date); + case NoteFileNameFormat.FromTitle: + if (title.isNotEmpty) { + return buildTitleFileName(parent.folderPath, title); + } else { + return toSimpleDateTime(date); + } + break; + case NoteFileNameFormat.Iso8601: + return toIso8601(date); + case NoteFileNameFormat.Iso8601WithTimeZone: + return toIso8601WithTimezone(date); + case NoteFileNameFormat.Iso8601WithTimeZoneWithoutColon: + return toIso8601WithTimezone(date).replaceAll(":", "_"); + } + + return date.toString(); + } +} + +String buildTitleFileName(String parentDir, String title) { + // Sanitize the title - these characters are not allowed in Windows + title = title.replaceAll(RegExp(r'[/<\>":|?*]'), '_'); + + var fileName = title + ".md"; + var fullPath = p.join(parentDir, fileName); + var file = File(fullPath); + if (!file.existsSync()) { + return fileName; + } + + for (var i = 1;; i++) { + var fileName = title + "_$i.md"; + var fullPath = p.join(parentDir, fileName); + var file = File(fullPath); + if (!file.existsSync()) { + return fileName; + } + } } diff --git a/lib/core/note_fileName.dart b/lib/core/note_fileName.dart deleted file mode 100644 index 66601459..00000000 --- a/lib/core/note_fileName.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'dart:io'; - -import 'package:gitjournal/core/note.dart'; -import 'package:gitjournal/utils/datetime.dart'; -import 'package:gitjournal/settings.dart'; -import 'package:path/path.dart' as p; - -String getFileName(Note note) { - var date = - note.created ?? note.modified ?? note.fileLastModified ?? DateTime.now(); - switch (Settings.instance.noteFileNameFormat) { - case NoteFileNameFormat.SimpleDate: - return toSimpleDateTime(date); - case NoteFileNameFormat.FromTitle: - if (note.title.isNotEmpty) { - return buildTitleFileName(note.parent.folderPath, note.title); - } else { - return toSimpleDateTime(date); - } - break; - case NoteFileNameFormat.Iso8601: - return toIso8601(date); - case NoteFileNameFormat.Iso8601WithTimeZone: - return toIso8601WithTimezone(date); - case NoteFileNameFormat.Iso8601WithTimeZoneWithoutColon: - return toIso8601WithTimezone(date).replaceAll(":", "_"); - } - - return date.toString(); -} - -String buildTitleFileName(String parentDir, String title) { - // Sanitize the title - these characters are not allowed in Windows - title = title.replaceAll(RegExp(r'[/<\>":|?*]'), '_'); - - var fileName = title + ".md"; - var fullPath = p.join(parentDir, fileName); - var file = File(fullPath); - if (!file.existsSync()) { - return fileName; - } - - for (var i = 1;; i++) { - var fileName = title + "_$i.md"; - var fullPath = p.join(parentDir, fileName); - var file = File(fullPath); - if (!file.existsSync()) { - return fileName; - } - } -} diff --git a/lib/core/notes_folder_config.dart b/lib/core/notes_folder_config.dart index cb8a6662..281990c4 100644 --- a/lib/core/notes_folder_config.dart +++ b/lib/core/notes_folder_config.dart @@ -25,6 +25,7 @@ class NotesFolderConfig extends Equatable { final StandardViewHeader viewHeader; final bool showNoteSummary; + final NoteFileNameFormat fileNameFormat; final NotesFolderFS folder; //int _version = 1; @@ -34,6 +35,7 @@ class NotesFolderConfig extends Equatable { @required this.defaultView, @required this.viewHeader, @required this.showNoteSummary, + @required this.fileNameFormat, @required this.folder, }); @@ -43,6 +45,7 @@ class NotesFolderConfig extends Equatable { defaultEditor, defaultView, viewHeader, + fileNameFormat, folder, ]; @@ -68,6 +71,7 @@ class NotesFolderConfig extends Equatable { sortingMode: settings.sortingMode, showNoteSummary: settings.showNoteSummary, viewHeader: viewHeader, + fileNameFormat: settings.noteFileNameFormat, folder: folder, ); } @@ -93,6 +97,7 @@ class NotesFolderConfig extends Equatable { break; } Settings.instance.folderViewHeaderType = ht; + Settings.instance.noteFileNameFormat = fileNameFormat; Settings.instance.save(); } @@ -102,6 +107,7 @@ class NotesFolderConfig extends Equatable { FolderViewType defaultView, StandardViewHeader viewHeader, bool showNoteSummary, + NoteFileNameFormat fileNameFormat, NotesFolderFS folder, }) { return NotesFolderConfig( @@ -110,6 +116,7 @@ class NotesFolderConfig extends Equatable { defaultView: defaultView ?? this.defaultView, viewHeader: viewHeader ?? this.viewHeader, showNoteSummary: showNoteSummary ?? this.showNoteSummary, + fileNameFormat: fileNameFormat ?? this.fileNameFormat, folder: folder ?? this.folder, ); } @@ -154,12 +161,15 @@ class NotesFolderConfig extends Equatable { break; } + var fileNameFormat = map['noteFileNameFormat']?.toString(); + return NotesFolderConfig( defaultEditor: defaultEditor.toEditorType(), defaultView: defaultView.toFolderViewType(), sortingMode: sortingMode, showNoteSummary: showNoteSummary, viewHeader: viewHeader, + fileNameFormat: NoteFileNameFormat.fromInternalString(fileNameFormat), folder: folder, ); } @@ -186,6 +196,7 @@ class NotesFolderConfig extends Equatable { .toInternalString(), "showNoteSummary": showNoteSummary, "folderViewHeaderType": ht, + "noteFileNameFormat": fileNameFormat.toInternalString(), }; var yaml = toYAML(map); diff --git a/test/notes_folder_config_test.dart b/test/notes_folder_config_test.dart index a9a65724..70c48d55 100644 --- a/test/notes_folder_config_test.dart +++ b/test/notes_folder_config_test.dart @@ -6,6 +6,7 @@ import 'package:gitjournal/core/sorting_mode.dart'; import 'package:gitjournal/folder_views/common.dart'; import 'package:gitjournal/folder_views/standard_view.dart'; import 'package:gitjournal/screens/note_editor.dart'; +import 'package:gitjournal/settings.dart'; import 'package:path/path.dart' as p; import 'package:test/test.dart'; @@ -29,6 +30,7 @@ void main() { showNoteSummary: true, sortingMode: SortingMode.Modified, viewHeader: StandardViewHeader.TitleOrFileName, + fileNameFormat: NoteFileNameFormat.Default, folder: folder, );