From aa8b80975e33b2e55ea508c4cd6b6817053c013b Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 10 Nov 2022 13:59:15 +0700 Subject: [PATCH] TF-934 Optimize function in thread controller --- .../bindings/mailbox_dashboard_bindings.dart | 5 +- .../repository/thread_repository_impl.dart | 4 +- .../mixin/email_action_controller.dart | 2 +- .../thread/presentation/thread_bindings.dart | 93 +- .../presentation/thread_controller.dart | 836 ++---------------- 5 files changed, 68 insertions(+), 872 deletions(-) diff --git a/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart b/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart index 63d449966..24db15efb 100644 --- a/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart +++ b/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart @@ -1,4 +1,6 @@ -import 'package:core/core.dart'; +import 'package:core/data/model/source_type/data_source_type.dart'; +import 'package:core/data/network/dio_client.dart'; +import 'package:core/utils/config/app_config_loader.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/base_bindings.dart'; import 'package:tmail_ui_user/features/caching/recent_search_cache_client.dart'; @@ -274,7 +276,6 @@ class MailboxDashBoardBindings extends BaseBindings { DataSourceType.local: Get.find() }, Get.find(), - Get.find(), )); Get.lazyPut(() => MailboxRepositoryImpl( { diff --git a/lib/features/thread/data/repository/thread_repository_impl.dart b/lib/features/thread/data/repository/thread_repository_impl.dart index 3eabf97e5..7c3404142 100644 --- a/lib/features/thread/data/repository/thread_repository_impl.dart +++ b/lib/features/thread/data/repository/thread_repository_impl.dart @@ -11,7 +11,6 @@ import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/model.dart'; -import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart'; import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart'; import 'package:tmail_ui_user/features/mailbox/data/extensions/state_extension.dart'; import 'package:tmail_ui_user/features/mailbox/data/model/state_type.dart'; @@ -28,9 +27,8 @@ class ThreadRepositoryImpl extends ThreadRepository { final Map mapDataSource; final StateDataSource stateDataSource; - final EmailDataSource emailDataSource; - ThreadRepositoryImpl(this.mapDataSource, this.stateDataSource, this.emailDataSource); + ThreadRepositoryImpl(this.mapDataSource, this.stateDataSource); @override Stream getAllEmail( diff --git a/lib/features/thread/presentation/mixin/email_action_controller.dart b/lib/features/thread/presentation/mixin/email_action_controller.dart index 773dca5ff..4585617e8 100644 --- a/lib/features/thread/presentation/mixin/email_action_controller.dart +++ b/lib/features/thread/presentation/mixin/email_action_controller.dart @@ -185,7 +185,7 @@ mixin EmailActionController on ViewAsDialogActionMixin { } void deleteEmailPermanently(BuildContext context, PresentationEmail email) { - if (responsiveUtils.isMobile(context)) { + if (responsiveUtils.isScreenWithShortestSide(context)) { (ConfirmationDialogActionSheetBuilder(context) ..messageText(DeleteActionType.single.getContentDialog(context)) ..onCancelAction(AppLocalizations.of(context).cancel, () => popBack()) diff --git a/lib/features/thread/presentation/thread_bindings.dart b/lib/features/thread/presentation/thread_bindings.dart index a4a73c5aa..4f5288245 100644 --- a/lib/features/thread/presentation/thread_bindings.dart +++ b/lib/features/thread/presentation/thread_bindings.dart @@ -1,30 +1,10 @@ -import 'package:core/core.dart'; +import 'package:core/data/model/source_type/data_source_type.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/base_bindings.dart'; import 'package:tmail_ui_user/features/caching/caching_manager.dart'; import 'package:tmail_ui_user/features/caching/state_cache_client.dart'; -import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart'; -import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart'; -import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasource_impl.dart'; -import 'package:tmail_ui_user/features/email/data/datasource_impl/html_datasource_impl.dart'; -import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart'; -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/domain/repository/email_repository.dart'; -import 'package:tmail_ui_user/features/email/domain/usecases/delete_multiple_emails_permanently_interactor.dart'; -import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_read_interactor.dart'; -import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_star_email_interactor.dart'; -import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_interactor.dart'; -import 'package:tmail_ui_user/features/mailbox/data/datasource/mailbox_datasource.dart'; import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart'; -import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart'; -import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/mailbox_datasource_impl.dart'; import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/state_datasource_impl.dart'; -import 'package:tmail_ui_user/features/mailbox/data/local/mailbox_cache_manager.dart'; -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/repository/mailbox_repository_impl.dart'; -import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.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/thread_datasource_impl.dart'; @@ -33,13 +13,9 @@ 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/repository/thread_repository_impl.dart'; import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart'; -import 'package:tmail_ui_user/features/thread/domain/usecases/empty_trash_folder_interactor.dart'; import 'package:tmail_ui_user/features/thread/domain/usecases/get_email_by_id_interactor.dart'; import 'package:tmail_ui_user/features/thread/domain/usecases/get_emails_in_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/thread/domain/usecases/load_more_emails_in_mailbox_interactor.dart'; -import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_multiple_email_read_interactor.dart'; -import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_star_multiple_email_interactor.dart'; -import 'package:tmail_ui_user/features/thread/domain/usecases/move_multiple_email_to_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/thread/domain/usecases/refresh_changes_emails_in_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/thread/domain/usecases/search_email_interactor.dart'; import 'package:tmail_ui_user/features/thread/domain/usecases/search_more_email_interactor.dart'; @@ -53,18 +29,10 @@ class ThreadBindings extends BaseBindings { void bindingsController() { Get.put(ThreadController( Get.find(), - Get.find(), - Get.find(), - Get.find(), - Get.find(), Get.find(), Get.find(), Get.find(), Get.find(), - Get.find(), - Get.find(), - Get.find(), - Get.find(), Get.find(), Get.find(), )); @@ -72,101 +40,42 @@ class ThreadBindings extends BaseBindings { @override void bindingsDataSource() { - Get.lazyPut(() => Get.find()); Get.lazyPut(() => Get.find()); Get.lazyPut(() => Get.find()); - Get.lazyPut(() => Get.find()); - Get.lazyPut(() => Get.find()); } @override void bindingsDataSourceImpl() { - Get.lazyPut(() => MailboxDataSourceImpl( - Get.find(), - Get.find(), - Get.find())); - Get.lazyPut(() => MailboxCacheDataSourceImpl( - Get.find(), - Get.find())); Get.lazyPut(() => ThreadDataSourceImpl( Get.find(), Get.find(), Get.find())); Get.lazyPut(() => LocalThreadDataSourceImpl(Get.find(), Get.find())); Get.lazyPut(() => StateDataSourceImpl(Get.find(), Get.find())); - Get.lazyPut(() => EmailDataSourceImpl( - Get.find(), - Get.find())); - Get.lazyPut(() => HtmlDataSourceImpl( - Get.find(), - Get.find(), - Get.find())); } @override void bindingsInteractor() { Get.lazyPut(() => GetEmailsInMailboxInteractor(Get.find())); - Get.lazyPut(() => MarkAsEmailReadInteractor( - Get.find(), - Get.find())); - Get.lazyPut(() => MarkAsMultipleEmailReadInteractor( - Get.find(), - Get.find())); - Get.lazyPut(() => MoveToMailboxInteractor( - Get.find(), - Get.find())); - Get.lazyPut(() => MoveMultipleEmailToMailboxInteractor( - Get.find(), - Get.find())); - Get.lazyPut(() => MarkAsStarEmailInteractor(Get.find())); - Get.lazyPut(() => MarkAsStarMultipleEmailInteractor(Get.find())); Get.lazyPut(() => RefreshChangesEmailsInMailboxInteractor(Get.find())); Get.lazyPut(() => LoadMoreEmailsInMailboxInteractor(Get.find())); Get.lazyPut(() => SearchEmailInteractor(Get.find())); Get.lazyPut(() => SearchMoreEmailInteractor(Get.find())); - Get.lazyPut(() => DeleteMultipleEmailsPermanentlyInteractor( - Get.find(), - Get.find())); - Get.lazyPut(() => EmptyTrashFolderInteractor( - Get.find(), - Get.find(), - Get.find())); - Get.lazyPut(() => MarkAsEmailReadInteractor( - Get.find(), - Get.find())); - Get.lazyPut(() => MoveToMailboxInteractor( - Get.find(), - Get.find())); Get.lazyPut(() => GetEmailByIdInteractor(Get.find())); } @override void bindingsRepository() { - Get.lazyPut(() => Get.find()); Get.lazyPut(() => Get.find()); - Get.lazyPut(() => Get.find()); } @override void bindingsRepositoryImpl() { - Get.lazyPut(() => MailboxRepositoryImpl( - { - DataSourceType.network: Get.find(), - DataSourceType.local: Get.find() - }, - Get.find(), - )); Get.lazyPut(() => ThreadRepositoryImpl( { DataSourceType.network: Get.find(), DataSourceType.local: Get.find() }, - Get.find(), - Get.find(), - )); - Get.lazyPut(() => EmailRepositoryImpl( - Get.find(), - Get.find(), Get.find() )); } diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 34ff33bf3..4f71f0b5b 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -1,11 +1,14 @@ -import 'package:core/core.dart'; +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:core/presentation/utils/app_toast.dart'; +import 'package:core/utils/app_logger.dart'; import 'package:dartz/dartz.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; -import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/sort/comparator.dart'; import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; @@ -16,35 +19,21 @@ import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart'; import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/model.dart'; -import 'package:pointer_interceptor/pointer_interceptor.dart'; 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/composer/domain/state/save_email_as_drafts_state.dart'; import 'package:tmail_ui_user/features/composer/domain/state/send_email_state.dart'; import 'package:tmail_ui_user/features/composer/domain/state/update_email_drafts_state.dart'; -import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart'; -import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart'; -import 'package:tmail_ui_user/features/email/domain/model/move_action.dart'; -import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart'; import 'package:tmail_ui_user/features/email/domain/state/delete_email_permanently_state.dart'; import 'package:tmail_ui_user/features/email/domain/state/delete_multiple_emails_permanently_state.dart'; import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart'; import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_star_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_multiple_emails_permanently_interactor.dart'; -import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_read_interactor.dart'; -import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_star_email_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/mailbox/domain/state/mark_as_mailbox_read_state.dart'; -import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_email_drafts_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.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/model/dashboard_routes.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart'; import 'package:tmail_ui_user/features/search/presentation/search_email_bindings.dart'; import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart'; @@ -62,47 +51,35 @@ import 'package:tmail_ui_user/features/thread/domain/state/move_multiple_email_t import 'package:tmail_ui_user/features/thread/domain/state/refresh_changes_all_email_state.dart'; import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.dart'; import 'package:tmail_ui_user/features/thread/domain/state/search_more_email_state.dart'; -import 'package:tmail_ui_user/features/thread/domain/usecases/empty_trash_folder_interactor.dart'; import 'package:tmail_ui_user/features/thread/domain/usecases/get_email_by_id_interactor.dart'; import 'package:tmail_ui_user/features/thread/domain/usecases/get_emails_in_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/thread/domain/usecases/load_more_emails_in_mailbox_interactor.dart'; -import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_multiple_email_read_interactor.dart'; -import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_star_multiple_email_interactor.dart'; -import 'package:tmail_ui_user/features/thread/domain/usecases/move_multiple_email_to_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/thread/domain/usecases/refresh_changes_emails_in_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/thread/domain/usecases/search_email_interactor.dart'; import 'package:tmail_ui_user/features/thread/domain/usecases/search_more_email_interactor.dart'; +import 'package:tmail_ui_user/features/thread/presentation/mixin/email_action_controller.dart'; import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart'; import 'package:tmail_ui_user/features/thread/presentation/model/search_state.dart'; import 'package:tmail_ui_user/features/thread/presentation/model/search_status.dart'; import 'package:tmail_ui_user/main/exceptions/remote_exception.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/navigation_router.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; +import 'package:tmail_ui_user/main/routes/route_utils.dart'; typedef StartRangeSelection = int; typedef EndRangeSelection = int; -class ThreadController extends BaseController { +class ThreadController extends BaseController with EmailActionController { - final mailboxDashBoardController = Get.find(); final _imagePaths = Get.find(); - final _responsiveUtils = Get.find(); final _appToast = Get.find(); final GetEmailsInMailboxInteractor _getEmailsInMailboxInteractor; - final MarkAsMultipleEmailReadInteractor _markAsMultipleEmailReadInteractor; - final MoveMultipleEmailToMailboxInteractor _moveMultipleEmailToMailboxInteractor; - final MarkAsStarEmailInteractor _markAsStarEmailInteractor; - final MarkAsStarMultipleEmailInteractor _markAsStarMultipleEmailInteractor; final RefreshChangesEmailsInMailboxInteractor _refreshChangesEmailsInMailboxInteractor; final LoadMoreEmailsInMailboxInteractor _loadMoreEmailsInMailboxInteractor; final SearchEmailInteractor _searchEmailInteractor; final SearchMoreEmailInteractor _searchMoreEmailInteractor; - final DeleteMultipleEmailsPermanentlyInteractor _deleteMultipleEmailsPermanentlyInteractor; - final EmptyTrashFolderInteractor _emptyTrashFolderInteractor; - final MarkAsEmailReadInteractor _markAsEmailReadInteractor; - final MoveToMailboxInteractor _moveToMailboxInteractor; final CachingManager _cachingManager; final GetEmailByIdInteractor _getEmailByIdInteractor; @@ -139,18 +116,10 @@ class ThreadController extends BaseController { ThreadController( this._getEmailsInMailboxInteractor, - this._markAsMultipleEmailReadInteractor, - this._moveMultipleEmailToMailboxInteractor, - this._markAsStarEmailInteractor, - this._markAsStarMultipleEmailInteractor, this._refreshChangesEmailsInMailboxInteractor, this._loadMoreEmailsInMailboxInteractor, this._searchEmailInteractor, this._searchMoreEmailInteractor, - this._deleteMultipleEmailsPermanentlyInteractor, - this._emptyTrashFolderInteractor, - this._markAsEmailReadInteractor, - this._moveToMailboxInteractor, this._cachingManager, this._getEmailByIdInteractor, ); @@ -203,10 +172,20 @@ class ThreadController extends BaseController { if (currentContext != null) { final mailboxContain = success.email .findMailboxContain(mailboxDashBoardController.mapMailboxById); + final route = RouteUtils.generateRouteBrowser( + AppRoutes.dashboard, + NavigationRouter( + emailId: success.email.id, + mailboxId: mailboxContain?.id, + dashboardType: searchController.isSearchEmailRunning + ? DashboardType.search + : DashboardType.normal + ) + ); pressEmailAction( currentContext!, EmailActionType.preview, - success.email, + success.email.withRouteWeb(route), mailboxContain: mailboxContain); } } @@ -215,42 +194,7 @@ class ThreadController extends BaseController { } @override - void onDone() { - viewState.value.fold( - (failure) { - if (failure is MarkAsMultipleEmailReadAllFailure - || failure is MarkAsMultipleEmailReadFailure) { - _markAsReadSelectedMultipleEmailFailure(failure); - } else if (failure is MarkAsStarMultipleEmailAllFailure - || failure is MarkAsStarMultipleEmailFailure) { - _markAsStarMultipleEmailFailure(failure); - } - }, - (success) { - if (success is MarkAsMultipleEmailReadAllSuccess - || success is MarkAsMultipleEmailReadHasSomeEmailFailure) { - _markAsReadSelectedMultipleEmailSuccess(success); - } else if (success is MoveMultipleEmailToMailboxAllSuccess - || success is MoveMultipleEmailToMailboxHasSomeEmailFailure) { - _moveSelectedMultipleEmailToMailboxSuccess(success); - } else if (success is MarkAsStarEmailSuccess) { - _markAsStarEmailSuccess(success); - } else if (success is MarkAsStarMultipleEmailAllSuccess - || success is MarkAsStarMultipleEmailHasSomeEmailFailure) { - _markAsStarMultipleEmailSuccess(success); - } else if (success is DeleteMultipleEmailsPermanentlyAllSuccess - || success is DeleteMultipleEmailsPermanentlyHasSomeEmailFailure) { - _deleteMultipleEmailsPermanentlySuccess(success); - } else if (success is EmptyTrashFolderSuccess) { - _emptyTrashFolderSuccess(success); - } else if (success is MarkAsEmailReadSuccess) { - _markAsEmailReadSuccess(success); - } else if (success is MoveToMailboxSuccess) { - _moveToMailboxSuccess(success); - } - } - ); - } + void onDone() {} @override void onError(error) { @@ -304,10 +248,20 @@ class ThreadController extends BaseController { } else if (action is OpenEmailDetailedFromSuggestionQuickSearchAction) { final mailboxContain = action.presentationEmail .findMailboxContain(mailboxDashBoardController.mapMailboxById); + final route = RouteUtils.generateRouteBrowser( + AppRoutes.dashboard, + NavigationRouter( + emailId: action.presentationEmail.id, + mailboxId: mailboxContain?.id, + dashboardType: searchController.isSearchEmailRunning + ? DashboardType.search + : DashboardType.normal + ) + ); pressEmailAction( action.context, EmailActionType.preview, - action.presentationEmail, + action.presentationEmail.withRouteWeb(route), mailboxContain: mailboxContain); mailboxDashBoardController.clearDashBoardAction(); } else if (action is StartSearchEmailAction) { @@ -348,6 +302,22 @@ class ThreadController extends BaseController { _refreshEmailChanges(currentEmailState: success.currentEmailState); } else if (success is MoveMultipleEmailToMailboxAllSuccess) { _refreshEmailChanges(currentEmailState: success.currentEmailState); + } else if (success is MoveMultipleEmailToMailboxHasSomeEmailFailure) { + _refreshEmailChanges(currentEmailState: success.currentEmailState); + } else if (success is DeleteMultipleEmailsPermanentlyAllSuccess) { + _refreshEmailChanges(currentEmailState: success.currentEmailState); + } else if (success is DeleteMultipleEmailsPermanentlyHasSomeEmailFailure) { + _refreshEmailChanges(currentEmailState: success.currentEmailState); + } else if (success is MarkAsStarMultipleEmailAllSuccess) { + _refreshEmailChanges(currentEmailState: success.currentEmailState); + } else if (success is MarkAsStarMultipleEmailHasSomeEmailFailure) { + _refreshEmailChanges(currentEmailState: success.currentEmailState); + } else if (success is MarkAsMultipleEmailReadAllSuccess) { + _refreshEmailChanges(currentEmailState: success.currentEmailState); + } else if (success is MarkAsMultipleEmailReadHasSomeEmailFailure) { + _refreshEmailChanges(currentEmailState: success.currentEmailState); + } else if (success is EmptyTrashFolderSuccess) { + refreshAllEmail(); } }); } @@ -614,68 +584,6 @@ class ThreadController extends BaseController { mailboxDashBoardController.listEmailSelected.clear(); } - void markAsReadSelectedMultipleEmail( - List listPresentationEmail, - ReadActions readActions - ) { - if (_accountId != null) { - cancelSelectEmail(); - consumeState(_markAsMultipleEmailReadInteractor.execute( - _accountId!, - listPresentationEmail.listEmail, - readActions)); - } - } - - void _markAsReadSelectedMultipleEmailSuccess(Success success) { - mailboxDashBoardController.dispatchState(Right(success)); - - ReadActions? readActions; - jmap.State? currentEmailState; - - if (success is MarkAsMultipleEmailReadAllSuccess) { - readActions = success.readActions; - currentEmailState = success.currentEmailState; - } else if (success is MarkAsMultipleEmailReadHasSomeEmailFailure) { - readActions = success.readActions; - currentEmailState = success.currentEmailState; - } - - if (currentContext != null && readActions != null && currentOverlayContext != null) { - final message = readActions == ReadActions.markAsUnread - ? AppLocalizations.of(currentContext!).marked_message_toast(AppLocalizations.of(currentContext!).unread) - : AppLocalizations.of(currentContext!).marked_message_toast(AppLocalizations.of(currentContext!).read); - _appToast.showToastWithIcon( - currentOverlayContext!, - message: message, - icon: readActions == ReadActions.markAsUnread ? _imagePaths.icUnreadToast : _imagePaths.icReadToast); - } - _refreshEmailChanges(currentEmailState: currentEmailState); - } - - void _markAsReadSelectedMultipleEmailFailure(Failure failure) { - if (currentContext != null) { - _appToast.showErrorToast(AppLocalizations.of(currentContext!).an_error_occurred); - } - } - - void openFilterMessagesCupertinoActionSheet(BuildContext context, List actionTiles, {Widget? cancelButton}) { - (CupertinoActionSheetBuilder(context) - ..addTiles(actionTiles) - ..addCancelButton(cancelButton)) - .show(); - } - - void openFilterMessagesForTablet(BuildContext context, RelativeRect? position, List popupMenuItems) async { - await showMenu( - context: context, - position: position ?? const RelativeRect.fromLTRB(16, 40, 16, 16), - color: Colors.white, - elevation: 5, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(14)), - items: popupMenuItems); - } - void closeFilterMessageActionSheet() { popBack(); } @@ -701,284 +609,6 @@ class ThreadController extends BaseController { } } - void moveSelectedMultipleEmailToMailbox( - BuildContext context, - List listEmail, - PresentationMailbox currentMailbox - ) async { - if (_accountId != null) { - final arguments = DestinationPickerArguments(_accountId!, MailboxActions.moveEmail); - - if (BuildUtils.isWeb) { - showDialogDestinationPicker( - context: context, - arguments: arguments, - onSelectedMailbox: (destinationMailbox) { - if (mailboxDashBoardController.sessionCurrent != null) { - _dispatchMoveToMultipleAction( - _accountId!, - mailboxDashBoardController.sessionCurrent!, - listEmail.listEmailIds, - currentMailbox, - destinationMailbox); - } - }); - } else { - final destinationMailbox = await push( - AppRoutes.destinationPicker, - arguments: arguments); - - if (destinationMailbox != null && - destinationMailbox is PresentationMailbox && - mailboxDashBoardController.sessionCurrent != null) { - _dispatchMoveToMultipleAction( - _accountId!, - mailboxDashBoardController.sessionCurrent!, - listEmail.listEmailIds, - currentMailbox, - destinationMailbox); - } - } - } - } - - void _dispatchMoveToMultipleAction( - AccountId accountId, - Session session, - List listEmailIds, - PresentationMailbox currentMailbox, - PresentationMailbox destinationMailbox - ) { - if (destinationMailbox.isTrash) { - _moveSelectedEmailMultipleToTrashAction(accountId, MoveToMailboxRequest( - {currentMailbox.id: listEmailIds}, - destinationMailbox.id, - MoveAction.moving, - session, - EmailActionType.moveToTrash)); - } else if (destinationMailbox.isSpam) { - _moveSelectedEmailMultipleToSpamAction(accountId, MoveToMailboxRequest( - {currentMailbox.id: listEmailIds}, - destinationMailbox.id, - MoveAction.moving, - session, - EmailActionType.moveToSpam)); - } else { - _moveSelectedEmailMultipleToMailboxAction(accountId, MoveToMailboxRequest( - {currentMailbox.id: listEmailIds}, - destinationMailbox.id, - MoveAction.moving, - session, - EmailActionType.moveToMailbox, - destinationPath: destinationMailbox.mailboxPath)); - } - } - - void _moveSelectedEmailMultipleToMailboxAction(AccountId accountId, MoveToMailboxRequest moveRequest) { - cancelSelectEmail(); - consumeState(_moveMultipleEmailToMailboxInteractor.execute(accountId, moveRequest)); - } - - void _moveSelectedMultipleEmailToMailboxSuccess(Success success) { - mailboxDashBoardController.dispatchState(Right(success)); - - String? destinationPath; - List movedEmailIds = []; - MailboxId? currentMailboxId; - MailboxId? destinationMailboxId; - MoveAction? moveAction; - EmailActionType? emailActionType; - jmap.State? currentEmailState; - - if (success is MoveMultipleEmailToMailboxAllSuccess) { - destinationPath = success.destinationPath; - movedEmailIds = success.movedListEmailId; - currentMailboxId = success.currentMailboxId; - destinationMailboxId = success.destinationMailboxId; - moveAction = success.moveAction; - emailActionType = success.emailActionType; - currentEmailState = success.currentEmailState; - } else if (success is MoveMultipleEmailToMailboxHasSomeEmailFailure) { - destinationPath = success.destinationPath; - movedEmailIds = success.movedListEmailId; - currentMailboxId = success.currentMailboxId; - destinationMailboxId = success.destinationMailboxId; - moveAction = success.moveAction; - emailActionType = success.emailActionType; - currentEmailState = success.currentEmailState; - } - - if (currentContext != null && currentOverlayContext != null - && emailActionType != null && moveAction == MoveAction.moving) { - _appToast.showBottomToast( - currentOverlayContext!, - emailActionType.getToastMessageMoveToMailboxSuccess(currentContext!, destinationPath: destinationPath), - actionName: AppLocalizations.of(currentContext!).undo, - onActionClick: () { - final newCurrentMailboxId = destinationMailboxId; - final newDestinationMailboxId = currentMailboxId; - if (newCurrentMailboxId != null && newDestinationMailboxId != null) { - _revertedSelectionEmailToOriginalMailbox(MoveToMailboxRequest( - {newCurrentMailboxId: movedEmailIds}, - newDestinationMailboxId, - MoveAction.undo, - mailboxDashBoardController.sessionCurrent!, - emailActionType!, - destinationPath: destinationPath)); - } - }, - leadingIcon: SvgPicture.asset( - _imagePaths.icFolderMailbox, - width: 24, - height: 24, - color: Colors.white, - fit: BoxFit.fill), - backgroundColor: AppColor.toastSuccessBackgroundColor, - textColor: Colors.white, - textActionColor: Colors.white, - actionIcon: SvgPicture.asset(_imagePaths.icUndo), - maxWidth: _responsiveUtils.getMaxWidthToast(currentContext!) - ); - } - - _refreshEmailChanges(currentEmailState: currentEmailState); - } - - void moveSelectedMultipleEmailToTrash( - List listEmail, - PresentationMailbox currentMailbox - ) { - final trashMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleTrash); - - if (_accountId != null && trashMailboxId != null) { - final listEmailIds = listEmail.map((email) => email.id).toList(); - _moveSelectedEmailMultipleToTrashAction(_accountId!, MoveToMailboxRequest( - {currentMailbox.id: listEmailIds}, - trashMailboxId, - MoveAction.moving, - mailboxDashBoardController.sessionCurrent!, - EmailActionType.moveToTrash) - ); - } - } - - void _moveSelectedEmailMultipleToTrashAction(AccountId accountId, MoveToMailboxRequest moveRequest) { - cancelSelectEmail(); - consumeState(_moveMultipleEmailToMailboxInteractor.execute(accountId, moveRequest)); - } - - void moveSelectedMultipleEmailToSpam( - List listEmail, - PresentationMailbox currentMailbox - ) { - final spamMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleSpam); - - if (_accountId != null && spamMailboxId != null) { - final listEmailIds = listEmail.map((email) => email.id).toList(); - _moveSelectedEmailMultipleToSpamAction(_accountId!, MoveToMailboxRequest( - {currentMailbox.id: listEmailIds}, - spamMailboxId, - MoveAction.moving, - mailboxDashBoardController.sessionCurrent!, - EmailActionType.moveToSpam) - ); - } - } - - void _moveSelectedEmailMultipleToSpamAction(AccountId accountId, MoveToMailboxRequest moveRequest) { - cancelSelectEmail(); - consumeState(_moveMultipleEmailToMailboxInteractor.execute(accountId, moveRequest)); - } - - void unSpamSelectedMultipleEmail(List listEmail) async { - final spamMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleSpam); - final inboxMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleInbox); - - if (inboxMailboxId != null && _accountId != null && spamMailboxId != null) { - final listEmailIds = listEmail.map((email) => email.id).toList(); - _moveSelectedEmailMultipleToMailboxAction(_accountId!, MoveToMailboxRequest( - {spamMailboxId: listEmailIds}, - inboxMailboxId, - MoveAction.moving, - mailboxDashBoardController.sessionCurrent!, - EmailActionType.unSpam) - ); - } - } - - void _revertedSelectionEmailToOriginalMailbox(MoveToMailboxRequest newMoveRequest) { - if (_accountId != null) { - consumeState(_moveMultipleEmailToMailboxInteractor.execute(_accountId!, newMoveRequest)); - } - } - - void markAsEmailRead(PresentationEmail presentationEmail, ReadActions readActions) async { - if (_accountId != null) { - consumeState(_markAsEmailReadInteractor.execute(_accountId!, presentationEmail.toEmail(), readActions)); - } - } - - void _markAsEmailReadSuccess(Success success) { - mailboxDashBoardController.dispatchState(Right(success)); - } - - void markAsStarEmail(PresentationEmail presentationEmail, MarkStarAction action) { - if (_accountId != null) { - consumeState(_markAsStarEmailInteractor.execute(_accountId!, presentationEmail.toEmail(), action)); - } - } - - void _markAsStarEmailSuccess(MarkAsStarEmailSuccess success) { - _refreshEmailChanges(currentEmailState: success.currentEmailState); - } - - void markAsStarSelectedMultipleEmail( - List listPresentationEmail, - MarkStarAction markStarAction - ) { - if (_accountId != null) { - cancelSelectEmail(); - consumeState(_markAsStarMultipleEmailInteractor.execute( - _accountId!, - listPresentationEmail.listEmail, - markStarAction)); - } - } - - void _markAsStarMultipleEmailSuccess(Success success) { - MarkStarAction? markStarAction; - int countMarkStarSuccess = 0; - jmap.State? currentEmailState; - - if (success is MarkAsStarMultipleEmailAllSuccess) { - markStarAction = success.markStarAction; - countMarkStarSuccess = success.countMarkStarSuccess; - currentEmailState = success.currentEmailState; - } else if (success is MarkAsStarMultipleEmailHasSomeEmailFailure) { - markStarAction = success.markStarAction; - countMarkStarSuccess = success.countMarkStarSuccess; - currentEmailState = success.currentEmailState; - } - - if (currentContext != null && markStarAction != null && currentOverlayContext != null) { - final message = markStarAction == MarkStarAction.unMarkStar - ? AppLocalizations.of(currentContext!).marked_unstar_multiple_item(countMarkStarSuccess) - : AppLocalizations.of(currentContext!).marked_star_multiple_item(countMarkStarSuccess); - _appToast.showToastWithIcon( - currentOverlayContext!, - message: message, - icon: markStarAction == MarkStarAction.unMarkStar ? _imagePaths.icUnStar : _imagePaths.icStar); - } - - _refreshEmailChanges(currentEmailState: currentEmailState); - } - - void _markAsStarMultipleEmailFailure(Failure failure) { - if (currentContext != null) { - _appToast.showErrorToast(AppLocalizations.of(currentContext!).an_error_occurred); - } - } - bool isSearchActive() => searchController.isSearchEmailRunning; bool get isAllSearchInActive => !searchController.isSearchActive() && @@ -1051,18 +681,23 @@ class ThreadController extends BaseController { void pressEmailSelectionAction(BuildContext context, EmailActionType actionType, List selectionEmail) { switch(actionType) { case EmailActionType.markAsRead: + cancelSelectEmail(); markAsReadSelectedMultipleEmail(selectionEmail, ReadActions.markAsRead); break; case EmailActionType.markAsUnread: + cancelSelectEmail(); markAsReadSelectedMultipleEmail(selectionEmail, ReadActions.markAsUnread); break; case EmailActionType.markAsStarred: + cancelSelectEmail(); markAsStarSelectedMultipleEmail(selectionEmail, MarkStarAction.markStar); break; case EmailActionType.unMarkAsStarred: + cancelSelectEmail(); markAsStarSelectedMultipleEmail(selectionEmail, MarkStarAction.unMarkStar); break; case EmailActionType.moveToMailbox: + cancelSelectEmail(); final mailboxContainCurrent = searchController.isSearchEmailRunning ? selectionEmail.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById) : currentMailbox; @@ -1071,6 +706,7 @@ class ThreadController extends BaseController { } break; case EmailActionType.moveToTrash: + cancelSelectEmail(); final mailboxContainCurrent = searchController.isSearchEmailRunning ? selectionEmail.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById) : currentMailbox; @@ -1084,13 +720,15 @@ class ThreadController extends BaseController { : currentMailbox; if (mailboxContainCurrent != null) { deleteSelectionEmailsPermanently( - context, - DeleteActionType.multiple, - selectedEmails: selectionEmail, - presentationMailbox: mailboxContainCurrent); + context, + DeleteActionType.multiple, + listEmails: selectionEmail, + mailboxCurrent: mailboxContainCurrent, + onCancelSelectionEmail: () => cancelSelectEmail()); } break; case EmailActionType.moveToSpam: + cancelSelectEmail(); final mailboxContainCurrent = searchController.isSearchEmailRunning ? selectionEmail.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById) : currentMailbox; @@ -1099,6 +737,7 @@ class ThreadController extends BaseController { } break; case EmailActionType.unSpam: + cancelSelectEmail(); unSpamSelectedMultipleEmail(selectionEmail); break; default: @@ -1157,363 +796,12 @@ class ThreadController extends BaseController { } } - void moveToMailbox(BuildContext context, PresentationEmail email) async { - final currentMailbox = mailboxDashBoardController.selectedMailbox.value; - final accountId = mailboxDashBoardController.accountId.value; - - if (currentMailbox != null && accountId != null) { - final arguments = DestinationPickerArguments(accountId, MailboxActions.moveEmail); - - if (BuildUtils.isWeb) { - showDialogDestinationPicker( - context: context, - arguments: arguments, - onSelectedMailbox: (destinationMailbox) { - if (mailboxDashBoardController.sessionCurrent != null) { - _dispatchMoveToAction( - context, - accountId, - mailboxDashBoardController.sessionCurrent!, - email, - currentMailbox, - destinationMailbox); - } - }); - } else { - final destinationMailbox = await push( - AppRoutes.destinationPicker, - arguments: arguments); - - if (destinationMailbox != null && - destinationMailbox is PresentationMailbox && - mailboxDashBoardController.sessionCurrent != null) { - _dispatchMoveToAction( - context, - accountId, - mailboxDashBoardController.sessionCurrent!, - email, - currentMailbox, - destinationMailbox); - } - } - } - } - - void _dispatchMoveToAction( - BuildContext context, - AccountId accountId, - Session session, - PresentationEmail emailSelected, - PresentationMailbox currentMailbox, - PresentationMailbox destinationMailbox - ) { - if (destinationMailbox.isTrash) { - _moveToTrashAction(accountId, MoveToMailboxRequest( - {currentMailbox.id: [emailSelected.id]}, - destinationMailbox.id, - MoveAction.moving, - session, - EmailActionType.moveToTrash)); - } else if (destinationMailbox.isSpam) { - _moveToSpamAction(accountId, MoveToMailboxRequest( - {currentMailbox.id: [emailSelected.id]}, - destinationMailbox.id, - MoveAction.moving, - session, - EmailActionType.moveToSpam)); - } else { - _moveToMailboxAction(accountId, MoveToMailboxRequest( - {currentMailbox.id: [emailSelected.id]}, - destinationMailbox.id, - MoveAction.moving, - session, - EmailActionType.moveToMailbox, - destinationPath: destinationMailbox.mailboxPath)); - } - } - - void _moveToMailboxAction(AccountId accountId, MoveToMailboxRequest moveRequest) { - consumeState(_moveToMailboxInteractor.execute(accountId, moveRequest)); - } - - void _moveToMailboxSuccess(MoveToMailboxSuccess success) { - mailboxDashBoardController.dispatchState(Right(success)); - - if (success.moveAction == MoveAction.moving && currentContext != null && currentOverlayContext != null) { - _appToast.showBottomToast( - currentOverlayContext!, - AppLocalizations.of(currentContext!).moved_to_mailbox(success.destinationPath ?? ''), - actionName: AppLocalizations.of(currentContext!).undo, - onActionClick: () { - _revertedToOriginalMailbox(MoveToMailboxRequest( - {success.destinationMailboxId: [success.emailId]}, - success.currentMailboxId, - MoveAction.undo, - mailboxDashBoardController.sessionCurrent!, - success.emailActionType)); - }, - leadingIcon: SvgPicture.asset( - _imagePaths.icFolderMailbox, - width: 24, - height: 24, - color: Colors.white, - fit: BoxFit.fill), - backgroundColor: AppColor.toastSuccessBackgroundColor, - textColor: Colors.white, - textActionColor: Colors.white, - actionIcon: SvgPicture.asset(_imagePaths.icUndo), - maxWidth: _responsiveUtils.getMaxWidthToast(currentContext!) - ); - } - } - - void _revertedToOriginalMailbox(MoveToMailboxRequest newMoveRequest) { - final accountId = mailboxDashBoardController.accountId.value; - if (accountId != null) { - _moveToMailboxAction(accountId, newMoveRequest); - } - } - - void _moveToTrashAction(AccountId accountId, MoveToMailboxRequest moveRequest) { - mailboxDashBoardController.moveToMailbox(accountId, moveRequest); - } - - void moveToTrash(PresentationEmail email) async { - final currentMailbox = mailboxDashBoardController.selectedMailbox.value; - final accountId = mailboxDashBoardController.accountId.value; - final trashMailboxId = mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleTrash]; - - if (currentMailbox != null && accountId != null && trashMailboxId != null) { - _moveToTrashAction(accountId, MoveToMailboxRequest( - {currentMailbox.id: [email.id]}, - trashMailboxId, - MoveAction.moving, - mailboxDashBoardController.sessionCurrent!, - EmailActionType.moveToTrash) - ); - } - } - - void moveToSpam(PresentationEmail email) async { - final currentMailbox = mailboxDashBoardController.selectedMailbox.value; - final accountId = mailboxDashBoardController.accountId.value; - final spamMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleSpam); - - if (currentMailbox != null && accountId != null && spamMailboxId != null) { - _moveToSpamAction(accountId, MoveToMailboxRequest( - {currentMailbox.id: [email.id]}, - spamMailboxId, - MoveAction.moving, - mailboxDashBoardController.sessionCurrent!, - EmailActionType.moveToSpam) - ); - } - } - - void unSpam(PresentationEmail email) async { - final accountId = mailboxDashBoardController.accountId.value; - final spamMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleSpam); - final inboxMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleInbox); - - if (inboxMailboxId != null && accountId != null && spamMailboxId != null) { - _moveToSpamAction(accountId, MoveToMailboxRequest( - {spamMailboxId: [email.id]}, - inboxMailboxId, - MoveAction.moving, - mailboxDashBoardController.sessionCurrent!, - EmailActionType.unSpam) - ); - } - } - - void _moveToSpamAction(AccountId accountId, MoveToMailboxRequest moveRequest) { - mailboxDashBoardController.moveToMailbox(accountId, moveRequest); - } - - void deleteEmailPermanently(BuildContext context, PresentationEmail email) { - if (_responsiveUtils.isMobile(context)) { - (ConfirmationDialogActionSheetBuilder(context) - ..messageText(DeleteActionType.single.getContentDialog(context)) - ..onCancelAction(AppLocalizations.of(context).cancel, () => popBack()) - ..onConfirmAction(DeleteActionType.single.getConfirmActionName(context), () => _deleteEmailPermanentlyAction(context, email))) - .show(); - } else { - showDialog( - context: context, - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (BuildContext context) => PointerInterceptor(child: (ConfirmDialogBuilder(_imagePaths) - ..key(const Key('confirm_dialog_delete_email_permanently')) - ..title(DeleteActionType.single.getTitleDialog(context)) - ..content(DeleteActionType.single.getContentDialog(context)) - ..addIcon(SvgPicture.asset(_imagePaths.icRemoveDialog, fit: BoxFit.fill)) - ..colorConfirmButton(AppColor.colorConfirmActionDialog) - ..styleTextConfirmButton(const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: AppColor.colorActionDeleteConfirmDialog)) - ..onCloseButtonAction(() => popBack()) - ..onConfirmButtonAction(DeleteActionType.single.getConfirmActionName(context), () => _deleteEmailPermanentlyAction(context, email)) - ..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack())) - .build())); - } - } - - void _deleteEmailPermanentlyAction(BuildContext context, PresentationEmail email) { - popBack(); - mailboxDashBoardController.deleteEmailPermanently(email); - } - - bool get isMailboxTrash => mailboxDashBoardController.selectedMailbox.value?.role == PresentationMailbox.roleTrash; - - void deleteSelectionEmailsPermanently( - BuildContext context, - DeleteActionType actionType, - { - List? selectedEmails, - PresentationMailbox? presentationMailbox - } - ) { - if (_responsiveUtils.isMobile(context)) { - (ConfirmationDialogActionSheetBuilder(context) - ..messageText(actionType.getContentDialog( - context, - count: selectedEmails?.length, - mailboxName: presentationMailbox?.name?.name)) - ..onCancelAction(AppLocalizations.of(context).cancel, () => popBack()) - ..onConfirmAction(actionType.getConfirmActionName(context), () => _deleteSelectionEmailsPermanentlyAction(actionType))) - .show(); - } else { - showDialog( - context: context, - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (BuildContext context) => PointerInterceptor(child: (ConfirmDialogBuilder(_imagePaths) - ..key(const Key('confirm_dialog_delete_emails_permanently')) - ..title(actionType.getTitleDialog(context)) - ..content(actionType.getContentDialog( - context, - count: selectedEmails?.length, - mailboxName: presentationMailbox?.name?.name)) - ..addIcon(SvgPicture.asset(_imagePaths.icRemoveDialog, fit: BoxFit.fill)) - ..colorConfirmButton(AppColor.colorConfirmActionDialog) - ..styleTextConfirmButton(const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: AppColor.colorActionDeleteConfirmDialog)) - ..onCloseButtonAction(() => popBack()) - ..onConfirmButtonAction(actionType.getConfirmActionName(context), () => _deleteSelectionEmailsPermanentlyAction(actionType)) - ..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack())) - .build())); - } - } - - void _deleteSelectionEmailsPermanentlyAction(DeleteActionType actionType) { - popBack(); - - switch(actionType) { - case DeleteActionType.all: - _emptyTrashFolderAction(); - break; - case DeleteActionType.multiple: - _deleteMultipleEmailsPermanently(listEmailSelected); - break; - case DeleteActionType.single: - break; - } - } - - void _deleteMultipleEmailsPermanently(List emailList) { - final listEmailIds = emailList.map((email) => email.id).toList(); - cancelSelectEmail(); - if ( _accountId != null && listEmailIds.isNotEmpty) { - consumeState(_deleteMultipleEmailsPermanentlyInteractor.execute(_accountId!, listEmailIds)); - } - } - - void _deleteMultipleEmailsPermanentlySuccess(Success success) { - mailboxDashBoardController.dispatchState(Right(success)); - - jmap.State? currentEmailState; - List listEmailIdResult = []; - if (success is DeleteMultipleEmailsPermanentlyAllSuccess) { - listEmailIdResult = success.emailIds; - currentEmailState = success.currentEmailState; - } else if (success is DeleteMultipleEmailsPermanentlyHasSomeEmailFailure) { - listEmailIdResult = success.emailIds; - currentEmailState = success.currentEmailState; - } - - if (currentContext != null && currentOverlayContext != null && listEmailIdResult.isNotEmpty) { - _appToast.showToastWithIcon( - currentOverlayContext!, - widthToast: _responsiveUtils.isDesktop(currentContext!) ? 360 : null, - message: AppLocalizations.of(currentContext!).toast_message_delete_multiple_email_permanently_success(listEmailIdResult.length), - icon: _imagePaths.icDeleteToast); - } - - _refreshEmailChanges(currentEmailState: currentEmailState); - } - - void _emptyTrashFolderAction() { - cancelSelectEmail(); - - final trashMailboxId = mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleTrash]; - log('ThreadController::_emptyTrashFolderAction(): trashMailboxId: $trashMailboxId'); - if (_accountId != null && trashMailboxId != null) { - consumeState(_emptyTrashFolderInteractor.execute(_accountId!, trashMailboxId)); - } - } - - void _emptyTrashFolderSuccess(EmptyTrashFolderSuccess success) { - mailboxDashBoardController.dispatchState(Right(success)); - - if (currentContext != null && currentOverlayContext != null) { - _appToast.showToastWithIcon( - currentOverlayContext!, - widthToast: _responsiveUtils.isDesktop(currentContext!) ? 360 : null, - message: AppLocalizations.of(currentContext!).toast_message_empty_trash_folder_success, - icon: _imagePaths.icDeleteToast); - } - - refreshAllEmail(); - } - - void selectQuickSearchFilter(QuickSearchFilter filter) { - mailboxDashBoardController.selectQuickSearchFilter( - quickSearchFilter: filter, - ); - _searchEmail(); - } - - void openPopupReceiveTimeQuickSearchFilter( - BuildContext context, - RelativeRect position, - List entries) { - openPopupMenuAction(context, position, entries); - } - - void selectReceiveTimeQuickSearchFilter(EmailReceiveTimeType? emailReceiveTimeType) { - popBack(); - - if (emailReceiveTimeType != null) { - searchController.updateFilterEmail(emailReceiveTimeType: emailReceiveTimeType); - } else { - searchController.updateFilterEmail(emailReceiveTimeType: EmailReceiveTimeType.allTime); - } - searchController.setEmailReceiveTimeType(emailReceiveTimeType); - searchController.updateFilterEmail(); - if(searchQuery == null){ - searchController.updateFilterEmail(text: SearchQuery.initial()); - } - _searchEmail(); - } + bool get isMailboxTrash => mailboxDashBoardController.selectedMailbox.value?.isTrash == true; void openMailboxLeftMenu() { mailboxDashBoardController.openMailboxMenuDrawer(); } - void editEmail(PresentationEmail presentationEmail) { - final arguments = ComposerArguments( - emailActionType: EmailActionType.edit, - presentationEmail: presentationEmail, - mailboxRole: mailboxDashBoardController.selectedMailbox.value?.role); - - mailboxDashBoardController.goToComposer(arguments); - } - void goToSearchView() { SearchEmailBindings().dependencies(); mailboxDashBoardController.dispatchRoute(DashboardRoutes.searchEmail);