TF-1899 Sync and optimize handle error in base controller
(cherry picked from commit 1901d66c9100ca455c91ee8c95341de2a283eb67)
This commit is contained in:
@@ -93,35 +93,34 @@ abstract class BaseController extends GetxController
|
|||||||
viewState.value = newState;
|
viewState.value = newState;
|
||||||
viewState.value.fold(
|
viewState.value.fold(
|
||||||
(failure) {
|
(failure) {
|
||||||
if (_handleCommonException(failure)) {
|
if (failure is FeatureFailure) {
|
||||||
handleFinallyCommonException();
|
final exception = _performFilterExceptionInError(failure.exception);
|
||||||
return;
|
if (exception != null) {
|
||||||
|
handleExceptionAction(exception);
|
||||||
|
} else {
|
||||||
|
handleFailureViewState(failure);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
handleFailureViewState(failure);
|
||||||
}
|
}
|
||||||
handleFailureViewState(failure);
|
|
||||||
},
|
},
|
||||||
handleSuccessViewState);
|
handleSuccessViewState);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool _handleCommonException(Failure failure) {
|
|
||||||
if (failure is FeatureFailure) {
|
|
||||||
return _handleCommonError(failure.exception);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void onError(Object error, StackTrace stackTrace) {
|
void onError(Object error, StackTrace stackTrace) {
|
||||||
logError('BaseController::onError():error: $error | stackTrace: $stackTrace');
|
logError('BaseController::onError():error: $error | stackTrace: $stackTrace');
|
||||||
if (_handleCommonError(error)) {
|
final exception = _performFilterExceptionInError(error);
|
||||||
handleFinallyCommonException();
|
if (exception != null) {
|
||||||
return;
|
handleExceptionAction(exception);
|
||||||
|
} else {
|
||||||
|
handleErrorViewState(error, stackTrace);
|
||||||
}
|
}
|
||||||
handleErrorViewState(error, stackTrace);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void onDone() {}
|
void onDone() {}
|
||||||
|
|
||||||
bool _handleCommonError(dynamic error) {
|
Exception? _performFilterExceptionInError(dynamic error) {
|
||||||
logError('BaseController::_handleCommonError(): $error');
|
logError('BaseController::_performFilterExceptionInError(): $error');
|
||||||
if (error is NoNetworkError || error is ConnectError || error is InternalServerError) {
|
if (error is NoNetworkError || error is ConnectError || error is InternalServerError) {
|
||||||
if (currentOverlayContext != null && currentContext != null) {
|
if (currentOverlayContext != null && currentContext != null) {
|
||||||
_appToast.showToastMessage(
|
_appToast.showToastMessage(
|
||||||
@@ -135,46 +134,55 @@ abstract class BaseController extends GetxController
|
|||||||
infinityToast: true,
|
infinityToast: true,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return true;
|
return error;
|
||||||
} else if (error is BadCredentialsException) {
|
} else if (error is 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);
|
||||||
}
|
}
|
||||||
checkAuthenticationTypeWhenLogout();
|
performInvokeLogoutAction();
|
||||||
return true;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleErrorViewState(Object error, StackTrace stackTrace) {}
|
void handleErrorViewState(Object error, StackTrace stackTrace) {}
|
||||||
|
|
||||||
void handleFinallyCommonException() {
|
void handleExceptionAction(Exception exception) {
|
||||||
|
log('BaseController::handleExceptionAction():exception: $exception');
|
||||||
clearState();
|
clearState();
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleFailureViewState(Failure failure) {
|
void handleFailureViewState(Failure failure) {
|
||||||
logError('BaseController::handleFailureViewState(): $failure');
|
logError('BaseController::handleFailureViewState(): $failure');
|
||||||
if (failure is LogoutOidcFailure) {
|
if (failure is LogoutOidcFailure) {
|
||||||
_getSubscriptionLocalAction();
|
if (_isFcmEnabled) {
|
||||||
|
_getSubscriptionLocalAction();
|
||||||
|
} else {
|
||||||
|
_logoutOIDCAction();
|
||||||
|
}
|
||||||
} else if (failure is GetFCMSubscriptionLocalFailure) {
|
} else if (failure is GetFCMSubscriptionLocalFailure) {
|
||||||
checkAuthenticationTypeWhenLogout();
|
performInvokeLogoutAction();
|
||||||
} else if (failure is DestroySubscriptionFailure) {
|
} else if (failure is DestroySubscriptionFailure) {
|
||||||
checkAuthenticationTypeWhenLogout();
|
performInvokeLogoutAction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleSuccessViewState(Success success) {
|
void handleSuccessViewState(Success success) {
|
||||||
log('BaseController::handleSuccessViewState(): $success');
|
log('BaseController::handleSuccessViewState(): $success');
|
||||||
if (success is LogoutOidcSuccess) {
|
if (success is LogoutOidcSuccess) {
|
||||||
_getSubscriptionLocalAction();
|
if (_isFcmEnabled) {
|
||||||
|
_getSubscriptionLocalAction();
|
||||||
|
} else {
|
||||||
|
_logoutOIDCAction();
|
||||||
|
}
|
||||||
} else if (success is GetFCMSubscriptionLocalSuccess) {
|
} else if (success is GetFCMSubscriptionLocalSuccess) {
|
||||||
final subscriptionId = success.fcmSubscription.subscriptionId;
|
final subscriptionId = success.fcmSubscription.subscriptionId;
|
||||||
_destroySubscriptionAction(subscriptionId);
|
_destroySubscriptionAction(subscriptionId);
|
||||||
} else if (success is DestroySubscriptionSuccess) {
|
} else if (success is DestroySubscriptionSuccess) {
|
||||||
checkAuthenticationTypeWhenLogout();
|
performInvokeLogoutAction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -249,6 +257,10 @@ abstract class BaseController extends GetxController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AuthenticationType get authenticationType => authorizationInterceptors.authenticationType;
|
||||||
|
|
||||||
|
bool get isAuthenticatedWithOidc => authenticationType == AuthenticationType.oidc;
|
||||||
|
|
||||||
bool _isFcmActivated(Session session, AccountId accountId) =>
|
bool _isFcmActivated(Session session, AccountId accountId) =>
|
||||||
[FirebaseCapability.fcmIdentifier].isSupported(session, accountId) && AppConfig.fcmAvailable;
|
[FirebaseCapability.fcmIdentifier].isSupported(session, accountId) && AppConfig.fcmAvailable;
|
||||||
|
|
||||||
@@ -258,17 +270,18 @@ abstract class BaseController extends GetxController
|
|||||||
|
|
||||||
void logout(Session? session, AccountId? accountId) {
|
void logout(Session? session, AccountId? accountId) {
|
||||||
if (session == null || accountId == null) {
|
if (session == null || accountId == null) {
|
||||||
|
logError('BaseController::logout(): Session is $session OR AccountId is $accountId');
|
||||||
|
performInvokeLogoutAction();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_isFcmEnabled = _isFcmActivated(session, accountId);
|
_isFcmEnabled = _isFcmActivated(session, accountId);
|
||||||
final authenticationType = authorizationInterceptors.authenticationType;
|
if (isAuthenticatedWithOidc) {
|
||||||
if (authenticationType == AuthenticationType.oidc) {
|
|
||||||
consumeState(logoutOidcInteractor.execute());
|
consumeState(logoutOidcInteractor.execute());
|
||||||
} else {
|
} else {
|
||||||
if (_isFcmEnabled) {
|
if (_isFcmEnabled) {
|
||||||
_getSubscriptionLocalAction();
|
_getSubscriptionLocalAction();
|
||||||
} else {
|
} else {
|
||||||
logoutAction();
|
_logoutAction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -278,33 +291,31 @@ abstract class BaseController extends GetxController
|
|||||||
_destroySubscriptionInteractor = Get.find<DestroySubscriptionInteractor>();
|
_destroySubscriptionInteractor = Get.find<DestroySubscriptionInteractor>();
|
||||||
consumeState(_destroySubscriptionInteractor!.execute(subscriptionId));
|
consumeState(_destroySubscriptionInteractor!.execute(subscriptionId));
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
logError('ReloadableController::destroySubscriptionAction(): exception: $e');
|
logError('BaseController::destroySubscriptionAction(): exception: $e');
|
||||||
logoutAction();
|
performInvokeLogoutAction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _getSubscriptionLocalAction() {
|
void _getSubscriptionLocalAction() {
|
||||||
try {
|
try {
|
||||||
_getSubscriptionLocalInteractor = Get.find<GetFCMSubscriptionLocalInteractor>();
|
_getSubscriptionLocalInteractor = Get.find<GetFCMSubscriptionLocalInteractor>();
|
||||||
consumeState(_getSubscriptionLocalInteractor!.execute());
|
consumeState(_getSubscriptionLocalInteractor!.execute());
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logError(
|
logError('BaseController::getSubscriptionLocalAction(): exception: $e');
|
||||||
'ReloadableController::getSubscriptionLocalAction(): exception: $e');
|
performInvokeLogoutAction();
|
||||||
logoutAction();
|
|
||||||
}
|
}
|
||||||
return Future.value();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void checkAuthenticationTypeWhenLogout() {
|
void performInvokeLogoutAction() {
|
||||||
final authenticationType = authorizationInterceptors.authenticationType;
|
if (isAuthenticatedWithOidc) {
|
||||||
if (authenticationType == AuthenticationType.oidc) {
|
|
||||||
_logoutOIDCAction();
|
_logoutOIDCAction();
|
||||||
} else {
|
} else {
|
||||||
logoutAction();
|
_logoutAction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void logoutAction() async {
|
void _logoutAction() async {
|
||||||
|
log('BaseController::_logoutAction():');
|
||||||
await Future.wait([
|
await Future.wait([
|
||||||
deleteCredentialInteractor.execute(),
|
deleteCredentialInteractor.execute(),
|
||||||
cachingManager.clearAll(),
|
cachingManager.clearAll(),
|
||||||
@@ -321,7 +332,7 @@ abstract class BaseController extends GetxController
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _logoutOIDCAction() async {
|
void _logoutOIDCAction() async {
|
||||||
log('ReloadableController::_logoutOIDCAction():');
|
log('BaseController::_logoutOIDCAction():');
|
||||||
await Future.wait([
|
await Future.wait([
|
||||||
deleteAuthorityOidcInteractor.execute(),
|
deleteAuthorityOidcInteractor.execute(),
|
||||||
cachingManager.clearAll(),
|
cachingManager.clearAll(),
|
||||||
@@ -334,5 +345,6 @@ abstract class BaseController extends GetxController
|
|||||||
_fcmReceiver.deleteFcmToken();
|
_fcmReceiver.deleteFcmToken();
|
||||||
}
|
}
|
||||||
await cachingManager.closeHive();
|
await cachingManager.closeHive();
|
||||||
|
goToLogin(arguments: LoginArguments(LoginFormType.ssoForm));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import 'package:core/data/network/config/dynamic_url_interceptors.dart';
|
import 'package:core/data/network/config/dynamic_url_interceptors.dart';
|
||||||
import 'package:core/presentation/extensions/uri_extension.dart';
|
|
||||||
import 'package:core/presentation/state/failure.dart';
|
import 'package:core/presentation/state/failure.dart';
|
||||||
import 'package:core/presentation/state/success.dart';
|
import 'package:core/presentation/state/success.dart';
|
||||||
import 'package:core/utils/app_logger.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
@@ -8,7 +7,6 @@ import 'package:jmap_dart_client/jmap/account_id.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
|
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||||
import 'package:model/account/authentication_type.dart';
|
|
||||||
import 'package:model/extensions/session_extension.dart';
|
import 'package:model/extensions/session_extension.dart';
|
||||||
import 'package:model/oidc/token_oidc.dart';
|
import 'package:model/oidc/token_oidc.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||||
@@ -20,6 +18,7 @@ import 'package:tmail_ui_user/features/login/domain/usecases/update_authenticati
|
|||||||
import 'package:tmail_ui_user/features/login/presentation/login_form_type.dart';
|
import 'package:tmail_ui_user/features/login/presentation/login_form_type.dart';
|
||||||
import 'package:tmail_ui_user/features/login/presentation/model/login_arguments.dart';
|
import 'package:tmail_ui_user/features/login/presentation/model/login_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_interactors_bindings.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_interactors_bindings.dart';
|
||||||
|
import 'package:tmail_ui_user/features/session/domain/extensions/session_extensions.dart';
|
||||||
import 'package:tmail_ui_user/features/session/domain/state/get_session_state.dart';
|
import 'package:tmail_ui_user/features/session/domain/state/get_session_state.dart';
|
||||||
import 'package:tmail_ui_user/features/session/domain/usecases/get_session_interactor.dart';
|
import 'package:tmail_ui_user/features/session/domain/usecases/get_session_interactor.dart';
|
||||||
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
||||||
@@ -94,35 +93,22 @@ abstract class ReloadableController extends BaseController {
|
|||||||
consumeState(_getSessionInteractor.execute());
|
consumeState(_getSessionInteractor.execute());
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleGetSessionFailure() async {
|
void _handleGetSessionFailure() {
|
||||||
await Future.wait([
|
performInvokeLogoutAction();
|
||||||
deleteCredentialInteractor.execute(),
|
|
||||||
deleteAuthorityOidcInteractor.execute(),
|
|
||||||
cachingManager.clearAll(),
|
|
||||||
languageCacheManager.removeLanguage(),
|
|
||||||
]);
|
|
||||||
final authenticationType = authorizationInterceptors.authenticationType;
|
|
||||||
if (authenticationType == AuthenticationType.oidc) {
|
|
||||||
goToLogin(arguments: LoginArguments(LoginFormType.ssoForm));
|
|
||||||
} else {
|
|
||||||
goToLogin(arguments: LoginArguments(LoginFormType.credentialForm));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleGetSessionSuccess(GetSessionSuccess success) {
|
void _handleGetSessionSuccess(GetSessionSuccess success) {
|
||||||
final session = success.session;
|
final session = success.session;
|
||||||
final personalAccount = session.personalAccount;
|
final personalAccount = session.personalAccount;
|
||||||
final jmapUrl = _dynamicUrlInterceptors.jmapUrl;
|
final apiUrl = session.getQualifiedApiUrl(baseUrl: _dynamicUrlInterceptors.jmapUrl);
|
||||||
final apiUrl = jmapUrl != null
|
|
||||||
? session.apiUrl.toQualifiedUrl(baseUrl: Uri.parse(jmapUrl)).toString()
|
|
||||||
: session.apiUrl.toString();
|
|
||||||
log('ReloadableController::_handleGetSessionSuccess():apiUrl: $apiUrl');
|
log('ReloadableController::_handleGetSessionSuccess():apiUrl: $apiUrl');
|
||||||
if (apiUrl.isNotEmpty) {
|
if (apiUrl.isNotEmpty) {
|
||||||
_dynamicUrlInterceptors.changeBaseUrl(apiUrl);
|
_dynamicUrlInterceptors.changeBaseUrl(apiUrl);
|
||||||
updateAuthenticationAccount(session, personalAccount.accountId, session.username);
|
updateAuthenticationAccount(session, personalAccount.accountId, session.username);
|
||||||
handleReloaded(session);
|
handleReloaded(session);
|
||||||
} else {
|
} else {
|
||||||
_handleGetSessionFailure();
|
logError('ReloadableController::_handleGetSessionSuccess(): apiUrl is NULL');
|
||||||
|
performInvokeLogoutAction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,10 +140,7 @@ abstract class ReloadableController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void updateAuthenticationAccount(Session session, AccountId accountId, UserName userName) {
|
void updateAuthenticationAccount(Session session, AccountId accountId, UserName userName) {
|
||||||
final jmapUrl = _dynamicUrlInterceptors.jmapUrl;
|
final apiUrl = session.getQualifiedApiUrl(baseUrl: _dynamicUrlInterceptors.jmapUrl);;
|
||||||
final apiUrl = jmapUrl != null
|
|
||||||
? session.apiUrl.toQualifiedUrl(baseUrl: Uri.parse(jmapUrl)).toString()
|
|
||||||
: session.apiUrl.toString();
|
|
||||||
log('ReloadableController::updateAuthenticationAccount():apiUrl: $apiUrl');
|
log('ReloadableController::updateAuthenticationAccount():apiUrl: $apiUrl');
|
||||||
if (apiUrl.isNotEmpty) {
|
if (apiUrl.isNotEmpty) {
|
||||||
consumeState(_updateAuthenticationAccountInteractor.execute(accountId, apiUrl, userName));
|
consumeState(_updateAuthenticationAccountInteractor.execute(accountId, apiUrl, userName));
|
||||||
|
|||||||
@@ -81,12 +81,11 @@ class CachingManager {
|
|||||||
], eagerError: true);
|
], eagerError: true);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> clearEmailCache() async {
|
Future<void> clearEmailCache() {
|
||||||
await Future.wait([
|
return Future.wait([
|
||||||
_stateCacheClient.deleteItem(StateType.email.value),
|
_stateCacheClient.deleteItem(StateType.email.value),
|
||||||
_emailCacheClient.clearAllData(),
|
_emailCacheClient.clearAllData(),
|
||||||
], eagerError: true);
|
], eagerError: true);
|
||||||
log('CachingManager::clearEmailCache(): success');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> onUpgradeCache(int oldVersion, int newVersion) async {
|
Future<void> onUpgradeCache(int oldVersion, int newVersion) async {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import 'package:model/account/authentication_type.dart';
|
|
||||||
import 'package:model/account/personal_account.dart';
|
import 'package:model/account/personal_account.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/model/account_cache.dart';
|
import 'package:tmail_ui_user/features/login/data/model/account_cache.dart';
|
||||||
|
|
||||||
@@ -6,7 +5,7 @@ extension PersonalAccountExtension on PersonalAccount {
|
|||||||
AccountCache toCache() {
|
AccountCache toCache() {
|
||||||
return AccountCache(
|
return AccountCache(
|
||||||
id,
|
id,
|
||||||
authenticationType.asString(),
|
authenticationType.name,
|
||||||
isSelected: isSelected,
|
isSelected: isSelected,
|
||||||
accountId: accountId?.id.value,
|
accountId: accountId?.id.value,
|
||||||
apiUrl: apiUrl,
|
apiUrl: apiUrl,
|
||||||
|
|||||||
@@ -189,8 +189,8 @@ class LoginController extends ReloadableController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void handleFinallyCommonException() {
|
void handleExceptionAction(Exception exception) {
|
||||||
super.handleFinallyCommonException();
|
super.handleExceptionAction(exception);
|
||||||
loginState.value = LoginState(Right(LoginInitAction()));
|
loginState.value = LoginState(Right(LoginInitAction()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:core/data/network/config/dynamic_url_interceptors.dart';
|
import 'package:core/data/network/config/dynamic_url_interceptors.dart';
|
||||||
import 'package:core/presentation/extensions/uri_extension.dart';
|
|
||||||
import 'package:core/presentation/state/failure.dart';
|
import 'package:core/presentation/state/failure.dart';
|
||||||
import 'package:core/presentation/state/success.dart';
|
import 'package:core/presentation/state/success.dart';
|
||||||
import 'package:core/utils/app_logger.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
@@ -30,6 +29,7 @@ import 'package:tmail_ui_user/features/offline_mode/scheduler/worker_state.dart'
|
|||||||
import 'package:tmail_ui_user/features/push_notification/presentation/notification/local_notification_config.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/notification/local_notification_config.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/notification/local_notification_manager.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/notification/local_notification_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/sending_queue/presentation/utils/sending_queue_isolate_manager.dart';
|
import 'package:tmail_ui_user/features/sending_queue/presentation/utils/sending_queue_isolate_manager.dart';
|
||||||
|
import 'package:tmail_ui_user/features/session/domain/extensions/session_extensions.dart';
|
||||||
import 'package:tmail_ui_user/features/session/domain/state/get_session_state.dart';
|
import 'package:tmail_ui_user/features/session/domain/state/get_session_state.dart';
|
||||||
import 'package:tmail_ui_user/features/session/domain/usecases/get_session_interactor.dart';
|
import 'package:tmail_ui_user/features/session/domain/usecases/get_session_interactor.dart';
|
||||||
import 'package:tmail_ui_user/main/bindings/main_bindings.dart';
|
import 'package:tmail_ui_user/main/bindings/main_bindings.dart';
|
||||||
@@ -153,11 +153,8 @@ class SendingEmailObserver extends WorkObserver {
|
|||||||
void _handleGetSessionSuccess(GetSessionSuccess success) {
|
void _handleGetSessionSuccess(GetSessionSuccess success) {
|
||||||
_currentSession = success.session;
|
_currentSession = success.session;
|
||||||
_userName = success.session.username;
|
_userName = success.session.username;
|
||||||
final jmapUrl = _dynamicUrlInterceptors?.jmapUrl;
|
final apiUrl = success.session.getQualifiedApiUrl(baseUrl: _dynamicUrlInterceptors?.jmapUrl);
|
||||||
final apiUrl = jmapUrl != null
|
log('SendingEmailObserver::_handleGetSessionSuccess():apiUrl: $apiUrl');
|
||||||
? success.session.apiUrl.toQualifiedUrl(baseUrl: Uri.parse(jmapUrl)).toString()
|
|
||||||
: success.session.apiUrl.toString();
|
|
||||||
log('SendingEmailObserver::_handleGetSessionSuccess():jmapUrl: $jmapUrl | apiUrl: $apiUrl');
|
|
||||||
if (apiUrl.isNotEmpty) {
|
if (apiUrl.isNotEmpty) {
|
||||||
_dynamicUrlInterceptors?.changeBaseUrl(apiUrl);
|
_dynamicUrlInterceptors?.changeBaseUrl(apiUrl);
|
||||||
_sendEmailAction();
|
_sendEmailAction();
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import 'dart:async';
|
|||||||
|
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
import 'package:core/data/network/config/dynamic_url_interceptors.dart';
|
import 'package:core/data/network/config/dynamic_url_interceptors.dart';
|
||||||
import 'package:core/presentation/extensions/uri_extension.dart';
|
|
||||||
import 'package:core/presentation/state/failure.dart';
|
import 'package:core/presentation/state/failure.dart';
|
||||||
import 'package:core/presentation/state/success.dart';
|
import 'package:core/presentation/state/success.dart';
|
||||||
import 'package:core/utils/app_logger.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
@@ -34,6 +33,7 @@ import 'package:tmail_ui_user/features/push_notification/presentation/listener/e
|
|||||||
import 'package:tmail_ui_user/features/push_notification/presentation/listener/mailbox_change_listener.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/listener/mailbox_change_listener.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/services/fcm_service.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/services/fcm_service.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/utils/fcm_utils.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/utils/fcm_utils.dart';
|
||||||
|
import 'package:tmail_ui_user/features/session/domain/extensions/session_extensions.dart';
|
||||||
import 'package:tmail_ui_user/features/session/domain/state/get_session_state.dart';
|
import 'package:tmail_ui_user/features/session/domain/state/get_session_state.dart';
|
||||||
import 'package:tmail_ui_user/features/session/domain/usecases/get_session_interactor.dart';
|
import 'package:tmail_ui_user/features/session/domain/usecases/get_session_interactor.dart';
|
||||||
import 'package:tmail_ui_user/main/bindings/main_bindings.dart';
|
import 'package:tmail_ui_user/main/bindings/main_bindings.dart';
|
||||||
@@ -274,11 +274,8 @@ class FcmMessageController extends FcmBaseController {
|
|||||||
void _handleGetSessionSuccess(GetSessionSuccess success) {
|
void _handleGetSessionSuccess(GetSessionSuccess success) {
|
||||||
_currentSession = success.session;
|
_currentSession = success.session;
|
||||||
_userName = success.session.username;
|
_userName = success.session.username;
|
||||||
final jmapUrl = _dynamicUrlInterceptors?.jmapUrl;
|
final apiUrl = success.session.getQualifiedApiUrl(baseUrl: _dynamicUrlInterceptors?.jmapUrl);
|
||||||
final apiUrl = jmapUrl != null
|
log('FcmMessageController::_pushActionFromRemoteMessageBackground():apiUrl: $apiUrl');
|
||||||
? success.session.apiUrl.toQualifiedUrl(baseUrl: Uri.parse(jmapUrl)).toString()
|
|
||||||
: success.session.apiUrl.toString();
|
|
||||||
log('FcmMessageController::_pushActionFromRemoteMessageBackground():jmapUrl: $jmapUrl | apiUrl: $apiUrl');
|
|
||||||
if (apiUrl.isNotEmpty) {
|
if (apiUrl.isNotEmpty) {
|
||||||
_dynamicUrlInterceptors?.changeBaseUrl(apiUrl);
|
_dynamicUrlInterceptors?.changeBaseUrl(apiUrl);
|
||||||
_pushActionFromRemoteMessageBackground();
|
_pushActionFromRemoteMessageBackground();
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
|
|
||||||
|
import 'package:core/presentation/extensions/uri_extension.dart';
|
||||||
import 'package:jmap_dart_client/http/converter/state_converter.dart';
|
import 'package:jmap_dart_client/http/converter/state_converter.dart';
|
||||||
import 'package:jmap_dart_client/http/converter/user_name_converter.dart';
|
import 'package:jmap_dart_client/http/converter/user_name_converter.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||||
@@ -32,4 +33,12 @@ extension SessionExtensions on Session {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SessionHiveObj toHiveObj() => SessionHiveObj(values: toJson());
|
SessionHiveObj toHiveObj() => SessionHiveObj(values: toJson());
|
||||||
|
|
||||||
|
String getQualifiedApiUrl({String? baseUrl}) {
|
||||||
|
if (baseUrl != null) {
|
||||||
|
return apiUrl.toQualifiedUrl(baseUrl: Uri.parse(baseUrl)).toString();
|
||||||
|
} else {
|
||||||
|
return apiUrl.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -11,9 +11,8 @@ class GetSessionSuccess extends UIState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class GetSessionFailure extends FeatureFailure {
|
class GetSessionFailure extends FeatureFailure {
|
||||||
final dynamic exception;
|
|
||||||
|
|
||||||
GetSessionFailure(this.exception);
|
GetSessionFailure(dynamic exception) : super(exception: exception);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [exception];
|
List<Object?> get props => [exception];
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import 'package:core/data/network/config/dynamic_url_interceptors.dart';
|
import 'package:core/data/network/config/dynamic_url_interceptors.dart';
|
||||||
import 'package:core/presentation/extensions/uri_extension.dart';
|
|
||||||
import 'package:core/presentation/state/failure.dart';
|
import 'package:core/presentation/state/failure.dart';
|
||||||
import 'package:core/presentation/state/success.dart';
|
import 'package:core/presentation/state/success.dart';
|
||||||
import 'package:core/presentation/utils/app_toast.dart';
|
import 'package:core/presentation/utils/app_toast.dart';
|
||||||
@@ -12,6 +11,7 @@ import 'package:tmail_ui_user/features/login/domain/usecases/delete_authority_oi
|
|||||||
import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart';
|
import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart';
|
import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/session/domain/extensions/session_extensions.dart';
|
||||||
import 'package:tmail_ui_user/features/session/domain/state/get_session_state.dart';
|
import 'package:tmail_ui_user/features/session/domain/state/get_session_state.dart';
|
||||||
import 'package:tmail_ui_user/features/session/domain/usecases/get_session_interactor.dart';
|
import 'package:tmail_ui_user/features/session/domain/usecases/get_session_interactor.dart';
|
||||||
import 'package:tmail_ui_user/main/exceptions/remote_exception.dart';
|
import 'package:tmail_ui_user/main/exceptions/remote_exception.dart';
|
||||||
@@ -55,7 +55,6 @@ class SessionController extends ReloadableController {
|
|||||||
super.handleFailureViewState(failure);
|
super.handleFailureViewState(failure);
|
||||||
if (failure is GetSessionFailure) {
|
if (failure is GetSessionFailure) {
|
||||||
_handleSessionFailure(failure);
|
_handleSessionFailure(failure);
|
||||||
_goToLogin();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,7 +95,7 @@ class SessionController extends ReloadableController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
logError('SessionController::_handleSessionFailure():errorMessage: $errorMessage');
|
logError('SessionController::_handleSessionFailure():errorMessage: $errorMessage');
|
||||||
if (errorMessage.isNotEmpty && currentOverlayContext != null && currentContext != null) {
|
if (errorMessage.isNotEmpty && currentOverlayContext != null) {
|
||||||
_appToast.showToastErrorMessage(currentOverlayContext!, errorMessage);
|
_appToast.showToastErrorMessage(currentOverlayContext!, errorMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -106,21 +105,8 @@ class SessionController extends ReloadableController {
|
|||||||
return sessionException is ConnectError || sessionException is BadGateway || sessionException is SocketError;
|
return sessionException is ConnectError || sessionException is BadGateway || sessionException is SocketError;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _goToLogin() async {
|
|
||||||
await Future.wait([
|
|
||||||
deleteCredentialInteractor.execute(),
|
|
||||||
deleteAuthorityOidcInteractor.execute(),
|
|
||||||
cachingManager.clearAll()
|
|
||||||
]);
|
|
||||||
authorizationInterceptors.clear();
|
|
||||||
pushAndPopAll(AppRoutes.login);
|
|
||||||
}
|
|
||||||
|
|
||||||
void _goToMailboxDashBoard(GetSessionSuccess success) {
|
void _goToMailboxDashBoard(GetSessionSuccess success) {
|
||||||
final jmapUrl = _dynamicUrlInterceptors.jmapUrl;
|
final apiUrl = success.session.getQualifiedApiUrl(baseUrl: _dynamicUrlInterceptors.jmapUrl);
|
||||||
final apiUrl = jmapUrl != null
|
|
||||||
? success.session.apiUrl.toQualifiedUrl(baseUrl: Uri.parse(jmapUrl)).toString()
|
|
||||||
: success.session.apiUrl.toString();
|
|
||||||
log('SessionController::_goToMailboxDashBoard():apiUrl: $apiUrl');
|
log('SessionController::_goToMailboxDashBoard():apiUrl: $apiUrl');
|
||||||
if (apiUrl.isNotEmpty) {
|
if (apiUrl.isNotEmpty) {
|
||||||
_dynamicUrlInterceptors.changeBaseUrl(apiUrl);
|
_dynamicUrlInterceptors.changeBaseUrl(apiUrl);
|
||||||
@@ -128,7 +114,8 @@ class SessionController extends ReloadableController {
|
|||||||
RouteUtils.generateNavigationRoute(AppRoutes.dashboard, NavigationRouter()),
|
RouteUtils.generateNavigationRoute(AppRoutes.dashboard, NavigationRouter()),
|
||||||
arguments: success.session);
|
arguments: success.session);
|
||||||
} else {
|
} else {
|
||||||
_goToLogin();
|
logError('SessionController::_goToMailboxDashBoard(): apiUrl is NULL');
|
||||||
|
performInvokeLogoutAction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -339,8 +339,6 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
if (error is CannotCalculateChangesMethodResponseException) {
|
if (error is CannotCalculateChangesMethodResponseException) {
|
||||||
await cachingManager.clearEmailCache();
|
await cachingManager.clearEmailCache();
|
||||||
_getAllEmailAction();
|
_getAllEmailAction();
|
||||||
} else {
|
|
||||||
super.onError(error, stackTrace);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,5 @@
|
|||||||
enum AuthenticationType {
|
enum AuthenticationType {
|
||||||
basic,
|
basic,
|
||||||
oidc,
|
oidc,
|
||||||
none
|
none;
|
||||||
}
|
|
||||||
|
|
||||||
extension AuthenticationTypeExtension on AuthenticationType {
|
|
||||||
String asString() {
|
|
||||||
switch (this) {
|
|
||||||
case AuthenticationType.oidc:
|
|
||||||
return 'oidc';
|
|
||||||
case AuthenticationType.basic:
|
|
||||||
return 'basic';
|
|
||||||
default:
|
|
||||||
return 'none';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user