From 00324d4c56076077b4f99eab8f5f15a5e12a785e Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 30 Oct 2025 15:50:19 +0700 Subject: [PATCH] TF-1715 Load emails in favorite folder with filters --- .../email_action_reactor.dart | 3 +-- .../mailbox/presentation/base_mailbox_view.dart | 13 +++++++++++++ .../presentation/mixin/mailbox_widget_mixin.dart | 7 +++++++ .../widgets/label_mailbox_item_widget.dart | 4 +++- .../widgets/mailbox_item_widget.dart | 10 +++++++++- .../controller/mailbox_dashboard_controller.dart | 2 +- .../handle_action_type_for_email_selection.dart | 4 ++-- .../move_emails_to_mailbox_extension.dart | 4 ++-- .../presentation/mailbox_dashboard_view_web.dart | 3 ++- .../model/search/search_email_filter.dart | 16 ++++++++++++++-- ...ntext_menu_filter_email_action_extension.dart | 4 ++-- ...dle_pull_to_refresh_list_email_extension.dart | 4 ++-- .../handle_select_message_filter_extension.dart | 4 ++-- .../thread/presentation/thread_controller.dart | 16 ++++++++-------- model/lib/extensions/mailbox_id_extension.dart | 4 ---- .../presentation_mailbox_extension.dart | 2 ++ model/lib/mailbox/presentation_mailbox.dart | 3 ++- 17 files changed, 72 insertions(+), 31 deletions(-) diff --git a/lib/features/email/presentation/utils/email_action_reactor/email_action_reactor.dart b/lib/features/email/presentation/utils/email_action_reactor/email_action_reactor.dart index beb3f1cb0..9a23d84e6 100644 --- a/lib/features/email/presentation/utils/email_action_reactor/email_action_reactor.dart +++ b/lib/features/email/presentation/utils/email_action_reactor/email_action_reactor.dart @@ -26,7 +26,6 @@ import 'package:model/email/presentation_email.dart'; import 'package:model/email/read_actions.dart'; import 'package:model/extensions/email_address_extension.dart'; import 'package:model/extensions/list_email_address_extension.dart'; -import 'package:model/extensions/mailbox_id_extension.dart'; import 'package:model/extensions/presentation_email_extension.dart'; import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; @@ -716,7 +715,7 @@ class EmailActionReactor { }) { if (selectedMailbox == null || isSearchEmailRunning || - selectedMailbox.id.isFavoriteMailboxId == true) { + selectedMailbox.isFavorite == true) { return presentationEmail.findMailboxContain(mapMailbox); } diff --git a/lib/features/mailbox/presentation/base_mailbox_view.dart b/lib/features/mailbox/presentation/base_mailbox_view.dart index 117789b74..d3427c569 100644 --- a/lib/features/mailbox/presentation/base_mailbox_view.dart +++ b/lib/features/mailbox/presentation/base_mailbox_view.dart @@ -4,6 +4,7 @@ import 'package:core/presentation/views/list/tree_view.dart'; import 'package:core/utils/platform_info.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/extensions/session_extension.dart'; import 'package:model/mailbox/expand_mode.dart'; import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart'; @@ -196,6 +197,7 @@ abstract class BaseMailboxView extends GetWidget .mailboxDashBoardController .selectedMailbox .value, + isHighlighted: isFolderHighlighted(mailboxNode), onOpenMailboxFolderClick: (mailboxNode) => mailboxNode != null ? controller.openMailbox(context, mailboxNode.item) @@ -240,6 +242,17 @@ abstract class BaseMailboxView extends GetWidget }).toList(); } + bool get isSearchByStarredOnly { + final searchController = + controller.mailboxDashBoardController.searchController; + + return searchController.isSearchEmailRunning && + searchController.searchEmailFilter.value.isOnlyStarredApplied; + } + + bool isFolderHighlighted(MailboxNode mailboxNode) => + mailboxNode.item.isFavorite && isSearchByStarredOnly; + Widget buildListMailbox(BuildContext context) { final isDesktop = controller.responsiveUtils.isDesktop(context); diff --git a/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart b/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart index 842eb7d06..97962bd6c 100644 --- a/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart +++ b/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart @@ -21,6 +21,13 @@ mixin MailboxWidgetMixin { bool spamReportEnabled, bool deletedMessageVaultSupported ) { + if (mailbox.isFavorite) { + return [ + if (PlatformInfo.isWeb) + MailboxActions.openInNewTab, + ]; + } + return [ if (PlatformInfo.isWeb) MailboxActions.openInNewTab, diff --git a/lib/features/mailbox/presentation/widgets/label_mailbox_item_widget.dart b/lib/features/mailbox/presentation/widgets/label_mailbox_item_widget.dart index 24279e675..411c151da 100644 --- a/lib/features/mailbox/presentation/widgets/label_mailbox_item_widget.dart +++ b/lib/features/mailbox/presentation/widgets/label_mailbox_item_widget.dart @@ -25,6 +25,7 @@ class LabelMailboxItemWidget extends StatefulWidget { final bool isItemHovered; final bool isSelected; final bool isSelectedFolderInModal; + final bool isHighlighted; final TextStyle? textStyle; final OnClickOpenMenuMailboxNodeAction? onMenuActionClick; final OnEmptyMailboxActionCallback? onEmptyMailboxActionCallback; @@ -38,6 +39,7 @@ class LabelMailboxItemWidget extends StatefulWidget { this.isItemHovered = false, this.isSelected = false, this.isSelectedFolderInModal = false, + this.isHighlighted = false, this.textStyle, this.onMenuActionClick, this.onEmptyMailboxActionCallback, @@ -218,7 +220,7 @@ class _LabelMailboxItemWidgetState extends State { bool _showMoreButton(BuildContext context) => PlatformInfo.isWeb; TextStyle get _displayNameTextStyle { - if (widget.isSelected) { + if (widget.isSelected || widget.isHighlighted) { return ThemeUtils.textStyleInter700( color: _responsiveUtils.isDesktop(context) ? null : AppColor.iconFolder, fontSize: 14, diff --git a/lib/features/mailbox/presentation/widgets/mailbox_item_widget.dart b/lib/features/mailbox/presentation/widgets/mailbox_item_widget.dart index e9c52bdf2..985b6b1f4 100644 --- a/lib/features/mailbox/presentation/widgets/mailbox_item_widget.dart +++ b/lib/features/mailbox/presentation/widgets/mailbox_item_widget.dart @@ -30,6 +30,7 @@ class MailboxItemWidget extends StatefulWidget { final Color? iconColor; final double? itemHeight; final String? iconSelected; + final bool isHighlighted; final OnClickExpandMailboxNodeAction? onExpandFolderActionClick; final OnClickOpenMailboxNodeAction? onOpenMailboxFolderClick; @@ -43,6 +44,7 @@ class MailboxItemWidget extends StatefulWidget { super.key, required this.mailboxNode, this.mailboxDisplayed = MailboxDisplayed.mailbox, + this.isHighlighted = false, this.mailboxNodeSelected, this.mailboxActions, this.mailboxIdAlreadySelected, @@ -116,6 +118,7 @@ class _MailboxItemWidgetState extends State { mailboxNode: widget.mailboxNode, isItemHovered: _isItemHovered, isSelected: _isSelected, + isHighlighted: widget.isHighlighted, textStyle: widget.textStyle, onMenuActionClick: widget.onMenuActionClick, onEmptyMailboxActionCallback: widget.onEmptyMailboxActionCallback, @@ -174,6 +177,7 @@ class _MailboxItemWidgetState extends State { mailboxNode: widget.mailboxNode, isItemHovered: _isItemHovered, isSelected: _isSelected, + isHighlighted: widget.isHighlighted, textStyle: widget.textStyle, onMenuActionClick: widget.onMenuActionClick, onEmptyMailboxActionCallback: widget.onEmptyMailboxActionCallback, @@ -224,6 +228,7 @@ class _MailboxItemWidgetState extends State { mailboxNode: widget.mailboxNode, isItemHovered: _isItemHovered, isSelected: _isSelected, + isHighlighted: widget.isHighlighted, textStyle: widget.textStyle, onMenuActionClick: widget.onMenuActionClick, onEmptyMailboxActionCallback: widget.onEmptyMailboxActionCallback, @@ -273,6 +278,7 @@ class _MailboxItemWidgetState extends State { mailboxNode: widget.mailboxNode, showTrailing: false, isSelected: _isSelected, + isHighlighted: widget.isHighlighted, isItemHovered: _isItemHovered, textStyle: widget.textStyle, isSelectedFolderInModal: isSelectedFolderInModal, @@ -306,7 +312,9 @@ class _MailboxItemWidgetState extends State { Color get backgroundColorItem { if (widget.mailboxDisplayed == MailboxDisplayed.mailbox) { - return _isSelected ? AppColor.blue100 : Colors.transparent; + return _isSelected || widget.isHighlighted + ? AppColor.blue100 + : Colors.transparent; } return Colors.white; } diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index 595e4a30f..282678b6f 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -1348,7 +1348,7 @@ class MailboxDashBoardController extends ReloadableController .map((e) => MapEntry(e.id!, e.hasRead)) ); if (searchController.isSearchEmailRunning || - selectedMailbox.value?.id.isFavoriteMailboxId == true) { + selectedMailbox.value?.isFavorite == true) { final Map> mapListEmailSelectedByMailBoxId = {}; for (var element in listEmails) { final mailbox = element.findMailboxContain(mapMailboxById); diff --git a/lib/features/mailbox_dashboard/presentation/extensions/handle_action_type_for_email_selection.dart b/lib/features/mailbox_dashboard/presentation/extensions/handle_action_type_for_email_selection.dart index 96979f099..29799deb8 100644 --- a/lib/features/mailbox_dashboard/presentation/extensions/handle_action_type_for_email_selection.dart +++ b/lib/features/mailbox_dashboard/presentation/extensions/handle_action_type_for_email_selection.dart @@ -5,8 +5,8 @@ import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/email/email_action_type.dart'; import 'package:model/email/presentation_email.dart'; import 'package:model/extensions/list_presentation_email_extension.dart'; -import 'package:model/extensions/mailbox_id_extension.dart'; import 'package:model/extensions/presentation_email_extension.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.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'; @@ -50,7 +50,7 @@ extension HandleActionTypeForEmailSelection on MailboxDashBoardController { final mapEmailIdsByMailboxId = >{}; if (searchController.isSearchEmailRunning || - selectedMailbox.value?.id.isFavoriteMailboxId == true) { + selectedMailbox.value?.isFavorite == true) { for (final email in emails) { final mailboxId = email.firstMailboxIdAvailable; final emailId = email.id; diff --git a/lib/features/mailbox_dashboard/presentation/extensions/move_emails_to_mailbox_extension.dart b/lib/features/mailbox_dashboard/presentation/extensions/move_emails_to_mailbox_extension.dart index 65a401859..6c37dc568 100644 --- a/lib/features/mailbox_dashboard/presentation/extensions/move_emails_to_mailbox_extension.dart +++ b/lib/features/mailbox_dashboard/presentation/extensions/move_emails_to_mailbox_extension.dart @@ -2,7 +2,7 @@ import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/email/presentation_email.dart'; -import 'package:model/extensions/mailbox_id_extension.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; extension MoveEmailsToMailboxExtension on MailboxDashBoardController { @@ -11,7 +11,7 @@ extension MoveEmailsToMailboxExtension on MailboxDashBoardController { required MailboxId destinationMailboxId, }) { if (destinationMailboxId == selectedMailbox.value?.id || - selectedMailbox.value?.id.isFavoriteMailboxId == true) { + selectedMailbox.value?.isFavorite == true) { return; } diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart index 77a2fb662..d0fd08b4d 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart @@ -545,7 +545,8 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { if (!controller.searchController.isSearchEmailRunning) FilterMessageOption.attachments, FilterMessageOption.unread, - FilterMessageOption.starred, + if (controller.selectedMailbox.value?.isFavorite != true) + FilterMessageOption.starred, ].map((filterOption) { return PopupMenuItem( padding: EdgeInsets.zero, diff --git a/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart b/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart index 01fa2b4fd..a04b10c11 100644 --- a/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart +++ b/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart @@ -198,8 +198,8 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin { to.isNotEmpty || text?.value.trim().isNotEmpty == true || subject?.trim().isNotEmpty == true || - hasKeyword.isNotEmpty == true || - notKeyword.isNotEmpty == true || + hasKeyword.isNotEmpty || + notKeyword.isNotEmpty || emailReceiveTimeType != EmailReceiveTimeType.allTime || sortOrderType != SearchEmailFilter.defaultSortOrder || (mailbox != null && mailbox?.id != PresentationMailbox.unifiedMailbox.id) || @@ -208,6 +208,18 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin { bool get isContainFlagged => hasKeyword.contains(KeyWordIdentifier.emailFlagged.value); + bool get isOnlyStarredApplied => from.isEmpty && + to.isEmpty && + text?.value.trim().isNotEmpty != true && + subject?.trim().isNotEmpty != true && + hasKeyword.firstOrNull == KeyWordIdentifier.emailFlagged.value && + notKeyword.isEmpty && + emailReceiveTimeType == EmailReceiveTimeType.allTime && + sortOrderType == SearchEmailFilter.defaultSortOrder && + (mailbox == null || mailbox?.id == PresentationMailbox.unifiedMailbox.id) && + !hasAttachment && + !unread; + @override List get props => [ from, 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 2d10261ed..e23603828 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,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:model/extensions/mailbox_id_extension.dart'; +import 'package:model/extensions/presentation_mailbox_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'; @@ -16,7 +16,7 @@ extension HandleOpenContextMenuFilterEmailActionExtension on ThreadController { final popupMenuItems = [ FilterMessageOption.attachments, FilterMessageOption.unread, - if (selectedMailboxId?.isFavoriteMailboxId != true) + if (selectedMailbox?.isFavorite != true) FilterMessageOption.starred, ].map((filterOption) { return PopupMenuItem( 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 4dd46c9d2..2612f5fbf 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,7 +1,7 @@ import 'package:core/utils/app_logger.dart'; import 'package:dartz/dartz.dart'; -import 'package:model/extensions/mailbox_id_extension.dart'; +import 'package:model/extensions/presentation_mailbox_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'; @@ -49,7 +49,7 @@ extension HandlePullToRefreshListEmailExtension on ThreadController { accountId, ), getLatestChanges: true, - useCache: selectedMailboxId?.isFavoriteMailboxId != true, + useCache: selectedMailbox?.isFavorite != 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 a9e752db7..f7e5d0480 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,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:model/extensions/mailbox_id_extension.dart'; +import 'package:model/extensions/presentation_mailbox_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'; @@ -14,7 +14,7 @@ extension HandleSelectMessageFilterExtension on ThreadController { final contextMenuActions = [ FilterMessageOption.attachments, FilterMessageOption.unread, - if (selectedMailboxId?.isFavoriteMailboxId != true) + if (selectedMailbox?.isFavorite != true) FilterMessageOption.starred, ].map((filter) { return ContextItemFilterMessageOptionAction( diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 422f5aef2..fd5072d50 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?.isFavoriteMailboxId != true) { + selectedMailbox?.isFavorite != 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?.isFavoriteMailboxId != true) { + selectedMailbox?.isFavorite != true) { log('ThreadController::_refreshChangesAllEmailSuccess: RefreshedMailboxId = ${success.currentMailboxId?.asString} | SELECTED_MAILBOX_ID = ${selectedMailboxId?.asString} | SELECTED_MAILBOX_NAME = ${selectedMailbox?.name?.name}'); return; } @@ -591,7 +591,7 @@ class ThreadController extends BaseController with EmailActionController { _accountId!, ), getLatestChanges: getLatestChanges, - useCache: selectedMailboxId?.isFavoriteMailboxId != true, + useCache: selectedMailbox?.isFavorite != true, )); } else { consumeState(Stream.value(Left(GetAllEmailFailure(NotFoundSessionException())))); @@ -599,7 +599,7 @@ class ThreadController extends BaseController with EmailActionController { } EmailFilter getEmailFilterForLoadMailbox({PresentationEmail? oldestEmail}) { - if (selectedMailboxId?.isFavoriteMailboxId == true) { + if (selectedMailbox?.isFavorite == true) { return EmailFilter( filter: getFilterConditionForLoadMailbox(oldestEmail: oldestEmail), ); @@ -613,7 +613,7 @@ class ThreadController extends BaseController with EmailActionController { } Filter getFilterConditionForLoadMailbox({PresentationEmail? oldestEmail}) { - if (selectedMailboxId?.isFavoriteMailboxId == true) { + if (selectedMailbox?.isFavorite == true) { switch (mailboxDashBoardController.filterMessageOption.value) { case FilterMessageOption.unread: return EmailFilterCondition( @@ -711,7 +711,7 @@ class ThreadController extends BaseController with EmailActionController { try { if (searchController.isSearchEmailRunning && PlatformInfo.isWeb) { await _refreshChangeSearchEmail(); - } else if (selectedMailboxId?.isFavoriteMailboxId == true) { + } else if (selectedMailbox?.isFavorite == true) { await _refreshChangeListEmailsInFavoriteFolder(); } else { await _refreshChangeListEmail(); @@ -868,14 +868,14 @@ class ThreadController extends BaseController with EmailActionController { filter: getFilterConditionForLoadMailbox(oldestEmail: oldestEmail), properties: EmailUtils.getPropertiesForEmailGetMethod(_session!, _accountId!), lastEmailId: oldestEmail?.id, - useCache: selectedMailboxId?.isFavoriteMailboxId != true, + useCache: selectedMailbox?.isFavorite != true, ) )); } } bool _validatePresentationEmail(PresentationEmail email) { - return (_belongToCurrentMailboxId(email) || selectedMailboxId?.isFavoriteMailboxId == true) + return (_belongToCurrentMailboxId(email) || selectedMailbox?.isFavorite == true) && _notDuplicatedInCurrentList(email); } diff --git a/model/lib/extensions/mailbox_id_extension.dart b/model/lib/extensions/mailbox_id_extension.dart index 32249945b..0b701caf5 100644 --- a/model/lib/extensions/mailbox_id_extension.dart +++ b/model/lib/extensions/mailbox_id_extension.dart @@ -3,7 +3,6 @@ import 'package:jmap_dart_client/jmap/core/reference_id.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/extensions/keyword_identifier_extension.dart'; -import 'package:model/mailbox/presentation_mailbox.dart'; extension MailboxIdExtension on MailboxId { String generatePath() { @@ -32,7 +31,4 @@ extension MailboxIdExtension on MailboxId { } String get asString => id.value; - - bool get isFavoriteMailboxId => - this == PresentationMailbox.favoriteFolder.id; } \ No newline at end of file diff --git a/model/lib/extensions/presentation_mailbox_extension.dart b/model/lib/extensions/presentation_mailbox_extension.dart index ea4aaab76..52ea5e2c3 100644 --- a/model/lib/extensions/presentation_mailbox_extension.dart +++ b/model/lib/extensions/presentation_mailbox_extension.dart @@ -34,6 +34,8 @@ extension PresentationMailboxExtension on PresentationMailbox { bool get isSpam => role == PresentationMailbox.roleSpam || role == PresentationMailbox.roleJunk; + bool get isFavorite => role == PresentationMailbox.roleFavorite; + bool get isTrash => role == PresentationMailbox.roleTrash; bool get isDrafts => role == PresentationMailbox.roleDrafts; diff --git a/model/lib/mailbox/presentation_mailbox.dart b/model/lib/mailbox/presentation_mailbox.dart index 0d486949b..f779a401b 100644 --- a/model/lib/mailbox/presentation_mailbox.dart +++ b/model/lib/mailbox/presentation_mailbox.dart @@ -24,7 +24,7 @@ class PresentationMailbox with EquatableMixin { static final PresentationMailbox favoriteFolder = PresentationMailbox( MailboxId(Id(favoriteRole)), name: MailboxName('Starred'), - role: Role(favoriteRole), + role: roleFavorite, ); static final roleInbox = Role(inboxRole); @@ -37,6 +37,7 @@ class PresentationMailbox with EquatableMixin { static final roleJunk = Role(junkRole); static final roleArchive = Role(archiveRole); static final roleRecovered = Role(recoveredRole); + static final roleFavorite = Role(favoriteRole); final MailboxId id; final MailboxName? name;