TF-867 [Android] Share image with TeamMail app but image is not add to inline image
This commit is contained in:
@@ -11,6 +11,7 @@ import 'package:tmail_ui_user/features/base/base_controller.dart';
|
|||||||
import 'package:tmail_ui_user/features/caching/caching_manager.dart';
|
import 'package:tmail_ui_user/features/caching/caching_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/caching/config/hive_cache_config.dart';
|
import 'package:tmail_ui_user/features/caching/config/hive_cache_config.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
|
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
|
||||||
|
import 'package:tmail_ui_user/features/login/data/network/config/authorization_isolate_interceptors.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/state/get_credential_state.dart';
|
import 'package:tmail_ui_user/features/login/domain/state/get_credential_state.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/state/get_stored_token_oidc_state.dart';
|
import 'package:tmail_ui_user/features/login/domain/state/get_stored_token_oidc_state.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/usecases/delete_authority_oidc_interactor.dart';
|
import 'package:tmail_ui_user/features/login/domain/usecases/delete_authority_oidc_interactor.dart';
|
||||||
@@ -30,6 +31,7 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
|||||||
abstract class ReloadableController extends BaseController {
|
abstract class ReloadableController extends BaseController {
|
||||||
final DynamicUrlInterceptors _dynamicUrlInterceptors = Get.find<DynamicUrlInterceptors>();
|
final DynamicUrlInterceptors _dynamicUrlInterceptors = Get.find<DynamicUrlInterceptors>();
|
||||||
final AuthorizationInterceptors _authorizationInterceptors = Get.find<AuthorizationInterceptors>();
|
final AuthorizationInterceptors _authorizationInterceptors = Get.find<AuthorizationInterceptors>();
|
||||||
|
final AuthorizationIsolateInterceptors _authorizationIsolateInterceptors = Get.find<AuthorizationIsolateInterceptors>();
|
||||||
final GetSessionInteractor _getSessionInteractor = Get.find<GetSessionInteractor>();
|
final GetSessionInteractor _getSessionInteractor = Get.find<GetSessionInteractor>();
|
||||||
final DeleteCredentialInteractor _deleteCredentialInteractor = Get.find<DeleteCredentialInteractor>();
|
final DeleteCredentialInteractor _deleteCredentialInteractor = Get.find<DeleteCredentialInteractor>();
|
||||||
final CachingManager _cachingManager = Get.find<CachingManager>();
|
final CachingManager _cachingManager = Get.find<CachingManager>();
|
||||||
@@ -95,6 +97,10 @@ abstract class ReloadableController extends BaseController {
|
|||||||
credentialViewState.userName.userName,
|
credentialViewState.userName.userName,
|
||||||
credentialViewState.password.value,
|
credentialViewState.password.value,
|
||||||
);
|
);
|
||||||
|
_authorizationIsolateInterceptors.setBasicAuthorization(
|
||||||
|
credentialViewState.userName.userName,
|
||||||
|
credentialViewState.password.value,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleGetCredentialSuccess(GetCredentialViewState credentialViewState) {
|
void _handleGetCredentialSuccess(GetCredentialViewState credentialViewState) {
|
||||||
@@ -138,6 +144,7 @@ abstract class ReloadableController extends BaseController {
|
|||||||
_languageCacheManager.removeLanguage(),
|
_languageCacheManager.removeLanguage(),
|
||||||
]);
|
]);
|
||||||
_authorizationInterceptors.clear();
|
_authorizationInterceptors.clear();
|
||||||
|
_authorizationIsolateInterceptors.clear();
|
||||||
await HiveCacheConfig().closeHive();
|
await HiveCacheConfig().closeHive();
|
||||||
_goToLogin(arguments: LoginArguments(LoginFormType.credentialForm));
|
_goToLogin(arguments: LoginArguments(LoginFormType.credentialForm));
|
||||||
}
|
}
|
||||||
@@ -151,6 +158,7 @@ abstract class ReloadableController extends BaseController {
|
|||||||
_cachingManager.clearAll(),
|
_cachingManager.clearAll(),
|
||||||
_languageCacheManager.removeLanguage(),
|
_languageCacheManager.removeLanguage(),
|
||||||
]);
|
]);
|
||||||
|
_authorizationIsolateInterceptors.clear();
|
||||||
_authorizationInterceptors.clear();
|
_authorizationInterceptors.clear();
|
||||||
await HiveCacheConfig().closeHive();
|
await HiveCacheConfig().closeHive();
|
||||||
_goToLogin(arguments: LoginArguments(LoginFormType.ssoForm));
|
_goToLogin(arguments: LoginArguments(LoginFormType.ssoForm));
|
||||||
@@ -166,6 +174,9 @@ abstract class ReloadableController extends BaseController {
|
|||||||
_authorizationInterceptors.setTokenAndAuthorityOidc(
|
_authorizationInterceptors.setTokenAndAuthorityOidc(
|
||||||
newToken: tokenOidcSuccess.tokenOidc.toToken(),
|
newToken: tokenOidcSuccess.tokenOidc.toToken(),
|
||||||
newConfig: tokenOidcSuccess.oidcConfiguration);
|
newConfig: tokenOidcSuccess.oidcConfiguration);
|
||||||
|
_authorizationIsolateInterceptors.setTokenAndAuthorityOidc(
|
||||||
|
newToken: tokenOidcSuccess.tokenOidc.toToken(),
|
||||||
|
newConfig: tokenOidcSuccess.oidcConfiguration);
|
||||||
}
|
}
|
||||||
|
|
||||||
void injectAutoCompleteBindings() {
|
void injectAutoCompleteBindings() {
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ import 'package:tmail_ui_user/features/upload/data/datasource_impl/attachment_up
|
|||||||
import 'package:tmail_ui_user/features/upload/data/network/file_uploader.dart';
|
import 'package:tmail_ui_user/features/upload/data/network/file_uploader.dart';
|
||||||
import 'package:tmail_ui_user/features/upload/domain/usecases/local_file_picker_interactor.dart';
|
import 'package:tmail_ui_user/features/upload/domain/usecases/local_file_picker_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/upload/presentation/controller/upload_controller.dart';
|
import 'package:tmail_ui_user/features/upload/presentation/controller/upload_controller.dart';
|
||||||
import 'package:worker_manager/worker_manager.dart';
|
import 'package:tmail_ui_user/main/bindings/network/binding_tag.dart';
|
||||||
|
|
||||||
class ComposerBindings extends BaseBindings {
|
class ComposerBindings extends BaseBindings {
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@ class ComposerBindings extends BaseBindings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _bindingsUtils() {
|
void _bindingsUtils() {
|
||||||
Get.lazyPut(() => FileUploader(Get.find<DioClient>(), Get.find<Executor>()));
|
Get.lazyPut(() => FileUploader(Get.find<DioClient>(tag: BindingTag.isoLateTag)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -171,6 +171,7 @@ class ComposerBindings extends BaseBindings {
|
|||||||
void dispose() {
|
void dispose() {
|
||||||
Get.delete<UploadController>();
|
Get.delete<UploadController>();
|
||||||
Get.delete<RichTextWebController>();
|
Get.delete<RichTextWebController>();
|
||||||
|
Get.delete<RichTextMobileTabletController>();
|
||||||
Get.delete<ComposerController>();
|
Get.delete<ComposerController>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -245,7 +245,9 @@ class ComposerController extends BaseController {
|
|||||||
listIdentities.value = success.identities!
|
listIdentities.value = success.identities!
|
||||||
.where((identity) => identity.mayDelete == true)
|
.where((identity) => identity.mayDelete == true)
|
||||||
.toList();
|
.toList();
|
||||||
selectIdentity(listIdentities.first);
|
if (listIdentities.isNotEmpty) {
|
||||||
|
selectIdentity(listIdentities.first);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (success is DownloadImageAsBase64Success) {
|
} else if (success is DownloadImageAsBase64Success) {
|
||||||
if(kIsWeb) {
|
if(kIsWeb) {
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import 'package:tmail_ui_user/features/login/data/local/oidc_configuration_cache
|
|||||||
import 'package:tmail_ui_user/features/login/data/local/token_oidc_cache_manager.dart';
|
import 'package:tmail_ui_user/features/login/data/local/token_oidc_cache_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/network/authentication_client/authentication_client_base.dart';
|
import 'package:tmail_ui_user/features/login/data/network/authentication_client/authentication_client_base.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
|
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
|
||||||
|
import 'package:tmail_ui_user/features/login/data/network/config/authorization_isolate_interceptors.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/network/oidc_http_client.dart';
|
import 'package:tmail_ui_user/features/login/data/network/oidc_http_client.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/repository/account_repository_impl.dart';
|
import 'package:tmail_ui_user/features/login/data/repository/account_repository_impl.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/repository/authentication_oidc_repository_impl.dart';
|
import 'package:tmail_ui_user/features/login/data/repository/authentication_oidc_repository_impl.dart';
|
||||||
@@ -42,6 +43,7 @@ class HomeBindings extends BaseBindings {
|
|||||||
Get.find<GetAuthenticatedAccountInteractor>(),
|
Get.find<GetAuthenticatedAccountInteractor>(),
|
||||||
Get.find<DynamicUrlInterceptors>(),
|
Get.find<DynamicUrlInterceptors>(),
|
||||||
Get.find<AuthorizationInterceptors>(),
|
Get.find<AuthorizationInterceptors>(),
|
||||||
|
Get.find<AuthorizationIsolateInterceptors>(),
|
||||||
Get.find<CleanupEmailCacheInteractor>(),
|
Get.find<CleanupEmailCacheInteractor>(),
|
||||||
Get.find<EmailReceiveManager>(),
|
Get.find<EmailReceiveManager>(),
|
||||||
Get.find<CleanupRecentSearchCacheInteractor>(),
|
Get.find<CleanupRecentSearchCacheInteractor>(),
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import 'package:tmail_ui_user/features/cleanup/domain/model/recent_search_cleanu
|
|||||||
import 'package:tmail_ui_user/features/cleanup/domain/usecases/cleanup_email_cache_interactor.dart';
|
import 'package:tmail_ui_user/features/cleanup/domain/usecases/cleanup_email_cache_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/cleanup/domain/usecases/cleanup_recent_search_cache_interactor.dart';
|
import 'package:tmail_ui_user/features/cleanup/domain/usecases/cleanup_recent_search_cache_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
|
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
|
||||||
|
import 'package:tmail_ui_user/features/login/data/network/config/authorization_isolate_interceptors.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/state/check_oidc_is_available_state.dart';
|
import 'package:tmail_ui_user/features/login/domain/state/check_oidc_is_available_state.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/state/get_credential_state.dart';
|
import 'package:tmail_ui_user/features/login/domain/state/get_credential_state.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/state/get_stored_token_oidc_state.dart';
|
import 'package:tmail_ui_user/features/login/domain/state/get_stored_token_oidc_state.dart';
|
||||||
@@ -30,6 +31,7 @@ class HomeController extends BaseController {
|
|||||||
final GetAuthenticatedAccountInteractor _getAuthenticatedAccountInteractor;
|
final GetAuthenticatedAccountInteractor _getAuthenticatedAccountInteractor;
|
||||||
final DynamicUrlInterceptors _dynamicUrlInterceptors;
|
final DynamicUrlInterceptors _dynamicUrlInterceptors;
|
||||||
final AuthorizationInterceptors _authorizationInterceptors;
|
final AuthorizationInterceptors _authorizationInterceptors;
|
||||||
|
final AuthorizationIsolateInterceptors _authorizationIsolateInterceptors;
|
||||||
final CleanupEmailCacheInteractor _cleanupEmailCacheInteractor;
|
final CleanupEmailCacheInteractor _cleanupEmailCacheInteractor;
|
||||||
final EmailReceiveManager _emailReceiveManager;
|
final EmailReceiveManager _emailReceiveManager;
|
||||||
final CleanupRecentSearchCacheInteractor _cleanupRecentSearchCacheInteractor;
|
final CleanupRecentSearchCacheInteractor _cleanupRecentSearchCacheInteractor;
|
||||||
@@ -42,6 +44,7 @@ class HomeController extends BaseController {
|
|||||||
this._getAuthenticatedAccountInteractor,
|
this._getAuthenticatedAccountInteractor,
|
||||||
this._dynamicUrlInterceptors,
|
this._dynamicUrlInterceptors,
|
||||||
this._authorizationInterceptors,
|
this._authorizationInterceptors,
|
||||||
|
this._authorizationIsolateInterceptors,
|
||||||
this._cleanupEmailCacheInteractor,
|
this._cleanupEmailCacheInteractor,
|
||||||
this._emailReceiveManager,
|
this._emailReceiveManager,
|
||||||
this._cleanupRecentSearchCacheInteractor,
|
this._cleanupRecentSearchCacheInteractor,
|
||||||
@@ -176,6 +179,9 @@ class HomeController extends BaseController {
|
|||||||
_authorizationInterceptors.setTokenAndAuthorityOidc(
|
_authorizationInterceptors.setTokenAndAuthorityOidc(
|
||||||
newToken: storedTokenOidcSuccess.tokenOidc.toToken(),
|
newToken: storedTokenOidcSuccess.tokenOidc.toToken(),
|
||||||
newConfig: storedTokenOidcSuccess.oidcConfiguration);
|
newConfig: storedTokenOidcSuccess.oidcConfiguration);
|
||||||
|
_authorizationIsolateInterceptors.setTokenAndAuthorityOidc(
|
||||||
|
newToken: storedTokenOidcSuccess.tokenOidc.toToken(),
|
||||||
|
newConfig: storedTokenOidcSuccess.oidcConfiguration);
|
||||||
pushAndPop(AppRoutes.SESSION);
|
pushAndPop(AppRoutes.SESSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,6 +191,10 @@ class HomeController extends BaseController {
|
|||||||
credentialViewState.userName.userName,
|
credentialViewState.userName.userName,
|
||||||
credentialViewState.password.value,
|
credentialViewState.password.value,
|
||||||
);
|
);
|
||||||
|
_authorizationIsolateInterceptors.setBasicAuthorization(
|
||||||
|
credentialViewState.userName.userName,
|
||||||
|
credentialViewState.password.value,
|
||||||
|
);
|
||||||
pushAndPop(AppRoutes.SESSION);
|
pushAndPop(AppRoutes.SESSION);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:core/core.dart';
|
||||||
|
import 'package:model/account/authentication_type.dart';
|
||||||
|
import 'package:model/oidc/oidc_configuration.dart';
|
||||||
|
import 'package:model/oidc/token.dart';
|
||||||
|
|
||||||
|
class AuthorizationIsolateInterceptors extends QueuedInterceptorsWrapper {
|
||||||
|
|
||||||
|
AuthenticationType _authenticationType = AuthenticationType.none;
|
||||||
|
OIDCConfiguration? _configOIDC;
|
||||||
|
Token? _token;
|
||||||
|
String? _authorization;
|
||||||
|
|
||||||
|
void setBasicAuthorization(String? userName, String? password) {
|
||||||
|
_authorization = base64Encode(utf8.encode('$userName:$password'));
|
||||||
|
_authenticationType = AuthenticationType.basic;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setTokenAndAuthorityOidc({Token? newToken, OIDCConfiguration? newConfig}) {
|
||||||
|
_token = newToken;
|
||||||
|
_configOIDC = newConfig;
|
||||||
|
_authenticationType = AuthenticationType.oidc;
|
||||||
|
log('AuthorizationIsolateInterceptors::setToken(): newToken: $newToken');
|
||||||
|
log('AuthorizationIsolateInterceptors::setToken(): tokenId: ${newToken?.tokenIdHash}');
|
||||||
|
log('AuthorizationIsolateInterceptors::setToken(): EXPIRE_DATE: ${newToken?.expiredTime?.toIso8601String()}');
|
||||||
|
}
|
||||||
|
|
||||||
|
OIDCConfiguration? get oidcConfig => _configOIDC;
|
||||||
|
|
||||||
|
AuthenticationType get authenticationType => _authenticationType;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
|
||||||
|
switch(_authenticationType) {
|
||||||
|
case AuthenticationType.basic:
|
||||||
|
if (_authorization != null) {
|
||||||
|
options.headers[HttpHeaders.authorizationHeader] = _getAuthorizationAsBasicHeader(_authorization);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case AuthenticationType.oidc:
|
||||||
|
if (_token != null && _token?.isTokenValid() == true) {
|
||||||
|
options.headers[HttpHeaders.authorizationHeader] = _getTokenAsBearerHeader(_token!.token);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case AuthenticationType.none:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
super.onRequest(options, handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
String _getAuthorizationAsBasicHeader(String? authorization) => 'Basic $authorization';
|
||||||
|
|
||||||
|
String _getTokenAsBearerHeader(String token) => 'Bearer $token';
|
||||||
|
|
||||||
|
void clear() {
|
||||||
|
_authorization = null;
|
||||||
|
_token = null;
|
||||||
|
_configOIDC = null;
|
||||||
|
_authenticationType = AuthenticationType.none;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,6 +13,7 @@ import 'package:tmail_ui_user/features/login/data/local/oidc_configuration_cache
|
|||||||
import 'package:tmail_ui_user/features/login/data/local/token_oidc_cache_manager.dart';
|
import 'package:tmail_ui_user/features/login/data/local/token_oidc_cache_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/network/authentication_client/authentication_client_base.dart';
|
import 'package:tmail_ui_user/features/login/data/network/authentication_client/authentication_client_base.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
|
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
|
||||||
|
import 'package:tmail_ui_user/features/login/data/network/config/authorization_isolate_interceptors.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/network/oidc_http_client.dart';
|
import 'package:tmail_ui_user/features/login/data/network/oidc_http_client.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/repository/account_repository_impl.dart';
|
import 'package:tmail_ui_user/features/login/data/repository/account_repository_impl.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/repository/authentication_oidc_repository_impl.dart';
|
import 'package:tmail_ui_user/features/login/data/repository/authentication_oidc_repository_impl.dart';
|
||||||
@@ -39,6 +40,7 @@ class LoginBindings extends BaseBindings {
|
|||||||
Get.find<AuthenticationInteractor>(),
|
Get.find<AuthenticationInteractor>(),
|
||||||
Get.find<DynamicUrlInterceptors>(),
|
Get.find<DynamicUrlInterceptors>(),
|
||||||
Get.find<AuthorizationInterceptors>(),
|
Get.find<AuthorizationInterceptors>(),
|
||||||
|
Get.find<AuthorizationIsolateInterceptors>(),
|
||||||
Get.find<CheckOIDCIsAvailableInteractor>(),
|
Get.find<CheckOIDCIsAvailableInteractor>(),
|
||||||
Get.find<GetOIDCConfigurationInteractor>(),
|
Get.find<GetOIDCConfigurationInteractor>(),
|
||||||
Get.find<GetTokenOIDCInteractor>(),
|
Get.find<GetTokenOIDCInteractor>(),
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import 'package:get/get.dart';
|
|||||||
import 'package:model/model.dart';
|
import 'package:model/model.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
|
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
|
||||||
|
import 'package:tmail_ui_user/features/login/data/network/config/authorization_isolate_interceptors.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/state/authenticate_oidc_on_browser_state.dart';
|
import 'package:tmail_ui_user/features/login/domain/state/authenticate_oidc_on_browser_state.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/state/authentication_user_state.dart';
|
import 'package:tmail_ui_user/features/login/domain/state/authentication_user_state.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/state/check_oidc_is_available_state.dart';
|
import 'package:tmail_ui_user/features/login/domain/state/check_oidc_is_available_state.dart';
|
||||||
@@ -35,6 +36,7 @@ class LoginController extends BaseController {
|
|||||||
final AuthenticationInteractor _authenticationInteractor;
|
final AuthenticationInteractor _authenticationInteractor;
|
||||||
final DynamicUrlInterceptors _dynamicUrlInterceptors;
|
final DynamicUrlInterceptors _dynamicUrlInterceptors;
|
||||||
final AuthorizationInterceptors _authorizationInterceptors;
|
final AuthorizationInterceptors _authorizationInterceptors;
|
||||||
|
final AuthorizationIsolateInterceptors _authorizationIsolateInterceptors;
|
||||||
final CheckOIDCIsAvailableInteractor _checkOIDCIsAvailableInteractor;
|
final CheckOIDCIsAvailableInteractor _checkOIDCIsAvailableInteractor;
|
||||||
final GetOIDCConfigurationInteractor _getOIDCConfigurationInteractor;
|
final GetOIDCConfigurationInteractor _getOIDCConfigurationInteractor;
|
||||||
final GetTokenOIDCInteractor _getTokenOIDCInteractor;
|
final GetTokenOIDCInteractor _getTokenOIDCInteractor;
|
||||||
@@ -52,6 +54,7 @@ class LoginController extends BaseController {
|
|||||||
this._authenticationInteractor,
|
this._authenticationInteractor,
|
||||||
this._dynamicUrlInterceptors,
|
this._dynamicUrlInterceptors,
|
||||||
this._authorizationInterceptors,
|
this._authorizationInterceptors,
|
||||||
|
this._authorizationIsolateInterceptors,
|
||||||
this._checkOIDCIsAvailableInteractor,
|
this._checkOIDCIsAvailableInteractor,
|
||||||
this._getOIDCConfigurationInteractor,
|
this._getOIDCConfigurationInteractor,
|
||||||
this._getTokenOIDCInteractor,
|
this._getTokenOIDCInteractor,
|
||||||
@@ -300,6 +303,9 @@ class LoginController extends BaseController {
|
|||||||
_authorizationInterceptors.setTokenAndAuthorityOidc(
|
_authorizationInterceptors.setTokenAndAuthorityOidc(
|
||||||
newToken: success.tokenOIDC.toToken(),
|
newToken: success.tokenOIDC.toToken(),
|
||||||
newConfig: config);
|
newConfig: config);
|
||||||
|
_authorizationIsolateInterceptors.setTokenAndAuthorityOidc(
|
||||||
|
newToken: success.tokenOIDC.toToken(),
|
||||||
|
newConfig: config);
|
||||||
pushAndPop(AppRoutes.SESSION);
|
pushAndPop(AppRoutes.SESSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -315,6 +321,7 @@ class LoginController extends BaseController {
|
|||||||
loginState.value = LoginState(Right(success));
|
loginState.value = LoginState(Right(success));
|
||||||
_dynamicUrlInterceptors.changeBaseUrl(kIsWeb ? AppConfig.baseUrl : _urlText);
|
_dynamicUrlInterceptors.changeBaseUrl(kIsWeb ? AppConfig.baseUrl : _urlText);
|
||||||
_authorizationInterceptors.setBasicAuthorization(_userNameText, _passwordText);
|
_authorizationInterceptors.setBasicAuthorization(_userNameText, _passwordText);
|
||||||
|
_authorizationIsolateInterceptors.setBasicAuthorization(_userNameText, _passwordText);
|
||||||
pushAndPop(AppRoutes.SESSION);
|
pushAndPop(AppRoutes.SESSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,9 +29,8 @@ class MailboxIsolateWorker {
|
|||||||
|
|
||||||
final ThreadAPI _threadApi;
|
final ThreadAPI _threadApi;
|
||||||
final EmailAPI _emailApi;
|
final EmailAPI _emailApi;
|
||||||
final Executor _isolateExecutor;
|
|
||||||
|
|
||||||
MailboxIsolateWorker(this._threadApi, this._emailApi, this._isolateExecutor);
|
MailboxIsolateWorker(this._threadApi, this._emailApi);
|
||||||
|
|
||||||
Future<List<Email>> markAsMailboxRead(
|
Future<List<Email>> markAsMailboxRead(
|
||||||
AccountId accountId,
|
AccountId accountId,
|
||||||
@@ -46,7 +45,7 @@ class MailboxIsolateWorker {
|
|||||||
totalEmailUnread,
|
totalEmailUnread,
|
||||||
onProgressController);
|
onProgressController);
|
||||||
} else {
|
} else {
|
||||||
final result = await _isolateExecutor.execute(
|
final result = await Executor().execute(
|
||||||
arg1: MailboxMarkAsReadArguments(
|
arg1: MailboxMarkAsReadArguments(
|
||||||
_threadApi,
|
_threadApi,
|
||||||
_emailApi,
|
_emailApi,
|
||||||
|
|||||||
+7
-10
@@ -70,7 +70,6 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
final ResponsiveUtils _responsiveUtils = Get.find<ResponsiveUtils>();
|
final ResponsiveUtils _responsiveUtils = Get.find<ResponsiveUtils>();
|
||||||
final EmailReceiveManager _emailReceiveManager = Get.find<EmailReceiveManager>();
|
final EmailReceiveManager _emailReceiveManager = Get.find<EmailReceiveManager>();
|
||||||
final SearchController searchController = Get.find<SearchController>();
|
final SearchController searchController = Get.find<SearchController>();
|
||||||
final Executor _isolateExecutor = Get.find<Executor>();
|
|
||||||
final DownloadController downloadController = Get.find<DownloadController>();
|
final DownloadController downloadController = Get.find<DownloadController>();
|
||||||
|
|
||||||
final MoveToMailboxInteractor _moveToMailboxInteractor;
|
final MoveToMailboxInteractor _moveToMailboxInteractor;
|
||||||
@@ -94,7 +93,6 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
final composerOverlayState = ComposerOverlayState.inActive.obs;
|
final composerOverlayState = ComposerOverlayState.inActive.obs;
|
||||||
final viewStateMarkAsReadMailbox = Rx<Either<Failure, Success>>(Right(UIState.idle));
|
final viewStateMarkAsReadMailbox = Rx<Either<Failure, Success>>(Right(UIState.idle));
|
||||||
final vacationResponse = Rxn<VacationResponse>();
|
final vacationResponse = Rxn<VacationResponse>();
|
||||||
|
|
||||||
Session? sessionCurrent;
|
Session? sessionCurrent;
|
||||||
Map<Role, MailboxId> mapDefaultMailboxId = {};
|
Map<Role, MailboxId> mapDefaultMailboxId = {};
|
||||||
Map<MailboxId, PresentationMailbox> mapMailbox = {};
|
Map<MailboxId, PresentationMailbox> mapMailbox = {};
|
||||||
@@ -123,10 +121,9 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
|
_registerProgressState();
|
||||||
_registerNetworkConnectivityState();
|
_registerNetworkConnectivityState();
|
||||||
_registerPendingEmailAddress();
|
|
||||||
_registerPendingFileInfo();
|
|
||||||
_initializeIsolateExecutor();
|
|
||||||
super.onInit();
|
super.onInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,6 +131,8 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
void onReady() {
|
void onReady() {
|
||||||
log('MailboxDashBoardController::onReady()');
|
log('MailboxDashBoardController::onReady()');
|
||||||
dispatchRoute(AppRoutes.THREAD);
|
dispatchRoute(AppRoutes.THREAD);
|
||||||
|
_registerPendingEmailAddress();
|
||||||
|
_registerPendingFileInfo();
|
||||||
_setSessionCurrent();
|
_setSessionCurrent();
|
||||||
_getUserProfile();
|
_getUserProfile();
|
||||||
_getVacationResponse();
|
_getVacationResponse();
|
||||||
@@ -266,7 +265,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
_fileReceiveManagerStreamSubscription =
|
_fileReceiveManagerStreamSubscription =
|
||||||
_emailReceiveManager.pendingFileInfo.stream.listen((listFile) {
|
_emailReceiveManager.pendingFileInfo.stream.listen((listFile) {
|
||||||
log('MailboxDashBoardController::_registerPendingFileInfo(): ${listFile.length}');
|
log('MailboxDashBoardController::_registerPendingFileInfo(): ${listFile.length}');
|
||||||
if (listFile.isNotEmpty) {
|
if (listFile.isNotEmpty && sessionCurrent != null) {
|
||||||
_emailReceiveManager.clearPendingFileInfo();
|
_emailReceiveManager.clearPendingFileInfo();
|
||||||
final arguments = ComposerArguments(
|
final arguments = ComposerArguments(
|
||||||
emailActionType: EmailActionType.edit,
|
emailActionType: EmailActionType.edit,
|
||||||
@@ -278,9 +277,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void _initializeIsolateExecutor() async {
|
void _registerProgressState() async {
|
||||||
await _isolateExecutor.warmUp(log: BuildUtils.isDebugMode);
|
|
||||||
|
|
||||||
progressState.listen((state) {
|
progressState.listen((state) {
|
||||||
viewStateMarkAsReadMailbox.value = state;
|
viewStateMarkAsReadMailbox.value = state;
|
||||||
});
|
});
|
||||||
@@ -647,7 +644,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
_fileReceiveManagerStreamSubscription.cancel();
|
_fileReceiveManagerStreamSubscription.cancel();
|
||||||
_connectivityStreamSubscription.cancel();
|
_connectivityStreamSubscription.cancel();
|
||||||
_progressStateController.close();
|
_progressStateController.close();
|
||||||
_isolateExecutor.dispose();
|
Executor().dispose();
|
||||||
Get.delete<DownloadController>();
|
Get.delete<DownloadController>();
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,9 +19,8 @@ import 'package:worker_manager/worker_manager.dart';
|
|||||||
class ThreadIsolateWorker {
|
class ThreadIsolateWorker {
|
||||||
final ThreadAPI _threadAPI;
|
final ThreadAPI _threadAPI;
|
||||||
final EmailAPI _emailAPI;
|
final EmailAPI _emailAPI;
|
||||||
final Executor _isolateExecutor;
|
|
||||||
|
|
||||||
ThreadIsolateWorker(this._threadAPI, this._emailAPI, this._isolateExecutor);
|
ThreadIsolateWorker(this._threadAPI, this._emailAPI);
|
||||||
|
|
||||||
Future<List<EmailId>> emptyTrashFolder(
|
Future<List<EmailId>> emptyTrashFolder(
|
||||||
AccountId accountId,
|
AccountId accountId,
|
||||||
@@ -31,7 +30,7 @@ class ThreadIsolateWorker {
|
|||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
return _emptyTrashFolderOnWeb(accountId, mailboxId, updateDestroyedEmailCache);
|
return _emptyTrashFolderOnWeb(accountId, mailboxId, updateDestroyedEmailCache);
|
||||||
} else {
|
} else {
|
||||||
final result = await _isolateExecutor.execute(
|
final result = await Executor().execute(
|
||||||
arg1: EmptyTrashFolderArguments(_threadAPI, _emailAPI, accountId, mailboxId),
|
arg1: EmptyTrashFolderArguments(_threadAPI, _emailAPI, accountId, mailboxId),
|
||||||
fun1: _emptyTrashFolderAction,
|
fun1: _emptyTrashFolderAction,
|
||||||
notification: (value) {
|
notification: (value) {
|
||||||
|
|||||||
@@ -17,9 +17,8 @@ import 'package:worker_manager/worker_manager.dart' as worker;
|
|||||||
class FileUploader {
|
class FileUploader {
|
||||||
|
|
||||||
final DioClient _dioClient;
|
final DioClient _dioClient;
|
||||||
final worker.Executor _isolateExecutor;
|
|
||||||
|
|
||||||
FileUploader(this._dioClient, this._isolateExecutor);
|
FileUploader(this._dioClient);
|
||||||
|
|
||||||
Future<Attachment?> uploadAttachment(
|
Future<Attachment?> uploadAttachment(
|
||||||
UploadTaskId uploadId,
|
UploadTaskId uploadId,
|
||||||
@@ -36,7 +35,7 @@ class FileUploader {
|
|||||||
uploadUri,
|
uploadUri,
|
||||||
cancelToken: cancelToken);
|
cancelToken: cancelToken);
|
||||||
} else {
|
} else {
|
||||||
final attachmentUploaded = await _isolateExecutor.execute(
|
final attachmentUploaded = await worker.Executor().execute(
|
||||||
arg1: UploadFileArguments(
|
arg1: UploadFileArguments(
|
||||||
_dioClient,
|
_dioClient,
|
||||||
uploadId,
|
uploadId,
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import 'package:tmail_ui_user/main/localizations/app_localizations_delegate.dart
|
|||||||
import 'package:tmail_ui_user/main/localizations/localization_service.dart';
|
import 'package:tmail_ui_user/main/localizations/localization_service.dart';
|
||||||
import 'package:tmail_ui_user/main/pages/app_pages.dart';
|
import 'package:tmail_ui_user/main/pages/app_pages.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
import 'package:worker_manager/worker_manager.dart';
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
initLogger(() async {
|
initLogger(() async {
|
||||||
@@ -23,6 +24,7 @@ void main() async {
|
|||||||
));
|
));
|
||||||
await MainBindings().dependencies();
|
await MainBindings().dependencies();
|
||||||
await HiveCacheConfig().setUp();
|
await HiveCacheConfig().setUp();
|
||||||
|
await Executor().warmUp();
|
||||||
await dotenv.load(fileName: 'env.file');
|
await dotenv.load(fileName: 'env.file');
|
||||||
runApp(const TMailApp());
|
runApp(const TMailApp());
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
class BindingTag {
|
||||||
|
static const isoLateTag = 'isoLateTag';
|
||||||
|
}
|
||||||
@@ -13,6 +13,7 @@ import 'package:tmail_ui_user/features/login/data/local/account_cache_manager.da
|
|||||||
import 'package:tmail_ui_user/features/login/data/local/token_oidc_cache_manager.dart';
|
import 'package:tmail_ui_user/features/login/data/local/token_oidc_cache_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/network/authentication_client/authentication_client_base.dart';
|
import 'package:tmail_ui_user/features/login/data/network/authentication_client/authentication_client_base.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
|
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
|
||||||
|
import 'package:tmail_ui_user/features/login/data/network/config/authorization_isolate_interceptors.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/network/oidc_http_client.dart';
|
import 'package:tmail_ui_user/features/login/data/network/oidc_http_client.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/utils/library_platform/app_auth_plugin/app_auth_plugin.dart';
|
import 'package:tmail_ui_user/features/login/data/utils/library_platform/app_auth_plugin/app_auth_plugin.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart';
|
import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart';
|
||||||
@@ -21,7 +22,7 @@ import 'package:tmail_ui_user/features/manage_account/data/network/manage_accoun
|
|||||||
import 'package:tmail_ui_user/features/session/data/network/session_api.dart';
|
import 'package:tmail_ui_user/features/session/data/network/session_api.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/data/network/thread_api.dart';
|
import 'package:tmail_ui_user/features/thread/data/network/thread_api.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/data/network/thread_isolate_worker.dart';
|
import 'package:tmail_ui_user/features/thread/data/network/thread_isolate_worker.dart';
|
||||||
import 'package:worker_manager/worker_manager.dart';
|
import 'package:tmail_ui_user/main/bindings/network/binding_tag.dart';
|
||||||
|
|
||||||
class NetworkBindings extends Bindings {
|
class NetworkBindings extends Bindings {
|
||||||
|
|
||||||
@@ -45,7 +46,9 @@ class NetworkBindings extends Bindings {
|
|||||||
void _bindingDio() {
|
void _bindingDio() {
|
||||||
_bindingBaseOption();
|
_bindingBaseOption();
|
||||||
Get.put(Dio(Get.find<BaseOptions>()));
|
Get.put(Dio(Get.find<BaseOptions>()));
|
||||||
|
Get.put(Dio(Get.find<BaseOptions>()), tag: BindingTag.isoLateTag);
|
||||||
Get.put(DioClient(Get.find<Dio>()));
|
Get.put(DioClient(Get.find<Dio>()));
|
||||||
|
Get.put(DioClient(Get.find<Dio>(tag: BindingTag.isoLateTag)), tag: BindingTag.isoLateTag);
|
||||||
Get.put(const FlutterAppAuth());
|
Get.put(const FlutterAppAuth());
|
||||||
Get.put(AppAuthWebPlugin());
|
Get.put(AppAuthWebPlugin());
|
||||||
Get.put(OIDCHttpClient(Get.find<DioClient>()));
|
Get.put(OIDCHttpClient(Get.find<DioClient>()));
|
||||||
@@ -55,16 +58,20 @@ class NetworkBindings extends Bindings {
|
|||||||
|
|
||||||
void _bindingInterceptors() {
|
void _bindingInterceptors() {
|
||||||
Get.put(DynamicUrlInterceptors());
|
Get.put(DynamicUrlInterceptors());
|
||||||
|
Get.put(AuthorizationIsolateInterceptors());
|
||||||
Get.put(AuthorizationInterceptors(
|
Get.put(AuthorizationInterceptors(
|
||||||
Get.find<Dio>(),
|
Get.find<Dio>(),
|
||||||
Get.find<AuthenticationClientBase>(),
|
Get.find<AuthenticationClientBase>(),
|
||||||
Get.find<TokenOidcCacheManager>(),
|
Get.find<TokenOidcCacheManager>(),
|
||||||
Get.find<AccountCacheManager>()
|
Get.find<AccountCacheManager>(),
|
||||||
));
|
));
|
||||||
|
Get.find<Dio>(tag: BindingTag.isoLateTag).interceptors.add(Get.find<DynamicUrlInterceptors>());
|
||||||
|
Get.find<Dio>(tag: BindingTag.isoLateTag).interceptors.add(Get.find<AuthorizationIsolateInterceptors>());
|
||||||
Get.find<Dio>().interceptors.add(Get.find<DynamicUrlInterceptors>());
|
Get.find<Dio>().interceptors.add(Get.find<DynamicUrlInterceptors>());
|
||||||
Get.find<Dio>().interceptors.add(Get.find<AuthorizationInterceptors>());
|
Get.find<Dio>().interceptors.add(Get.find<AuthorizationInterceptors>());
|
||||||
if (kDebugMode) {
|
if (kDebugMode) {
|
||||||
Get.find<Dio>().interceptors.add(LogInterceptor(requestBody: true));
|
Get.find<Dio>().interceptors.add(LogInterceptor(requestBody: true));
|
||||||
|
Get.find<Dio>(tag: BindingTag.isoLateTag).interceptors.add(LogInterceptor(requestBody: true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,14 +99,11 @@ class NetworkBindings extends Bindings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _bindingIsolateWorker() {
|
void _bindingIsolateWorker() {
|
||||||
Get.put(Executor());
|
|
||||||
Get.put(ThreadIsolateWorker(
|
Get.put(ThreadIsolateWorker(
|
||||||
Get.find<ThreadAPI>(),
|
Get.find<ThreadAPI>(),
|
||||||
Get.find<EmailAPI>(),
|
Get.find<EmailAPI>()));
|
||||||
Get.find<Executor>()));
|
|
||||||
Get.put(MailboxIsolateWorker(
|
Get.put(MailboxIsolateWorker(
|
||||||
Get.find<ThreadAPI>(),
|
Get.find<ThreadAPI>(),
|
||||||
Get.find<EmailAPI>(),
|
Get.find<EmailAPI>()));
|
||||||
Get.find<Executor>()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
-1
@@ -176,7 +176,7 @@ dependencies:
|
|||||||
percent_indicator: 4.2.2
|
percent_indicator: 4.2.2
|
||||||
|
|
||||||
# Isolate
|
# Isolate
|
||||||
worker_manager: 4.4.0
|
worker_manager: 4.4.6
|
||||||
|
|
||||||
async: 2.8.2
|
async: 2.8.2
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user