mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-27 17:29:50 +08:00
Add a .gitjournal.yaml file in a folder
This file will be added to save the settings of how we want that folder to behave. For example - default Editor, view, sorting mode, etc. This feature is currently disabled as it will only be a part of the pro mode.
This commit is contained in:
@ -7,6 +7,7 @@ import 'package:fimber/fimber.dart';
|
||||
import 'package:git_bindings/git_bindings.dart';
|
||||
|
||||
import 'package:gitjournal/core/note.dart';
|
||||
import 'package:gitjournal/core/notes_folder.dart';
|
||||
import 'package:gitjournal/core/notes_folder_fs.dart';
|
||||
import 'package:gitjournal/settings.dart';
|
||||
|
||||
@ -55,6 +56,18 @@ class GitNoteRepository {
|
||||
return NoteRepoResult(noteFilePath: folder.folderPath, error: false);
|
||||
}
|
||||
|
||||
Future<NoteRepoResult> addFolderConfig(NotesFolderConfig config) async {
|
||||
var pathSpec = config.folder.pathSpec();
|
||||
pathSpec = pathSpec.isNotEmpty ? pathSpec : '/';
|
||||
|
||||
await _gitRepo.add(".");
|
||||
await _gitRepo.commit(
|
||||
message: "Update folder config for $pathSpec",
|
||||
);
|
||||
|
||||
return NoteRepoResult(noteFilePath: config.folder.folderPath, error: false);
|
||||
}
|
||||
|
||||
Future<NoteRepoResult> renameFolder(
|
||||
String oldFullPath,
|
||||
String newFullPath,
|
||||
|
@ -1,6 +1,7 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:fimber/fimber.dart';
|
||||
import 'package:gitjournal/features.dart';
|
||||
import 'package:path/path.dart' as p;
|
||||
import 'package:path/path.dart';
|
||||
import 'package:synchronized/synchronized.dart';
|
||||
@ -18,6 +19,7 @@ class NotesFolderFS with NotesFolderNotifier implements NotesFolder {
|
||||
List<NotesFolderFS> _folders = [];
|
||||
|
||||
Map<String, dynamic> _entityMap = {};
|
||||
NotesFolderConfig _config;
|
||||
|
||||
NotesFolderFS(this._parent, this._folderPath);
|
||||
|
||||
@ -149,6 +151,11 @@ class NotesFolderFS with NotesFolderNotifier implements NotesFolder {
|
||||
Future<void> _load() async {
|
||||
Set<String> pathsFound = {};
|
||||
|
||||
// Load the Folder config if exists
|
||||
if (Features.perFolderConfig) {
|
||||
_config = await NotesFolderConfig.fromFS(this);
|
||||
}
|
||||
|
||||
final dir = Directory(folderPath);
|
||||
var lister = dir.list(recursive: false, followLinks: false);
|
||||
await for (var fsEntity in lister) {
|
||||
@ -344,11 +351,18 @@ class NotesFolderFS with NotesFolderNotifier implements NotesFolder {
|
||||
|
||||
@override
|
||||
NotesFolderConfig get config {
|
||||
return NotesFolderConfig.fromSettings();
|
||||
if (Features.perFolderConfig && _config != null) {
|
||||
return _config;
|
||||
}
|
||||
return NotesFolderConfig.fromSettings(this);
|
||||
}
|
||||
|
||||
@override
|
||||
set config(NotesFolderConfig conf) {
|
||||
conf.save();
|
||||
set config(NotesFolderConfig config) {
|
||||
if (Features.perFolderConfig) {
|
||||
_config = config;
|
||||
} else {
|
||||
config.saveToSettings();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -35,12 +35,12 @@ class VirtualNotesFolder with NotesFolderNotifier implements NotesFolder {
|
||||
|
||||
@override
|
||||
NotesFolderConfig get config {
|
||||
return NotesFolderConfig.fromSettings();
|
||||
return NotesFolderConfig.fromSettings(fsFolder);
|
||||
}
|
||||
|
||||
@override
|
||||
set config(NotesFolderConfig conf) {
|
||||
assert(false, "A Virtual Notes Folder Config cannot change");
|
||||
conf.save();
|
||||
conf.saveToSettings();
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,3 @@
|
||||
class Features {
|
||||
static bool perFolderConfig = true;
|
||||
static bool perFolderConfig = false;
|
||||
}
|
||||
|
@ -237,10 +237,14 @@ class _FolderViewState extends State<FolderView> {
|
||||
);
|
||||
|
||||
if (newSortingMode != null) {
|
||||
sortedNotesFolder.config = sortedNotesFolder.config.copyWith(
|
||||
sortingMode: newSortingMode,
|
||||
);
|
||||
|
||||
var container = Provider.of<StateContainer>(context, listen: false);
|
||||
container.saveFolderConfig(sortedNotesFolder.config);
|
||||
|
||||
setState(() {
|
||||
sortedNotesFolder.config = sortedNotesFolder.config.copyWith(
|
||||
sortingMode: newSortingMode,
|
||||
);
|
||||
sortedNotesFolder.changeSortingMode(newSortingMode);
|
||||
});
|
||||
}
|
||||
@ -258,7 +262,8 @@ class _FolderViewState extends State<FolderView> {
|
||||
sortedNotesFolder.config = sortedNotesFolder.config.copyWith(
|
||||
viewHeader: _headerType,
|
||||
);
|
||||
sortedNotesFolder.config.save();
|
||||
var container = Provider.of<StateContainer>(context, listen: false);
|
||||
container.saveFolderConfig(sortedNotesFolder.config);
|
||||
};
|
||||
|
||||
var summaryChanged = (bool newVal) {
|
||||
@ -269,7 +274,8 @@ class _FolderViewState extends State<FolderView> {
|
||||
sortedNotesFolder.config = sortedNotesFolder.config.copyWith(
|
||||
showNoteSummary: newVal,
|
||||
);
|
||||
sortedNotesFolder.config.save();
|
||||
var container = Provider.of<StateContainer>(context, listen: false);
|
||||
container.saveFolderConfig(sortedNotesFolder.config);
|
||||
};
|
||||
|
||||
return StatefulBuilder(
|
||||
@ -377,11 +383,14 @@ class _FolderViewState extends State<FolderView> {
|
||||
if (newViewType != null) {
|
||||
setState(() {
|
||||
_viewType = newViewType;
|
||||
widget.notesFolder.config = widget.notesFolder.config.copyWith(
|
||||
defaultView: newViewType,
|
||||
);
|
||||
widget.notesFolder.config.save();
|
||||
});
|
||||
|
||||
widget.notesFolder.config = widget.notesFolder.config.copyWith(
|
||||
defaultView: newViewType,
|
||||
);
|
||||
|
||||
var container = Provider.of<StateContainer>(context, listen: false);
|
||||
container.saveFolderConfig(widget.notesFolder.config);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,8 +8,10 @@ import 'package:gitjournal/apis/git_migration.dart';
|
||||
import 'package:gitjournal/appstate.dart';
|
||||
import 'package:gitjournal/core/note.dart';
|
||||
import 'package:gitjournal/core/notes_cache.dart';
|
||||
import 'package:gitjournal/core/notes_folder.dart';
|
||||
import 'package:gitjournal/core/notes_folder_fs.dart';
|
||||
import 'package:gitjournal/core/git_repo.dart';
|
||||
import 'package:gitjournal/features.dart';
|
||||
import 'package:gitjournal/settings.dart';
|
||||
import 'package:path/path.dart' as p;
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
@ -235,6 +237,20 @@ class StateContainer with ChangeNotifier {
|
||||
});
|
||||
}
|
||||
|
||||
void saveFolderConfig(NotesFolderConfig config) async {
|
||||
if (!Features.perFolderConfig) {
|
||||
return;
|
||||
}
|
||||
|
||||
return _opLock.synchronized(() async {
|
||||
Fimber.d("State Container saveFolderConfig");
|
||||
await config.saveToFS();
|
||||
_gitRepo.addFolderConfig(config).then((NoteRepoResult _) {
|
||||
_syncNotes();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
void completeGitHostSetup() {
|
||||
() async {
|
||||
appState.remoteGitRepoConfigured = true;
|
||||
|
@ -141,6 +141,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.1"
|
||||
equatable:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: equatable
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.1"
|
||||
fetch_app_logs:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -40,6 +40,7 @@ dependencies:
|
||||
steel_crypt: ^1.7.1+1
|
||||
font_awesome_flutter: ^8.7.0
|
||||
sentry: ">=3.0.0 <4.0.0"
|
||||
equatable: ^1.1.0
|
||||
|
||||
dev_dependencies:
|
||||
flutter_launcher_icons: "^0.7.2"
|
||||
|
43
test/notes_folder_config_test.dart
Normal file
43
test/notes_folder_config_test.dart
Normal file
@ -0,0 +1,43 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:gitjournal/core/notes_folder_config.dart';
|
||||
import 'package:gitjournal/core/notes_folder_fs.dart';
|
||||
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:path/path.dart' as p;
|
||||
import 'package:test/test.dart';
|
||||
|
||||
void main() {
|
||||
group('Notes Folder Config', () {
|
||||
Directory tempDir;
|
||||
|
||||
setUp(() async {
|
||||
tempDir = await Directory.systemTemp.createTemp('__notes_config_test__');
|
||||
});
|
||||
|
||||
tearDown(() async {
|
||||
tempDir.deleteSync(recursive: true);
|
||||
});
|
||||
|
||||
test('Should load from FS correctly', () async {
|
||||
var folder = NotesFolderFS(null, tempDir.path);
|
||||
var config = NotesFolderConfig(
|
||||
defaultEditor: EditorType.Checklist,
|
||||
defaultView: FolderViewType.Standard,
|
||||
showNoteSummary: true,
|
||||
sortingMode: SortingMode.Modified,
|
||||
viewHeader: StandardViewHeader.TitleOrFileName,
|
||||
folder: folder,
|
||||
);
|
||||
|
||||
await config.saveToFS();
|
||||
var file = File(p.join(tempDir.path, NotesFolderConfig.FILENAME));
|
||||
expect(file.existsSync(), true);
|
||||
|
||||
var config2 = await NotesFolderConfig.fromFS(folder);
|
||||
expect(config, config2);
|
||||
});
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user