NoteFileName Format: Move it to Folder Settings

This way each folder can have its own default file naming scheme.
This commit is contained in:
Vishesh Handa
2020-05-18 00:13:20 +02:00
parent a2b72a1a81
commit f4ad226341
4 changed files with 59 additions and 53 deletions

View File

@ -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;
}
}
}

View File

@ -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;
}
}
}

View File

@ -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);

View File

@ -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,
);