diff --git a/lib/main/exceptions/remote_exception.dart b/lib/main/exceptions/remote_exception.dart index d75abd488..cd0b70caf 100644 --- a/lib/main/exceptions/remote_exception.dart +++ b/lib/main/exceptions/remote_exception.dart @@ -5,6 +5,7 @@ import 'package:jmap_dart_client/jmap/core/error/method/error_method_response.da abstract class RemoteException with EquatableMixin implements Exception { static const connectError = 'Connect error'; + static const internalServerError = 'Internal Server Error'; static const noNetworkError = 'No network error'; static const badCredentials = 'Bad credentials'; @@ -35,6 +36,13 @@ class ConnectError extends RemoteException { List get props => []; } +class InternalServerError extends RemoteException { + const InternalServerError() : super(message: RemoteException.internalServerError); + + @override + List get props => []; +} + class MethodLevelErrors extends RemoteException { final ErrorType type; diff --git a/lib/main/exceptions/remote_exception_thrower.dart b/lib/main/exceptions/remote_exception_thrower.dart index 50374ee00..9530bc4b6 100644 --- a/lib/main/exceptions/remote_exception_thrower.dart +++ b/lib/main/exceptions/remote_exception_thrower.dart @@ -15,38 +15,40 @@ class RemoteExceptionThrower extends ExceptionThrower { throwException(dynamic error) { logError('RemoteExceptionThrower::throwException():error: $error'); final networkConnectionController = getBinding(); - if (networkConnectionController != null) { - if (!networkConnectionController.isNetworkConnectionAvailable()) { - throw const NoNetworkError(); - } - } - - if (error is DioError) { - switch (error.type) { - case DioErrorType.connectionTimeout: - throw const ConnectError(); - default: - if (error.response?.statusCode == 502) { - throw BadGateway(); - } else if (error.response?.statusCode == HttpStatus.unauthorized) { - throw const BadCredentialsException(); - } else { - throw UnknownError( - code: error.response?.statusCode, - message: error.response?.statusMessage); - } - } - } else if (error is ErrorMethodResponseException) { - final errorResponse = error.errorResponse as ErrorMethodResponse; - if (errorResponse is CannotCalculateChangesMethodResponse) { - throw CannotCalculateChangesMethodResponseException(); - } else { - throw MethodLevelErrors( - errorResponse.type, - message: errorResponse.description); - } + if (networkConnectionController?.isNetworkConnectionAvailable() == false) { + logError('RemoteExceptionThrower::throwException():isNetworkConnectionAvailable'); + throw const NoNetworkError(); } else { - throw error; + if (error is DioError) { + logError('RemoteExceptionThrower::throwException():type: ${error.type} | response: ${error.response}'); + switch (error.type) { + case DioErrorType.connectionTimeout: + throw const ConnectError(); + default: + if (error.response?.statusCode == HttpStatus.internalServerError) { + throw const InternalServerError(); + } else if (error.response?.statusCode == HttpStatus.badGateway) { + throw BadGateway(); + } else if (error.response?.statusCode == HttpStatus.unauthorized) { + throw const BadCredentialsException(); + } else { + throw UnknownError( + code: error.response?.statusCode, + message: error.response?.statusMessage); + } + } + } else if (error is ErrorMethodResponseException) { + final errorResponse = error.errorResponse as ErrorMethodResponse; + if (errorResponse is CannotCalculateChangesMethodResponse) { + throw CannotCalculateChangesMethodResponseException(); + } else { + throw MethodLevelErrors( + errorResponse.type, + message: errorResponse.description); + } + } else { + throw error; + } } } } \ No newline at end of file