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:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user