MdYamlDocLoader: Use Result

Instead of annoying exceptions.
This commit is contained in:
Vishesh Handa
2021-06-10 03:33:35 +02:00
parent 2cc379231c
commit a3c539bf1f
4 changed files with 23 additions and 21 deletions

View File

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

View File

@ -366,21 +366,22 @@ 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 (_) {
} else {
if (dataResult.error is MdYamlDocNotFoundException) {
_loadState = NoteLoadState.NotExists;
_notifyModified();
return _loadState;
} on MdYamlParsingException catch (err, stackTrace) {
logException(err, stackTrace);
}
if (dataResult.error is MdYamlParsingException) {
_loadState = NoteLoadState.Error;
_notifyModified();
return _loadState;
}
}
} else if (isTxt) {
try {
body = await File(_filePath!).readAsString();

View File

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

View File

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