TF-939 Inject Vacation's components depend on the session capability

This commit is contained in:
Dat PHAM HOANG
2022-09-14 17:35:21 +07:00
committed by Dat H. Pham
parent 2a65c30772
commit ccc63e4fc1
9 changed files with 121 additions and 69 deletions
@@ -4,6 +4,8 @@ import 'package:core/presentation/state/success.dart';
import 'package:core/utils/app_logger.dart'; import 'package:core/utils/app_logger.dart';
import 'package:dartz/dartz.dart'; import 'package:dartz/dartz.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
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/session/session.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:model/account/authentication_type.dart'; import 'package:model/account/authentication_type.dart';
import 'package:model/oidc/token_oidc.dart'; import 'package:model/oidc/token_oidc.dart';
@@ -22,9 +24,11 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/bindings/a
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart'; import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/log_out_oidc_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/log_out_oidc_state.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/manage_account/presentation/vacation/vacation_interactors_bindings.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/network/binding_tag.dart'; import 'package:tmail_ui_user/main/bindings/network/binding_tag.dart';
import 'package:tmail_ui_user/main/error/capability_validator.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart';
@@ -181,4 +185,13 @@ abstract class ReloadableController extends BaseController {
void injectAutoCompleteBindings() { void injectAutoCompleteBindings() {
AutoCompleteBindings().dependencies(); AutoCompleteBindings().dependencies();
} }
void injectVacationBindings(Session? session, AccountId? accountId) {
try {
requireCapability(session!, accountId!, [CapabilityIdentifier.jmapVacationResponse]);
VacationInteractorsBindings().dependencies();
} catch(e) {
logError('MailboxDashBoardController::injectVacationBindings(): exception: $e');
}
}
} }
@@ -14,11 +14,6 @@ import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
import 'package:tmail_ui_user/features/email/data/repository/email_repository_impl.dart'; import 'package:tmail_ui_user/features/email/data/repository/email_repository_impl.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/delete_email_permanently_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/delete_email_permanently_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/composer_cache_repository_impl.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/email/presentation/email_bindings.dart'; import 'package:tmail_ui_user/features/email/presentation/email_bindings.dart';
import 'package:tmail_ui_user/features/login/data/datasource/account_datasource.dart'; import 'package:tmail_ui_user/features/login/data/datasource/account_datasource.dart';
@@ -49,13 +44,18 @@ import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart';
import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_isolate_worker.dart'; import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_isolate_worker.dart';
import 'package:tmail_ui_user/features/mailbox/data/repository/mailbox_repository_impl.dart'; import 'package:tmail_ui_user/features/mailbox/data/repository/mailbox_repository_impl.dart';
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart'; import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/mark_as_mailbox_read_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_bindings.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_bindings.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/search_datasource.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/search_datasource.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/search_datasource_impl.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/search_datasource_impl.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/composer_cache_repository_impl.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/search_repository_impl.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/search_repository_impl.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/search_repository.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/search_repository.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/mark_as_mailbox_read_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_on_web_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
@@ -65,15 +65,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/download/download_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/download/download_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_account_datasource.dart';
import 'package:tmail_ui_user/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart';
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart';
import 'package:tmail_ui_user/features/manage_account/data/network/manage_account_api.dart';
import 'package:tmail_ui_user/features/manage_account/data/repository/manage_account_repository_impl.dart';
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_vacation_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/manage_account/domain/usecases/update_vacation_interactor.dart';
import 'package:tmail_ui_user/features/thread/data/datasource/thread_datasource.dart'; import 'package:tmail_ui_user/features/thread/data/datasource/thread_datasource.dart';
import 'package:tmail_ui_user/features/thread/data/datasource_impl/local_thread_datasource_impl.dart'; import 'package:tmail_ui_user/features/thread/data/datasource_impl/local_thread_datasource_impl.dart';
import 'package:tmail_ui_user/features/thread/data/datasource_impl/thread_datasource_impl.dart'; import 'package:tmail_ui_user/features/thread/data/datasource_impl/thread_datasource_impl.dart';
@@ -109,9 +101,7 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<MoveToMailboxInteractor>(), Get.find<MoveToMailboxInteractor>(),
Get.find<DeleteEmailPermanentlyInteractor>(), Get.find<DeleteEmailPermanentlyInteractor>(),
Get.find<MarkAsMailboxReadInteractor>(), Get.find<MarkAsMailboxReadInteractor>(),
Get.find<GetComposerCacheOnWebInteractor>(), Get.find<GetComposerCacheOnWebInteractor>()
Get.find<GetAllVacationInteractor>(),
Get.find<UpdateVacationInteractor>(),
)); ));
Get.put(AdvancedFilterController()); Get.put(AdvancedFilterController());
} }
@@ -127,7 +117,6 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.lazyPut<AccountDatasource>(() => Get.find<HiveAccountDatasourceImpl>()); Get.lazyPut<AccountDatasource>(() => Get.find<HiveAccountDatasourceImpl>());
Get.lazyPut<AuthenticationOIDCDataSource>(() => Get.find<AuthenticationOIDCDataSourceImpl>()); Get.lazyPut<AuthenticationOIDCDataSource>(() => Get.find<AuthenticationOIDCDataSourceImpl>());
Get.lazyPut<SessionStorageComposerDatasource>(() => Get.find<SessionStorageComposerDatasourceImpl>()); Get.lazyPut<SessionStorageComposerDatasource>(() => Get.find<SessionStorageComposerDatasourceImpl>());
Get.lazyPut<ManageAccountDataSource>(() => Get.find<ManageAccountDataSourceImpl>());
} }
@override @override
@@ -151,9 +140,6 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<OidcConfigurationCacheManager>() Get.find<OidcConfigurationCacheManager>()
)); ));
Get.lazyPut(() => SessionStorageComposerDatasourceImpl()); Get.lazyPut(() => SessionStorageComposerDatasourceImpl());
Get.lazyPut(() => ManageAccountDataSourceImpl(
Get.find<ManageAccountAPI>(),
Get.find<LanguageCacheManager>()));
} }
@override @override
@@ -193,8 +179,6 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.lazyPut(() => GetComposerCacheOnWebInteractor(Get.find<ComposerCacheRepository>())); Get.lazyPut(() => GetComposerCacheOnWebInteractor(Get.find<ComposerCacheRepository>()));
Get.lazyPut(() => SaveComposerCacheOnWebInteractor(Get.find<ComposerCacheRepository>())); Get.lazyPut(() => SaveComposerCacheOnWebInteractor(Get.find<ComposerCacheRepository>()));
Get.lazyPut(() => RemoveComposerCacheOnWebInteractor(Get.find<ComposerCacheRepository>())); Get.lazyPut(() => RemoveComposerCacheOnWebInteractor(Get.find<ComposerCacheRepository>()));
Get.lazyPut(() => GetAllVacationInteractor(Get.find<ManageAccountRepository>()));
Get.lazyPut(() => UpdateVacationInteractor(Get.find<ManageAccountRepository>()));
} }
@override @override
@@ -207,7 +191,6 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.lazyPut<AccountRepository>(() => Get.find<AccountRepositoryImpl>()); Get.lazyPut<AccountRepository>(() => Get.find<AccountRepositoryImpl>());
Get.lazyPut<AuthenticationOIDCRepository>(() => Get.find<AuthenticationOIDCRepositoryImpl>()); Get.lazyPut<AuthenticationOIDCRepository>(() => Get.find<AuthenticationOIDCRepositoryImpl>());
Get.lazyPut<ComposerCacheRepository>(() => Get.find<ComposerCacheRepositoryImpl>()); Get.lazyPut<ComposerCacheRepository>(() => Get.find<ComposerCacheRepositoryImpl>());
Get.lazyPut<ManageAccountRepository>(() => Get.find<ManageAccountRepositoryImpl>());
} }
@override @override
@@ -236,6 +219,5 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.lazyPut(() => AccountRepositoryImpl(Get.find<AccountDatasource>())); Get.lazyPut(() => AccountRepositoryImpl(Get.find<AccountDatasource>()));
Get.lazyPut(() => AuthenticationOIDCRepositoryImpl(Get.find<AuthenticationOIDCDataSource>())); Get.lazyPut(() => AuthenticationOIDCRepositoryImpl(Get.find<AuthenticationOIDCDataSource>()));
Get.lazyPut(() => ComposerCacheRepositoryImpl(Get.find<SessionStorageComposerDatasource>())); Get.lazyPut(() => ComposerCacheRepositoryImpl(Get.find<SessionStorageComposerDatasource>()));
Get.lazyPut(() => ManageAccountRepositoryImpl(Get.find<ManageAccountDataSource>()));
} }
} }
@@ -28,15 +28,15 @@ import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_reques
import 'package:tmail_ui_user/features/email/domain/state/delete_email_permanently_state.dart'; import 'package:tmail_ui_user/features/email/domain/state/delete_email_permanently_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart'; import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/delete_email_permanently_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/delete_email_permanently_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_composer_cache_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart'; import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.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';
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/mailbox/domain/state/mark_as_mailbox_read_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_email_drafts_state.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/mark_as_mailbox_read_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/mark_as_mailbox_read_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_composer_cache_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_email_drafts_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/download/download_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/download/download_controller.dart';
@@ -76,8 +76,8 @@ class MailboxDashBoardController extends ReloadableController {
final DeleteEmailPermanentlyInteractor _deleteEmailPermanentlyInteractor; final DeleteEmailPermanentlyInteractor _deleteEmailPermanentlyInteractor;
final MarkAsMailboxReadInteractor _markAsMailboxReadInteractor; final MarkAsMailboxReadInteractor _markAsMailboxReadInteractor;
final GetComposerCacheOnWebInteractor _getEmailCacheOnWebInteractor; final GetComposerCacheOnWebInteractor _getEmailCacheOnWebInteractor;
final GetAllVacationInteractor _getAllVacationInteractor; GetAllVacationInteractor? _getAllVacationInteractor;
final UpdateVacationInteractor _updateVacationInteractor; UpdateVacationInteractor? _updateVacationInteractor;
final scaffoldKey = GlobalKey<ScaffoldState>(); final scaffoldKey = GlobalKey<ScaffoldState>();
final selectedMailbox = Rxn<PresentationMailbox>(); final selectedMailbox = Rxn<PresentationMailbox>();
@@ -112,9 +112,7 @@ class MailboxDashBoardController extends ReloadableController {
this._moveToMailboxInteractor, this._moveToMailboxInteractor,
this._deleteEmailPermanentlyInteractor, this._deleteEmailPermanentlyInteractor,
this._markAsMailboxReadInteractor, this._markAsMailboxReadInteractor,
this._getEmailCacheOnWebInteractor, this._getEmailCacheOnWebInteractor
this._getAllVacationInteractor,
this._updateVacationInteractor,
) : super(logoutOidcInteractor, ) : super(logoutOidcInteractor,
deleteAuthorityOidcInteractor, deleteAuthorityOidcInteractor,
getAuthenticatedAccountInteractor); getAuthenticatedAccountInteractor);
@@ -294,6 +292,7 @@ class MailboxDashBoardController extends ReloadableController {
sessionCurrent = arguments; sessionCurrent = arguments;
accountId.value = sessionCurrent?.accounts.keys.first; accountId.value = sessionCurrent?.accounts.keys.first;
injectAutoCompleteBindings(); injectAutoCompleteBindings();
injectVacationBindings(sessionCurrent, accountId.value);
} else { } else {
if (kIsWeb) { if (kIsWeb) {
reload(); reload();
@@ -301,6 +300,17 @@ class MailboxDashBoardController extends ReloadableController {
} }
} }
@override
void injectVacationBindings(Session? session, AccountId? accountId) {
try {
super.injectVacationBindings(session, accountId);
_getAllVacationInteractor = Get.find<GetAllVacationInteractor>();
_updateVacationInteractor = Get.find<UpdateVacationInteractor>();
} catch (e) {
logError('MailboxDashBoardController::injectVacationBindings(): $e');
}
}
Future<void> _getAppVersion() async { Future<void> _getAppVersion() async {
final info = await PackageInfo.fromPlatform(); final info = await PackageInfo.fromPlatform();
log('MailboxDashBoardController::_getAppVersion(): ${info.version}'); log('MailboxDashBoardController::_getAppVersion(): ${info.version}');
@@ -308,8 +318,8 @@ class MailboxDashBoardController extends ReloadableController {
} }
void _getVacationResponse() { void _getVacationResponse() {
if (accountId.value != null) { if (accountId.value != null && _getAllVacationInteractor != null) {
consumeState(_getAllVacationInteractor.execute(accountId.value!)); consumeState(_getAllVacationInteractor!.execute(accountId.value!));
} }
} }
@@ -469,9 +479,10 @@ class MailboxDashBoardController extends ReloadableController {
sessionCurrent = session; sessionCurrent = session;
accountId.value = sessionCurrent?.accounts.keys.first; accountId.value = sessionCurrent?.accounts.keys.first;
_getUserProfile(); _getUserProfile();
_getVacationResponse();
_handleComposerCache(); _handleComposerCache();
injectAutoCompleteBindings(); injectAutoCompleteBindings();
injectVacationBindings(sessionCurrent, accountId.value);
_getVacationResponse();
} }
UnsignedInt? get maxSizeAttachmentsPerEmail { UnsignedInt? get maxSizeAttachmentsPerEmail {
@@ -616,11 +627,11 @@ class MailboxDashBoardController extends ReloadableController {
} }
void disableVacationResponder() { void disableVacationResponder() {
if (accountId.value != null) { if (accountId.value != null && _updateVacationInteractor != null) {
final vacationDisabled = vacationResponse.value != null final vacationDisabled = vacationResponse.value != null
? vacationResponse.value!.copyWith(isEnabled: false) ? vacationResponse.value!.copyWith(isEnabled: false)
: VacationResponse(isEnabled: false); : VacationResponse(isEnabled: false);
consumeState(_updateVacationInteractor.execute(accountId.value!, vacationDisabled)); consumeState(_updateVacationInteractor!.execute(accountId.value!, vacationDisabled));
} }
} }
@@ -18,10 +18,10 @@ class VacationAPI {
final getVacationMethod = GetVacationMethod(accountId); final getVacationMethod = GetVacationMethod(accountId);
final getVacationInvocation = requestBuilder.invocation(getVacationMethod); final getVacationInvocation = requestBuilder.invocation(getVacationMethod);
final response = await (requestBuilder final response = await(requestBuilder
..usings(getVacationMethod.requiredCapabilities)) ..usings(getVacationMethod.requiredCapabilities))
.build() .build()
.execute(); .execute();
final resultList = response.parse<GetVacationResponse>( final resultList = response.parse<GetVacationResponse>(
getVacationInvocation.methodCallId, getVacationInvocation.methodCallId,
@@ -44,9 +44,9 @@ class VacationAPI {
final getVacationInvocation = requestBuilder.invocation(getVacationMethod); final getVacationInvocation = requestBuilder.invocation(getVacationMethod);
final response = await (requestBuilder final response = await (requestBuilder
..usings(setVacationMethod.requiredCapabilities)) ..usings(setVacationMethod.requiredCapabilities))
.build() .build()
.execute(); .execute();
final resultList = response.parse<GetVacationResponse>( final resultList = response.parse<GetVacationResponse>(
getVacationInvocation.methodCallId, getVacationInvocation.methodCallId,
@@ -24,15 +24,12 @@ import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_
import 'package:tmail_ui_user/features/manage_account/data/network/manage_account_api.dart'; import 'package:tmail_ui_user/features/manage_account/data/network/manage_account_api.dart';
import 'package:tmail_ui_user/features/manage_account/data/repository/manage_account_repository_impl.dart'; import 'package:tmail_ui_user/features/manage_account/data/repository/manage_account_repository_impl.dart';
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart'; import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_vacation_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/manage_account/domain/usecases/update_vacation_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/language_and_region/language_and_region_bindings.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/language_and_region/language_and_region_bindings.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/menu/manage_account_menu_bindings.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/menu/manage_account_menu_bindings.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings/settings_bindings.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings/settings_bindings.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/profiles_bindings.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/profiles/profiles_bindings.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_bindings.dart';
class ManageAccountDashBoardBindings extends BaseBindings { class ManageAccountDashBoardBindings extends BaseBindings {
@@ -43,7 +40,6 @@ class ManageAccountDashBoardBindings extends BaseBindings {
ManageAccountMenuBindings().dependencies(); ManageAccountMenuBindings().dependencies();
ProfileBindings().dependencies(); ProfileBindings().dependencies();
LanguageAndRegionBindings().dependencies(); LanguageAndRegionBindings().dependencies();
VacationBindings().dependencies();
} }
@override @override
@@ -51,9 +47,7 @@ class ManageAccountDashBoardBindings extends BaseBindings {
Get.lazyPut(() => ManageAccountDashBoardController( Get.lazyPut(() => ManageAccountDashBoardController(
Get.find<LogoutOidcInteractor>(), Get.find<LogoutOidcInteractor>(),
Get.find<DeleteAuthorityOidcInteractor>(), Get.find<DeleteAuthorityOidcInteractor>(),
Get.find<GetAuthenticatedAccountInteractor>(), Get.find<GetAuthenticatedAccountInteractor>()
Get.find<GetAllVacationInteractor>(),
Get.find<UpdateVacationInteractor>()
)); ));
} }
@@ -96,8 +90,6 @@ class ManageAccountDashBoardBindings extends BaseBindings {
Get.find<GetCredentialInteractor>(), Get.find<GetCredentialInteractor>(),
Get.find<GetStoredTokenOidcInteractor>(), Get.find<GetStoredTokenOidcInteractor>(),
)); ));
Get.lazyPut(() => GetAllVacationInteractor(Get.find<ManageAccountRepository>()));
Get.lazyPut(() => UpdateVacationInteractor(Get.find<ManageAccountRepository>()));
} }
@override @override
@@ -25,6 +25,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/forward/forwa
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/manage_account_arguments.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/manage_account_arguments.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/settings_page_level.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/settings_page_level.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_controller_bindings.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart';
@@ -35,8 +36,8 @@ class ManageAccountDashBoardController extends ReloadableController {
final _imagePaths = Get.find<ImagePaths>(); final _imagePaths = Get.find<ImagePaths>();
final _responsiveUtils = Get.find<ResponsiveUtils>(); final _responsiveUtils = Get.find<ResponsiveUtils>();
final GetAllVacationInteractor _getAllVacationInteractor; GetAllVacationInteractor? _getAllVacationInteractor;
final UpdateVacationInteractor _updateVacationInteractor; UpdateVacationInteractor? _updateVacationInteractor;
final menuDrawerKey = GlobalKey<ScaffoldState>(debugLabel: 'manage_account'); final menuDrawerKey = GlobalKey<ScaffoldState>(debugLabel: 'manage_account');
@@ -54,9 +55,7 @@ class ManageAccountDashBoardController extends ReloadableController {
ManageAccountDashBoardController( ManageAccountDashBoardController(
LogoutOidcInteractor logoutOidcInteractor, LogoutOidcInteractor logoutOidcInteractor,
DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor, DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor,
GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor, GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor
this._getAllVacationInteractor,
this._updateVacationInteractor,
) : super(logoutOidcInteractor, ) : super(logoutOidcInteractor,
deleteAuthorityOidcInteractor, deleteAuthorityOidcInteractor,
getAuthenticatedAccountInteractor); getAuthenticatedAccountInteractor);
@@ -95,8 +94,9 @@ class ManageAccountDashBoardController extends ReloadableController {
sessionCurrent.value = session; sessionCurrent.value = session;
accountId.value = session.accounts.keys.first; accountId.value = session.accounts.keys.first;
_getUserProfile(); _getUserProfile();
_getVacationResponse();
injectAutoCompleteBindings(); injectAutoCompleteBindings();
injectVacationBindings(sessionCurrent.value, accountId.value);
_getVacationResponse();
} }
void _getArguments() { void _getArguments() {
@@ -106,8 +106,9 @@ class ManageAccountDashBoardController extends ReloadableController {
sessionCurrent.value = arguments.session; sessionCurrent.value = arguments.session;
accountId.value = sessionCurrent.value?.accounts.keys.first; accountId.value = sessionCurrent.value?.accounts.keys.first;
_getUserProfile(); _getUserProfile();
_getVacationResponse();
injectAutoCompleteBindings(); injectAutoCompleteBindings();
injectVacationBindings(sessionCurrent.value, accountId.value);
_getVacationResponse();
if (arguments.menuSettingCurrent != null) { if (arguments.menuSettingCurrent != null) {
_goToSettingMenuCurrent(arguments.menuSettingCurrent!); _goToSettingMenuCurrent(arguments.menuSettingCurrent!);
} }
@@ -118,6 +119,18 @@ class ManageAccountDashBoardController extends ReloadableController {
} }
} }
@override
void injectVacationBindings(Session? session, AccountId? accountId) {
try {
super.injectVacationBindings(session, accountId);
VacationControllerBindings().dependencies();
_getAllVacationInteractor = Get.find<GetAllVacationInteractor>();
_updateVacationInteractor = Get.find<UpdateVacationInteractor>();
} catch (e) {
logError('MailboxDashBoardController::injectVacationBindings(): $e');
}
}
Future<void> _getAppVersion() async { Future<void> _getAppVersion() async {
final info = await PackageInfo.fromPlatform(); final info = await PackageInfo.fromPlatform();
log('MailboxDashBoardController::_getAppVersion(): ${info.version}'); log('MailboxDashBoardController::_getAppVersion(): ${info.version}');
@@ -130,8 +143,8 @@ class ManageAccountDashBoardController extends ReloadableController {
} }
void _getVacationResponse() { void _getVacationResponse() {
if (accountId.value != null) { if (accountId.value != null && _getAllVacationInteractor != null) {
consumeState(_getAllVacationInteractor.execute(accountId.value!)); consumeState(_getAllVacationInteractor!.execute(accountId.value!));
} }
} }
@@ -198,11 +211,11 @@ class ManageAccountDashBoardController extends ReloadableController {
bool checkAvailableForwardInSession() => sessionCurrent.value?.capabilities.containsKey(capabilityForward) ?? false; bool checkAvailableForwardInSession() => sessionCurrent.value?.capabilities.containsKey(capabilityForward) ?? false;
void disableVacationResponder() { void disableVacationResponder() {
if (accountId.value != null) { if (accountId.value != null && _updateVacationInteractor != null) {
final vacationDisabled = vacationResponse.value != null final vacationDisabled = vacationResponse.value != null
? vacationResponse.value!.copyWith(isEnabled: false) ? vacationResponse.value!.copyWith(isEnabled: false)
: VacationResponse(isEnabled: false); : VacationResponse(isEnabled: false);
consumeState(_updateVacationInteractor.execute(accountId.value!, vacationDisabled)); consumeState(_updateVacationInteractor!.execute(accountId.value!, vacationDisabled));
} }
} }
@@ -1,12 +1,11 @@
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/base_bindings.dart'; import 'package:tmail_ui_user/features/base/base_bindings.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_vacation_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_vacation_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/update_vacation_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/update_vacation_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_controller.dart';
class VacationBindings extends BaseBindings { class VacationControllerBindings extends BaseBindings {
@override @override
void bindingsController() { void bindingsController() {
@@ -26,8 +25,6 @@ class VacationBindings extends BaseBindings {
@override @override
void bindingsInteractor() { void bindingsInteractor() {
Get.lazyPut(() => GetAllVacationInteractor(Get.find<ManageAccountRepository>()));
Get.lazyPut(() => UpdateVacationInteractor(Get.find<ManageAccountRepository>()));
Get.lazyPut(() => VerifyNameInteractor()); Get.lazyPut(() => VerifyNameInteractor());
} }
@@ -0,0 +1,42 @@
import 'package:get/get_core/src/get_main.dart';
import 'package:get/get_instance/get_instance.dart';
import 'package:tmail_ui_user/features/base/base_bindings.dart';
import 'package:tmail_ui_user/features/manage_account/data/datasource/vacation_data_source.dart';
import 'package:tmail_ui_user/features/manage_account/data/datasource_impl/vacation_data_source_impl.dart';
import 'package:tmail_ui_user/features/manage_account/data/network/vacation_api.dart';
import 'package:tmail_ui_user/features/manage_account/data/repository/vacation_repository_impl.dart';
import 'package:tmail_ui_user/features/manage_account/domain/repository/vacation_repository.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_vacation_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/update_vacation_interactor.dart';
class VacationInteractorsBindings extends BaseBindings {
@override
void bindingsController() {
}
@override
void bindingsDataSource() {
Get.lazyPut<VacationDataSource>(() => Get.find<VacationDataSourceImpl>());
}
@override
void bindingsDataSourceImpl() {
Get.lazyPut(() => VacationDataSourceImpl(Get.find<VacationAPI>()));
}
@override
void bindingsInteractor() {
Get.lazyPut(() => GetAllVacationInteractor(Get.find<VacationRepository>()));
Get.lazyPut(() => UpdateVacationInteractor(Get.find<VacationRepository>()));
}
@override
void bindingsRepository() {
Get.lazyPut<VacationRepository>(() => Get.find<VacationRepositoryImpl>());
}
@override
void bindingsRepositoryImpl() {
Get.lazyPut(() => VacationRepositoryImpl(Get.find<VacationDataSource>()));
}
}
@@ -17,6 +17,7 @@ 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';
import 'package:tmail_ui_user/features/manage_account/data/network/manage_account_api.dart'; import 'package:tmail_ui_user/features/manage_account/data/network/manage_account_api.dart';
import 'package:tmail_ui_user/features/manage_account/data/network/vacation_api.dart';
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';
@@ -76,6 +77,7 @@ class NetworkBindings extends Bindings {
Get.find<DownloadManager>(), Get.find<DownloadManager>(),
Get.find<DioClient>())); Get.find<DioClient>()));
Get.put(ManageAccountAPI(Get.find<JmapHttpClient.HttpClient>())); Get.put(ManageAccountAPI(Get.find<JmapHttpClient.HttpClient>()));
Get.put(VacationAPI(Get.find<JmapHttpClient.HttpClient>()));
Get.put(ContactAPI(Get.find<JmapHttpClient.HttpClient>())); Get.put(ContactAPI(Get.find<JmapHttpClient.HttpClient>()));
} }