diff --git a/lib/core/md_yaml_doc_loader.dart b/lib/core/md_yaml_doc_loader.dart index 0e20d60b..184bcab1 100644 --- a/lib/core/md_yaml_doc_loader.dart +++ b/lib/core/md_yaml_doc_loader.dart @@ -1,6 +1,7 @@ import 'dart:io'; import 'dart:isolate'; +import 'package:dart_git/utils/result.dart'; import 'package:synchronized/synchronized.dart'; import 'package:gitjournal/core/md_yaml_doc.dart'; @@ -34,13 +35,13 @@ class MdYamlDocLoader { }); } - // FIXME: Don't throw exceptions! - Future<MdYamlDoc?> loadDoc(String filePath) async { + Future<Result<MdYamlDoc>> loadDoc(String filePath) async { await _initIsolate(); final file = File(filePath); if (!file.existsSync()) { - throw MdYamlDocNotFoundException(filePath); + var ex = MdYamlDocNotFoundException(filePath); + return Result.fail(ex); } var rec = ReceivePort(); @@ -52,10 +53,11 @@ class MdYamlDocLoader { assert(resp.filePath == filePath); if (resp.doc != null) { - return resp.doc; + return Result(resp.doc!); } - throw MdYamlParsingException(filePath, resp.err.toString()); + var ex = MdYamlParsingException(filePath, resp.err.toString()); + return Result.fail(ex); } } diff --git a/lib/core/note.dart b/lib/core/note.dart index d8ce16a3..4bc9786b 100644 --- a/lib/core/note.dart +++ b/lib/core/note.dart @@ -366,20 +366,21 @@ class Note with NotesNotifier { var isOrg = fpLowerCase.endsWith('.org'); if (isMarkdown) { - try { - var dataMaybe = await _mdYamlDocLoader.loadDoc(_filePath!); - data = dataMaybe!; + var dataResult = await _mdYamlDocLoader.loadDoc(_filePath!); + if (dataResult.isSuccess) { + data = dataResult.getOrThrow(); _fileFormat = NoteFileFormat.Markdown; - } on MdYamlDocNotFoundException catch (_) { - _loadState = NoteLoadState.NotExists; - _notifyModified(); - return _loadState; - } on MdYamlParsingException catch (err, stackTrace) { - logException(err, stackTrace); - - _loadState = NoteLoadState.Error; - _notifyModified(); - return _loadState; + } else { + if (dataResult.error is MdYamlDocNotFoundException) { + _loadState = NoteLoadState.NotExists; + _notifyModified(); + return _loadState; + } + if (dataResult.error is MdYamlParsingException) { + _loadState = NoteLoadState.Error; + _notifyModified(); + return _loadState; + } } } else if (isTxt) { try { diff --git a/lib/setup/repo_selector.dart b/lib/setup/repo_selector.dart index 8c59ac93..6a0ab292 100644 --- a/lib/setup/repo_selector.dart +++ b/lib/setup/repo_selector.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:collection/collection.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:function_types/function_types.dart'; import 'package:intl/intl.dart'; diff --git a/test/md_yaml_doc_loader_test.dart b/test/md_yaml_doc_loader_test.dart index 844405bc..3a81f589 100644 --- a/test/md_yaml_doc_loader_test.dart +++ b/test/md_yaml_doc_loader_test.dart @@ -1,9 +1,9 @@ import 'dart:io'; +import 'package:dart_git/utils/result.dart'; import 'package:path/path.dart' as p; import 'package:test/test.dart'; -import 'package:gitjournal/core/md_yaml_doc.dart'; import 'package:gitjournal/core/md_yaml_doc_loader.dart'; void main() { @@ -29,7 +29,7 @@ Alright."""; test('Should load one doc', () async { var loader = MdYamlDocLoader(); - var doc = (await loader.loadDoc(filePath)) as MdYamlDoc; + var doc = await loader.loadDoc(filePath).getOrThrow(); expect(doc.body, "Alright."); expect(doc.props["type"], "Journal");