diff --git a/lib/features/thread/domain/usecases/clean_and_get_emails_in_mailbox_interactor.dart b/lib/features/thread/domain/usecases/clean_and_get_emails_in_mailbox_interactor.dart index b680d7341..70c40be2f 100644 --- a/lib/features/thread/domain/usecases/clean_and_get_emails_in_mailbox_interactor.dart +++ b/lib/features/thread/domain/usecases/clean_and_get_emails_in_mailbox_interactor.dart @@ -30,6 +30,7 @@ class CleanAndGetEmailsInMailboxInteractor { Properties? propertiesCreated, Properties? propertiesUpdated, bool getLatestChanges = true, + bool useCache = true, } ) async* { try { @@ -46,6 +47,7 @@ class CleanAndGetEmailsInMailboxInteractor { propertiesCreated: propertiesCreated, propertiesUpdated: propertiesUpdated, getLatestChanges: getLatestChanges, + useCache: useCache, ); } catch (e) { yield Left(CleanAndGetAllEmailFailure(e)); diff --git a/lib/features/thread/presentation/extensions/handle_open_context_menu_filter_email_action_extension.dart b/lib/features/thread/presentation/extensions/handle_open_context_menu_filter_email_action_extension.dart index 4646470c1..2d10261ed 100644 --- a/lib/features/thread/presentation/extensions/handle_open_context_menu_filter_email_action_extension.dart +++ b/lib/features/thread/presentation/extensions/handle_open_context_menu_filter_email_action_extension.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:model/extensions/mailbox_id_extension.dart'; import 'package:tmail_ui_user/features/base/widget/popup_menu/popup_menu_item_action_widget.dart'; import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart'; import 'package:tmail_ui_user/features/thread/presentation/model/popup_menu_item_filter_message_action.dart'; @@ -15,7 +16,8 @@ extension HandleOpenContextMenuFilterEmailActionExtension on ThreadController { final popupMenuItems = [ FilterMessageOption.attachments, FilterMessageOption.unread, - FilterMessageOption.starred, + if (selectedMailboxId?.isFavoriteMailboxId != true) + FilterMessageOption.starred, ].map((filterOption) { return PopupMenuItem( padding: EdgeInsets.zero, diff --git a/lib/features/thread/presentation/extensions/handle_pull_to_refresh_list_email_extension.dart b/lib/features/thread/presentation/extensions/handle_pull_to_refresh_list_email_extension.dart index 9615e263d..4dd46c9d2 100644 --- a/lib/features/thread/presentation/extensions/handle_pull_to_refresh_list_email_extension.dart +++ b/lib/features/thread/presentation/extensions/handle_pull_to_refresh_list_email_extension.dart @@ -1,11 +1,11 @@ import 'package:core/utils/app_logger.dart'; import 'package:dartz/dartz.dart'; +import 'package:model/extensions/mailbox_id_extension.dart'; import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart'; import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart'; import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart'; -import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart'; import 'package:tmail_ui_user/features/thread/domain/state/clean_and_get_all_email_state.dart'; import 'package:tmail_ui_user/features/thread/domain/state/get_all_email_state.dart'; import 'package:tmail_ui_user/features/thread/presentation/model/loading_more_status.dart'; @@ -42,17 +42,14 @@ extension HandlePullToRefreshListEmailExtension on ThreadController { accountId, limit: ThreadConstants.defaultLimit, sort: EmailSortOrderType.mostRecent.getSortOrder().toNullable(), - emailFilter: EmailFilter( - filter: getFilterCondition(mailboxIdSelected: selectedMailboxId), - filterOption: mailboxDashBoardController.filterMessageOption.value, - mailboxId: selectedMailboxId, - ), + emailFilter: getEmailFilterForLoadMailbox(), propertiesCreated: EmailUtils.getPropertiesForEmailGetMethod(session, accountId), propertiesUpdated: EmailUtils.getPropertiesForEmailChangeMethod( session, accountId, ), getLatestChanges: true, + useCache: selectedMailboxId?.isFavoriteMailboxId != true, )); } } \ No newline at end of file diff --git a/lib/features/thread/presentation/extensions/handle_select_message_filter_extension.dart b/lib/features/thread/presentation/extensions/handle_select_message_filter_extension.dart index 4eaf79532..a9e752db7 100644 --- a/lib/features/thread/presentation/extensions/handle_select_message_filter_extension.dart +++ b/lib/features/thread/presentation/extensions/handle_select_message_filter_extension.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:model/extensions/mailbox_id_extension.dart'; import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart'; import 'package:tmail_ui_user/features/thread/presentation/model/context_item_filter_message_option_action.dart'; import 'package:tmail_ui_user/features/thread/presentation/thread_controller.dart'; @@ -13,7 +14,8 @@ extension HandleSelectMessageFilterExtension on ThreadController { final contextMenuActions = [ FilterMessageOption.attachments, FilterMessageOption.unread, - FilterMessageOption.starred, + if (selectedMailboxId?.isFavoriteMailboxId != true) + FilterMessageOption.starred, ].map((filter) { return ContextItemFilterMessageOptionAction( filter, diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 24ecd0c0e..d2e4f5a18 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -507,7 +507,7 @@ class ThreadController extends BaseController with EmailActionController { mailboxDashBoardController.updateRefreshAllEmailState(Right(RefreshAllEmailSuccess())); if (success.currentMailboxId != selectedMailboxId && - selectedMailboxId?.isNotFavoriteMailboxId == true) { + selectedMailboxId?.isFavoriteMailboxId != true) { log('ThreadController::_getAllEmailSuccess: GetAllForMailboxId = ${success.currentMailboxId?.asString} | SELECTED_MAILBOX_ID = ${selectedMailboxId?.asString} | SELECTED_MAILBOX_NAME = ${selectedMailbox?.name?.name}'); return; } @@ -548,7 +548,7 @@ class ThreadController extends BaseController with EmailActionController { void _refreshChangesAllEmailSuccess(RefreshChangesAllEmailSuccess success) { if (success.currentMailboxId != selectedMailboxId && - selectedMailboxId?.isNotFavoriteMailboxId == true) { + selectedMailboxId?.isFavoriteMailboxId != true) { log('ThreadController::_refreshChangesAllEmailSuccess: RefreshedMailboxId = ${success.currentMailboxId?.asString} | SELECTED_MAILBOX_ID = ${selectedMailboxId?.asString} | SELECTED_MAILBOX_NAME = ${selectedMailbox?.name?.name}'); return; } @@ -584,41 +584,55 @@ class ThreadController extends BaseController with EmailActionController { _accountId!, limit: ThreadConstants.defaultLimit, sort: EmailSortOrderType.mostRecent.getSortOrder().toNullable(), - emailFilter: _getEmailFilterForLoadMailbox(), + emailFilter: getEmailFilterForLoadMailbox(), propertiesCreated: EmailUtils.getPropertiesForEmailGetMethod(_session!, _accountId!), propertiesUpdated: EmailUtils.getPropertiesForEmailChangeMethod( _session!, _accountId!, ), getLatestChanges: getLatestChanges, - useCache: selectedMailboxId?.isNotFavoriteMailboxId == true, + useCache: selectedMailboxId?.isFavoriteMailboxId != true, )); } else { consumeState(Stream.value(Left(GetAllEmailFailure(NotFoundSessionException())))); } } - EmailFilter _getEmailFilterForLoadMailbox({PresentationEmail? oldestEmail}) { - if (selectedMailboxId?.isNotFavoriteMailboxId != true) { + EmailFilter getEmailFilterForLoadMailbox({PresentationEmail? oldestEmail}) { + if (selectedMailboxId?.isFavoriteMailboxId == true) { return EmailFilter( - filter: _getFilterConditionForLoadMailbox(oldestEmail: oldestEmail), - filterOption: mailboxDashBoardController.filterMessageOption.value, + filter: getFilterConditionForLoadMailbox(oldestEmail: oldestEmail), ); } else { return EmailFilter( - filter: _getFilterConditionForLoadMailbox(oldestEmail: oldestEmail), + filter: getFilterConditionForLoadMailbox(oldestEmail: oldestEmail), filterOption: mailboxDashBoardController.filterMessageOption.value, mailboxId: selectedMailboxId, ); } } - Filter _getFilterConditionForLoadMailbox({PresentationEmail? oldestEmail}) { - if (selectedMailboxId?.isNotFavoriteMailboxId != true) { - return EmailFilterCondition( - hasKeyword: KeyWordIdentifier.emailFlagged.value, - before: oldestEmail?.receivedAt, - ); + Filter getFilterConditionForLoadMailbox({PresentationEmail? oldestEmail}) { + if (selectedMailboxId?.isFavoriteMailboxId == true) { + switch (mailboxDashBoardController.filterMessageOption.value) { + case FilterMessageOption.unread: + return EmailFilterCondition( + notKeyword: KeyWordIdentifier.emailSeen.value, + hasKeyword: KeyWordIdentifier.emailFlagged.value, + before: oldestEmail?.receivedAt, + ); + case FilterMessageOption.attachments: + return EmailFilterCondition( + hasAttachment: true, + hasKeyword: KeyWordIdentifier.emailFlagged.value, + before: oldestEmail?.receivedAt, + ); + default: + return EmailFilterCondition( + hasKeyword: KeyWordIdentifier.emailFlagged.value, + before: oldestEmail?.receivedAt, + ); + } } else { return getFilterCondition( mailboxIdSelected: selectedMailboxId, @@ -772,7 +786,7 @@ class ThreadController extends BaseController with EmailActionController { _session!, _accountId!, ), - emailFilter: _getEmailFilterForLoadMailbox(), + emailFilter: getEmailFilterForLoadMailbox(), ).last; refreshState.fold( @@ -815,17 +829,17 @@ class ThreadController extends BaseController with EmailActionController { limit: ThreadConstants.defaultLimit, sort: EmailSortOrderType.mostRecent.getSortOrder().toNullable(), filterOption: mailboxDashBoardController.filterMessageOption.value, - filter: _getFilterConditionForLoadMailbox(oldestEmail: oldestEmail), + filter: getFilterConditionForLoadMailbox(oldestEmail: oldestEmail), properties: EmailUtils.getPropertiesForEmailGetMethod(_session!, _accountId!), lastEmailId: oldestEmail?.id, - useCache: selectedMailboxId?.isNotFavoriteMailboxId == true, + useCache: selectedMailboxId?.isFavoriteMailboxId != true, ) )); } } bool _validatePresentationEmail(PresentationEmail email) { - return (_belongToCurrentMailboxId(email) || selectedMailboxId?.isNotFavoriteMailboxId != true) + return (_belongToCurrentMailboxId(email) || selectedMailboxId?.isFavoriteMailboxId == true) && _notDuplicatedInCurrentList(email); } diff --git a/model/lib/extensions/mailbox_id_extension.dart b/model/lib/extensions/mailbox_id_extension.dart index d9924a98e..32249945b 100644 --- a/model/lib/extensions/mailbox_id_extension.dart +++ b/model/lib/extensions/mailbox_id_extension.dart @@ -33,6 +33,6 @@ extension MailboxIdExtension on MailboxId { String get asString => id.value; - bool get isNotFavoriteMailboxId => - this != PresentationMailbox.favoriteFolder.id; + bool get isFavoriteMailboxId => + this == PresentationMailbox.favoriteFolder.id; } \ No newline at end of file