mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-30 03:19:11 +08:00
Always check if a Folder exists before accessing it
This kinds of bugs will be less frequent once we have non null by default enabled in Flutter. Fixes #164
This commit is contained in:
@ -6,6 +6,7 @@ import 'package:gitjournal/core/notes_folder_fs.dart';
|
|||||||
import 'package:gitjournal/screens/settings_screen.dart';
|
import 'package:gitjournal/screens/settings_screen.dart';
|
||||||
import 'package:gitjournal/screens/settings_widgets.dart';
|
import 'package:gitjournal/screens/settings_widgets.dart';
|
||||||
import 'package:gitjournal/settings.dart';
|
import 'package:gitjournal/settings.dart';
|
||||||
|
import 'package:gitjournal/utils.dart';
|
||||||
import 'package:gitjournal/widgets/folder_selection_dialog.dart';
|
import 'package:gitjournal/widgets/folder_selection_dialog.dart';
|
||||||
import 'package:gitjournal/widgets/pro_overlay.dart';
|
import 'package:gitjournal/widgets/pro_overlay.dart';
|
||||||
|
|
||||||
@ -22,6 +23,15 @@ class SettingsEditorsScreenState extends State<SettingsEditorsScreen> {
|
|||||||
Settings.instance.journalEditordefaultNewNoteFolderSpec;
|
Settings.instance.journalEditordefaultNewNoteFolderSpec;
|
||||||
if (defaultNewFolder.isEmpty) {
|
if (defaultNewFolder.isEmpty) {
|
||||||
defaultNewFolder = tr("rootFolder");
|
defaultNewFolder = tr("rootFolder");
|
||||||
|
} else {
|
||||||
|
if (!folderWithSpecExists(context, defaultNewFolder)) {
|
||||||
|
setState(() {
|
||||||
|
defaultNewFolder = tr("rootFolder");
|
||||||
|
|
||||||
|
Settings.instance.journalEditordefaultNewNoteFolderSpec = "";
|
||||||
|
Settings.instance.save();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var body = ListView(children: <Widget>[
|
var body = ListView(children: <Widget>[
|
||||||
|
@ -21,6 +21,12 @@ class SettingsImagesScreenState extends State<SettingsImagesScreen> {
|
|||||||
var folder = Provider.of<NotesFolderFS>(context)
|
var folder = Provider.of<NotesFolderFS>(context)
|
||||||
.getFolderWithSpec(settings.imageLocationSpec);
|
.getFolderWithSpec(settings.imageLocationSpec);
|
||||||
|
|
||||||
|
// If the Custom Folder specified no longer exists
|
||||||
|
if (settings.imageLocationSpec != "." && folder == null) {
|
||||||
|
Settings.instance.imageLocationSpec = ".";
|
||||||
|
Settings.instance.save();
|
||||||
|
}
|
||||||
|
|
||||||
var sameFolder = tr("settings.images.currentFolder");
|
var sameFolder = tr("settings.images.currentFolder");
|
||||||
var customFolder = tr("settings.images.customFolder");
|
var customFolder = tr("settings.images.customFolder");
|
||||||
|
|
||||||
@ -72,15 +78,3 @@ class SettingsImagesScreenState extends State<SettingsImagesScreen> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// Options to expose
|
|
||||||
// - Image Location
|
|
||||||
// - Note Directory
|
|
||||||
// - Custom Directory
|
|
||||||
// Bool use relative path if possible
|
|
||||||
// - Image FileName
|
|
||||||
// - Original Name
|
|
||||||
// - Note FileName + _num
|
|
||||||
// - Custom Name
|
|
||||||
//
|
|
||||||
|
@ -134,6 +134,15 @@ class SettingsListState extends State<SettingsList> {
|
|||||||
var defaultNewFolder = Settings.instance.defaultNewNoteFolderSpec;
|
var defaultNewFolder = Settings.instance.defaultNewNoteFolderSpec;
|
||||||
if (defaultNewFolder.isEmpty) {
|
if (defaultNewFolder.isEmpty) {
|
||||||
defaultNewFolder = tr("rootFolder");
|
defaultNewFolder = tr("rootFolder");
|
||||||
|
} else {
|
||||||
|
if (!folderWithSpecExists(context, defaultNewFolder)) {
|
||||||
|
setState(() {
|
||||||
|
defaultNewFolder = tr("rootFolder");
|
||||||
|
|
||||||
|
Settings.instance.defaultNewNoteFolderSpec = "";
|
||||||
|
Settings.instance.save();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ListView(children: [
|
return ListView(children: [
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:package_info/package_info.dart';
|
import 'package:package_info/package_info.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
import 'package:gitjournal/core/notes_folder_fs.dart';
|
import 'package:gitjournal/core/notes_folder_fs.dart';
|
||||||
import 'package:gitjournal/screens/note_editor.dart';
|
import 'package:gitjournal/screens/note_editor.dart';
|
||||||
@ -50,14 +51,16 @@ NotesFolderFS getFolderForEditor(
|
|||||||
EditorType editorType,
|
EditorType editorType,
|
||||||
) {
|
) {
|
||||||
var spec = Settings.instance.defaultNewNoteFolderSpec;
|
var spec = Settings.instance.defaultNewNoteFolderSpec;
|
||||||
var journalSpec = Settings.instance.journalEditordefaultNewNoteFolderSpec;
|
|
||||||
|
|
||||||
switch (editorType) {
|
switch (editorType) {
|
||||||
case EditorType.Journal:
|
case EditorType.Journal:
|
||||||
return rootFolder.getFolderWithSpec(journalSpec);
|
spec = Settings.instance.journalEditordefaultNewNoteFolderSpec;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return rootFolder.getFolderWithSpec(spec);
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return rootFolder.getFolderWithSpec(spec) ?? rootFolder;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> showAlertDialog(
|
Future<void> showAlertDialog(
|
||||||
@ -68,3 +71,10 @@ Future<void> showAlertDialog(
|
|||||||
);
|
);
|
||||||
return showDialog(context: context, builder: (context) => dialog);
|
return showDialog(context: context, builder: (context) => dialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool folderWithSpecExists(BuildContext context, String spec) {
|
||||||
|
var stateContainer = Provider.of<StateContainer>(context, listen: false);
|
||||||
|
var rootFolder = stateContainer.appState.notesFolder;
|
||||||
|
|
||||||
|
return rootFolder.getFolderWithSpec(spec) != null;
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user