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) {
if (failure is FeatureFailure) {
final exception = _performFilterExceptionInError(failure.exception);
logError('BaseController::onData:exception: $exception');
if (exception != null) {
handleExceptionAction(failure: failure, exception: exception);
} else {
@@ -121,42 +122,33 @@ abstract class BaseController extends GetxController
Exception? _performFilterExceptionInError(dynamic error) {
logError('BaseController::_performFilterExceptionInError(): $error');
if (error is NoNetworkError || error is ConnectionTimeout || error is InternalServerError) {
logError('BaseController::_performFilterExceptionInError(): NoNetworkError');
if (PlatformInfo.isWeb) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).no_internet_connection,
actionName: AppLocalizations.of(currentContext!).skip,
onActionClick: ToastView.dismiss,
leadingSVGIcon: _imagePaths.icNotConnection,
backgroundColor: AppColor.textFieldErrorBorderColor,
textColor: Colors.white,
infinityToast: true,
);
}
if (PlatformInfo.isWeb && currentOverlayContext != null && currentContext != null) {
_appToast.showToastMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).no_internet_connection,
actionName: AppLocalizations.of(currentContext!).skip,
onActionClick: ToastView.dismiss,
leadingSVGIcon: _imagePaths.icNotConnection,
backgroundColor: AppColor.textFieldErrorBorderColor,
textColor: Colors.white,
infinityToast: true,
);
}
return error;
} else if (error is BadCredentialsException) {
logError('BaseController::_performFilterExceptionInError(): BadCredentialsException');
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).badCredentials);
}
if (authorizationInterceptors.isAppRunning) {
performInvokeLogoutAction();
AppLocalizations.of(currentContext!).badCredentials
);
}
return error;
} else if (error is ConnectionError) {
logError('BaseController::_performFilterExceptionInError(): ConnectionError');
if (authorizationInterceptors.isAppRunning) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).connectionError);
}
performInvokeLogoutAction();
if (authorizationInterceptors.isAppRunning && currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).connectionError
);
}
return error;
}
@@ -168,6 +160,12 @@ abstract class BaseController extends GetxController
void 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) {
@@ -53,9 +53,12 @@ class SessionController extends ReloadableController {
@override
void handleFailureViewState(Failure failure) {
super.handleFailureViewState(failure);
if (failure is GetSessionFailure) {
_handleSessionFailure(failure);
} if (failure is GetStoredSessionFailure) {
_handleSessionFailure(failure);
} else {
super.handleFailureViewState(failure);
}
}
@@ -71,9 +74,10 @@ class SessionController extends ReloadableController {
@override
void handleExceptionAction({Failure? failure, Exception? exception}) {
super.handleExceptionAction(failure: failure, exception: exception);
if (PlatformInfo.isMobile && failure is GetSessionFailure && exception is NoNetworkError) {
if (PlatformInfo.isMobile && failure is GetSessionFailure) {
_handleGetStoredSession();
} else {
super.handleExceptionAction(failure: failure, exception: exception);
}
}
@@ -85,7 +89,6 @@ class SessionController extends ReloadableController {
}
void _handleGetStoredSession() {
log('SessionController::_handleGetStoredSession():');
consumeState(_getStoredSessionInteractor.execute());
}
@@ -93,31 +96,34 @@ class SessionController extends ReloadableController {
consumeState(_getSessionInteractor.execute());
}
void _handleSessionFailure(Failure failure) {
log('SessionController::_handleSessionFailure(): $failure');
if (failure is GetSessionFailure) {
final sessionException = failure.exception;
var errorMessage = '';
if (_checkUrlError(sessionException) && currentContext != null) {
errorMessage = AppLocalizations.of(currentContext!).wrongUrlMessage;
} else if (sessionException is BadCredentialsException && currentContext != null) {
errorMessage = AppLocalizations.of(currentContext!).badCredentials;
} else if (sessionException is ConnectionError && currentContext != null) {
errorMessage = AppLocalizations.of(currentContext!).connectionError;
} else if (sessionException is UnknownError && currentContext != null) {
if (sessionException.message != null && sessionException.code != null) {
errorMessage = '[${sessionException.code}] ${sessionException.message}';
} else if (sessionException.message != null) {
errorMessage = sessionException.message!;
} else {
errorMessage = AppLocalizations.of(currentContext!).unknownError;
}
void _handleSessionFailure(FeatureFailure failure) {
final sessionException = failure.exception;
var errorMessage = '';
if (_checkUrlError(sessionException) && currentContext != null) {
errorMessage = AppLocalizations.of(currentContext!).wrongUrlMessage;
} else if (sessionException is BadCredentialsException && currentContext != null) {
errorMessage = AppLocalizations.of(currentContext!).badCredentials;
} else if (sessionException is ConnectionError && currentContext != null) {
errorMessage = AppLocalizations.of(currentContext!).connectionError;
} else if (sessionException is UnknownError && currentContext != null) {
if (sessionException.message != null && sessionException.code != null) {
errorMessage = '[${sessionException.code}] ${sessionException.message}';
} else if (sessionException.message != null) {
errorMessage = sessionException.message!;
} else {
errorMessage = AppLocalizations.of(currentContext!).unknownError;
}
}
logError('SessionController::_handleSessionFailure():errorMessage: $errorMessage');
if (errorMessage.isNotEmpty && currentOverlayContext != null) {
_appToast.showToastErrorMessage(currentOverlayContext!, errorMessage);
}
logError('SessionController::_handleSessionFailure():errorMessage: $errorMessage');
if (errorMessage.isNotEmpty && currentOverlayContext != null) {
_appToast.showToastErrorMessage(currentOverlayContext!, errorMessage);
}
if (PlatformInfo.isMobile) {
_handleGetStoredSession();
} else {
performInvokeLogoutAction();
}
}