Skip to content

Commit

Permalink
Improve error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
dhzdhd committed Jan 8, 2025
1 parent 115b143 commit aed5f25
Show file tree
Hide file tree
Showing 10 changed files with 262 additions and 200 deletions.
22 changes: 7 additions & 15 deletions lib/errors.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,13 @@ import 'package:syncvault/log.dart';
part 'errors.freezed.dart';

extension ErrorSegregation on Object {
AppError handleError() {
try {
if (this is Error) {
final error = this as Error;
debugLogger.e('Error',
error: error, stackTrace: error.stackTrace, time: DateTime.now());
fileLogger.e('Error',
error: error, stackTrace: error.stackTrace, time: DateTime.now());
} else if (this is AppError) {
final error = this as AppError;
debugLogger.e(error.message, error: error, time: DateTime.now());
fileLogger.e(error.message, error: error, time: DateTime.now());
}
} catch (err) {
debugLogger.i('Error passed cannot be type cast to Error');
AppError handleError(String message, StackTrace stackTrace) {
if (this is Error || this is AppError) {
debugLogger.e(message,
error: this, stackTrace: stackTrace, time: DateTime.now());
fileLogger.e(message,
error: this, stackTrace: stackTrace, time: DateTime.now());
sentryLogger.e(message, stackTrace: stackTrace, time: DateTime.now());
}

// TODO: Log errors and return readable errors
Expand Down
7 changes: 5 additions & 2 deletions lib/log.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'dart:io';

import 'package:logger/logger.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sentry_flutter/sentry_flutter.dart';

final debugLogger = Logger();
final fileLogger = Logger(
Expand All @@ -10,7 +11,6 @@ final fileLogger = Logger(
output: FileLogOutput(),
);
final sentryLogger = Logger(
printer: SimplePrinter(printTime: true, colors: false),
filter: CustomLogFilter(),
output: SentryLogOutput(),
);
Expand Down Expand Up @@ -43,6 +43,9 @@ final class FileLogOutput extends LogOutput {
final class SentryLogOutput extends LogOutput {
@override
void output(OutputEvent event) async {
throw UnimplementedError();
await Sentry.captureException(
event.origin.error,
stackTrace: event.origin.stackTrace,
);
}
}
9 changes: 7 additions & 2 deletions lib/src/accounts/components/drive_info_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -137,10 +137,15 @@ class DriveInfoDialogWidget extends HookConsumerWidget {
),
),
],
AsyncError(:final error) => [
AsyncError(:final error, :final stackTrace) => [
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(error.handleError().message),
child: Text(
error
.handleError(
'Failed to render drive information', stackTrace)
.message,
),
),
],
AsyncLoading() => [
Expand Down
7 changes: 6 additions & 1 deletion lib/src/accounts/components/new_account_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,12 @@ class _NewAccountDialogWidgetState
authControllerProvider,
(prev, state) {
if (!state.isLoading && state.hasError) {
context.showErrorSnackBar(state.error!.handleError().message);
context.showErrorSnackBar(
state.error!
.handleError('Auth controller failed',
state.stackTrace ?? StackTrace.empty)
.message,
);
}
},
);
Expand Down
18 changes: 12 additions & 6 deletions lib/src/accounts/controllers/folder_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -223,11 +223,17 @@ class Folder extends _$Folder {
}

TaskEither<AppError, ()> clearCache() {
return TaskEither.tryCatch(() async {
state = [];
await _box.clear();

return ();
}, (error, stackTrace) => error.handleError());
return TaskEither.tryCatch(
() async {
state = [];
await _box.clear();

return ();
},
(error, stackTrace) => error.handleError(
'Failed to clear local storage',
stackTrace,
),
);
}
}
5 changes: 4 additions & 1 deletion lib/src/home/components/new_folder_dialog_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,10 @@ class _NewFolderDialogWidgetState extends ConsumerState<NewFolderDialogWidget> {
createFolderControllerProvider,
(prev, state) {
if (!state.isLoading && state.hasError) {
context.showErrorSnackBar(state.error!.handleError().message);
context.showErrorSnackBar(state.error!
.handleError('Create folder controller failed',
state.stackTrace ?? StackTrace.empty)
.message);
}
},
);
Expand Down
Loading

0 comments on commit aed5f25

Please sign in to comment.