TF-2311 Always get session from cache when get session from server failure on mobile

Signed-off-by: dab246 <tdvu@linagora.com>

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit 1c8d61b6d7871ce8685077e86389217e29eab7d9)
This commit is contained in:
dab246
2023-11-13 19:25:07 +07:00
committed by Dat Vu
parent 713c924c67
commit 4d89ab4783
2 changed files with 58 additions and 54 deletions
+25 -27
View File
@@ -94,6 +94,7 @@ abstract class BaseController extends GetxController
(failure) { (failure) {
if (failure is FeatureFailure) { if (failure is FeatureFailure) {
final exception = _performFilterExceptionInError(failure.exception); final exception = _performFilterExceptionInError(failure.exception);
logError('BaseController::onData:exception: $exception');
if (exception != null) { if (exception != null) {
handleExceptionAction(failure: failure, exception: exception); handleExceptionAction(failure: failure, exception: exception);
} else { } else {
@@ -121,42 +122,33 @@ abstract class BaseController extends GetxController
Exception? _performFilterExceptionInError(dynamic error) { Exception? _performFilterExceptionInError(dynamic error) {
logError('BaseController::_performFilterExceptionInError(): $error'); logError('BaseController::_performFilterExceptionInError(): $error');
if (error is NoNetworkError || error is ConnectionTimeout || error is InternalServerError) { if (error is NoNetworkError || error is ConnectionTimeout || error is InternalServerError) {
logError('BaseController::_performFilterExceptionInError(): NoNetworkError'); if (PlatformInfo.isWeb && currentOverlayContext != null && currentContext != null) {
if (PlatformInfo.isWeb) { _appToast.showToastMessage(
if (currentOverlayContext != null && currentContext != null) { currentOverlayContext!,
_appToast.showToastMessage( AppLocalizations.of(currentContext!).no_internet_connection,
currentOverlayContext!, actionName: AppLocalizations.of(currentContext!).skip,
AppLocalizations.of(currentContext!).no_internet_connection, onActionClick: ToastView.dismiss,
actionName: AppLocalizations.of(currentContext!).skip, leadingSVGIcon: _imagePaths.icNotConnection,
onActionClick: ToastView.dismiss, backgroundColor: AppColor.textFieldErrorBorderColor,
leadingSVGIcon: _imagePaths.icNotConnection, textColor: Colors.white,
backgroundColor: AppColor.textFieldErrorBorderColor, infinityToast: true,
textColor: Colors.white, );
infinityToast: true,
);
}
} }
return error; return error;
} else if (error is BadCredentialsException) { } else if (error is BadCredentialsException) {
logError('BaseController::_performFilterExceptionInError(): BadCredentialsException');
if (currentOverlayContext != null && currentContext != null) { if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage( _appToast.showToastErrorMessage(
currentOverlayContext!, currentOverlayContext!,
AppLocalizations.of(currentContext!).badCredentials); AppLocalizations.of(currentContext!).badCredentials
} );
if (authorizationInterceptors.isAppRunning) {
performInvokeLogoutAction();
} }
return error; return error;
} else if (error is ConnectionError) { } else if (error is ConnectionError) {
logError('BaseController::_performFilterExceptionInError(): ConnectionError'); if (authorizationInterceptors.isAppRunning && currentOverlayContext != null && currentContext != null) {
if (authorizationInterceptors.isAppRunning) { _appToast.showToastErrorMessage(
if (currentOverlayContext != null && currentContext != null) { currentOverlayContext!,
_appToast.showToastErrorMessage( AppLocalizations.of(currentContext!).connectionError
currentOverlayContext!, );
AppLocalizations.of(currentContext!).connectionError);
}
performInvokeLogoutAction();
} }
return error; return error;
} }
@@ -168,6 +160,12 @@ abstract class BaseController extends GetxController
void handleExceptionAction({Failure? failure, Exception? exception}) { void handleExceptionAction({Failure? failure, Exception? exception}) {
logError('BaseController::handleExceptionAction():failure: $failure | exception: $exception'); logError('BaseController::handleExceptionAction():failure: $failure | exception: $exception');
if (!authorizationInterceptors.isAppRunning) {
return;
}
if (exception is BadCredentialsException || exception is ConnectionError) {
performInvokeLogoutAction();
}
} }
void handleFailureViewState(Failure failure) { void handleFailureViewState(Failure failure) {
@@ -53,9 +53,12 @@ class SessionController extends ReloadableController {
@override @override
void handleFailureViewState(Failure failure) { void handleFailureViewState(Failure failure) {
super.handleFailureViewState(failure);
if (failure is GetSessionFailure) { if (failure is GetSessionFailure) {
_handleSessionFailure(failure); _handleSessionFailure(failure);
} if (failure is GetStoredSessionFailure) {
_handleSessionFailure(failure);
} else {
super.handleFailureViewState(failure);
} }
} }
@@ -71,9 +74,10 @@ class SessionController extends ReloadableController {
@override @override
void handleExceptionAction({Failure? failure, Exception? exception}) { void handleExceptionAction({Failure? failure, Exception? exception}) {
super.handleExceptionAction(failure: failure, exception: exception); if (PlatformInfo.isMobile && failure is GetSessionFailure) {
if (PlatformInfo.isMobile && failure is GetSessionFailure && exception is NoNetworkError) {
_handleGetStoredSession(); _handleGetStoredSession();
} else {
super.handleExceptionAction(failure: failure, exception: exception);
} }
} }
@@ -85,7 +89,6 @@ class SessionController extends ReloadableController {
} }
void _handleGetStoredSession() { void _handleGetStoredSession() {
log('SessionController::_handleGetStoredSession():');
consumeState(_getStoredSessionInteractor.execute()); consumeState(_getStoredSessionInteractor.execute());
} }
@@ -93,31 +96,34 @@ class SessionController extends ReloadableController {
consumeState(_getSessionInteractor.execute()); consumeState(_getSessionInteractor.execute());
} }
void _handleSessionFailure(Failure failure) { void _handleSessionFailure(FeatureFailure failure) {
log('SessionController::_handleSessionFailure(): $failure'); final sessionException = failure.exception;
if (failure is GetSessionFailure) { var errorMessage = '';
final sessionException = failure.exception; if (_checkUrlError(sessionException) && currentContext != null) {
var errorMessage = ''; errorMessage = AppLocalizations.of(currentContext!).wrongUrlMessage;
if (_checkUrlError(sessionException) && currentContext != null) { } else if (sessionException is BadCredentialsException && currentContext != null) {
errorMessage = AppLocalizations.of(currentContext!).wrongUrlMessage; errorMessage = AppLocalizations.of(currentContext!).badCredentials;
} else if (sessionException is BadCredentialsException && currentContext != null) { } else if (sessionException is ConnectionError && currentContext != null) {
errorMessage = AppLocalizations.of(currentContext!).badCredentials; errorMessage = AppLocalizations.of(currentContext!).connectionError;
} else if (sessionException is ConnectionError && currentContext != null) { } else if (sessionException is UnknownError && currentContext != null) {
errorMessage = AppLocalizations.of(currentContext!).connectionError; if (sessionException.message != null && sessionException.code != null) {
} else if (sessionException is UnknownError && currentContext != null) { errorMessage = '[${sessionException.code}] ${sessionException.message}';
if (sessionException.message != null && sessionException.code != null) { } else if (sessionException.message != null) {
errorMessage = '[${sessionException.code}] ${sessionException.message}'; errorMessage = sessionException.message!;
} else if (sessionException.message != null) { } else {
errorMessage = sessionException.message!; errorMessage = AppLocalizations.of(currentContext!).unknownError;
} else {
errorMessage = AppLocalizations.of(currentContext!).unknownError;
}
} }
}
logError('SessionController::_handleSessionFailure():errorMessage: $errorMessage'); logError('SessionController::_handleSessionFailure():errorMessage: $errorMessage');
if (errorMessage.isNotEmpty && currentOverlayContext != null) { if (errorMessage.isNotEmpty && currentOverlayContext != null) {
_appToast.showToastErrorMessage(currentOverlayContext!, errorMessage); _appToast.showToastErrorMessage(currentOverlayContext!, errorMessage);
} }
if (PlatformInfo.isMobile) {
_handleGetStoredSession();
} else {
performInvokeLogoutAction();
} }
} }