mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-26 16:46:51 +08:00
MdYamlDocLoader: Use Result
Instead of annoying exceptions.
This commit is contained in:
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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';
|
||||
|
@ -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");
|
||||
|
Reference in New Issue
Block a user