mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-28 01:45:55 +08:00
NoteFileName Format: Move it to Folder Settings
This way each folder can have its own default file naming scheme.
This commit is contained in:
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
|
@ -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,
|
||||
);
|
||||
|
||||
|
Reference in New Issue
Block a user