TF-1715 Load emails in favorite folder with filters
This commit is contained in:
+1
-2
@@ -26,7 +26,6 @@ import 'package:model/email/presentation_email.dart';
|
|||||||
import 'package:model/email/read_actions.dart';
|
import 'package:model/email/read_actions.dart';
|
||||||
import 'package:model/extensions/email_address_extension.dart';
|
import 'package:model/extensions/email_address_extension.dart';
|
||||||
import 'package:model/extensions/list_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_email_extension.dart';
|
||||||
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
||||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||||
@@ -716,7 +715,7 @@ class EmailActionReactor {
|
|||||||
}) {
|
}) {
|
||||||
if (selectedMailbox == null ||
|
if (selectedMailbox == null ||
|
||||||
isSearchEmailRunning ||
|
isSearchEmailRunning ||
|
||||||
selectedMailbox.id.isFavoriteMailboxId == true) {
|
selectedMailbox.isFavorite == true) {
|
||||||
return presentationEmail.findMailboxContain(mapMailbox);
|
return presentationEmail.findMailboxContain(mapMailbox);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import 'package:core/presentation/views/list/tree_view.dart';
|
|||||||
import 'package:core/utils/platform_info.dart';
|
import 'package:core/utils/platform_info.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
||||||
import 'package:model/extensions/session_extension.dart';
|
import 'package:model/extensions/session_extension.dart';
|
||||||
import 'package:model/mailbox/expand_mode.dart';
|
import 'package:model/mailbox/expand_mode.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
||||||
@@ -196,6 +197,7 @@ abstract class BaseMailboxView extends GetWidget<MailboxController>
|
|||||||
.mailboxDashBoardController
|
.mailboxDashBoardController
|
||||||
.selectedMailbox
|
.selectedMailbox
|
||||||
.value,
|
.value,
|
||||||
|
isHighlighted: isFolderHighlighted(mailboxNode),
|
||||||
onOpenMailboxFolderClick: (mailboxNode) =>
|
onOpenMailboxFolderClick: (mailboxNode) =>
|
||||||
mailboxNode != null
|
mailboxNode != null
|
||||||
? controller.openMailbox(context, mailboxNode.item)
|
? controller.openMailbox(context, mailboxNode.item)
|
||||||
@@ -240,6 +242,17 @@ abstract class BaseMailboxView extends GetWidget<MailboxController>
|
|||||||
}).toList();
|
}).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) {
|
Widget buildListMailbox(BuildContext context) {
|
||||||
final isDesktop = controller.responsiveUtils.isDesktop(context);
|
final isDesktop = controller.responsiveUtils.isDesktop(context);
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,13 @@ mixin MailboxWidgetMixin {
|
|||||||
bool spamReportEnabled,
|
bool spamReportEnabled,
|
||||||
bool deletedMessageVaultSupported
|
bool deletedMessageVaultSupported
|
||||||
) {
|
) {
|
||||||
|
if (mailbox.isFavorite) {
|
||||||
|
return [
|
||||||
|
if (PlatformInfo.isWeb)
|
||||||
|
MailboxActions.openInNewTab,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
if (PlatformInfo.isWeb)
|
if (PlatformInfo.isWeb)
|
||||||
MailboxActions.openInNewTab,
|
MailboxActions.openInNewTab,
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ class LabelMailboxItemWidget extends StatefulWidget {
|
|||||||
final bool isItemHovered;
|
final bool isItemHovered;
|
||||||
final bool isSelected;
|
final bool isSelected;
|
||||||
final bool isSelectedFolderInModal;
|
final bool isSelectedFolderInModal;
|
||||||
|
final bool isHighlighted;
|
||||||
final TextStyle? textStyle;
|
final TextStyle? textStyle;
|
||||||
final OnClickOpenMenuMailboxNodeAction? onMenuActionClick;
|
final OnClickOpenMenuMailboxNodeAction? onMenuActionClick;
|
||||||
final OnEmptyMailboxActionCallback? onEmptyMailboxActionCallback;
|
final OnEmptyMailboxActionCallback? onEmptyMailboxActionCallback;
|
||||||
@@ -38,6 +39,7 @@ class LabelMailboxItemWidget extends StatefulWidget {
|
|||||||
this.isItemHovered = false,
|
this.isItemHovered = false,
|
||||||
this.isSelected = false,
|
this.isSelected = false,
|
||||||
this.isSelectedFolderInModal = false,
|
this.isSelectedFolderInModal = false,
|
||||||
|
this.isHighlighted = false,
|
||||||
this.textStyle,
|
this.textStyle,
|
||||||
this.onMenuActionClick,
|
this.onMenuActionClick,
|
||||||
this.onEmptyMailboxActionCallback,
|
this.onEmptyMailboxActionCallback,
|
||||||
@@ -218,7 +220,7 @@ class _LabelMailboxItemWidgetState extends State<LabelMailboxItemWidget> {
|
|||||||
bool _showMoreButton(BuildContext context) => PlatformInfo.isWeb;
|
bool _showMoreButton(BuildContext context) => PlatformInfo.isWeb;
|
||||||
|
|
||||||
TextStyle get _displayNameTextStyle {
|
TextStyle get _displayNameTextStyle {
|
||||||
if (widget.isSelected) {
|
if (widget.isSelected || widget.isHighlighted) {
|
||||||
return ThemeUtils.textStyleInter700(
|
return ThemeUtils.textStyleInter700(
|
||||||
color: _responsiveUtils.isDesktop(context) ? null : AppColor.iconFolder,
|
color: _responsiveUtils.isDesktop(context) ? null : AppColor.iconFolder,
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ class MailboxItemWidget extends StatefulWidget {
|
|||||||
final Color? iconColor;
|
final Color? iconColor;
|
||||||
final double? itemHeight;
|
final double? itemHeight;
|
||||||
final String? iconSelected;
|
final String? iconSelected;
|
||||||
|
final bool isHighlighted;
|
||||||
|
|
||||||
final OnClickExpandMailboxNodeAction? onExpandFolderActionClick;
|
final OnClickExpandMailboxNodeAction? onExpandFolderActionClick;
|
||||||
final OnClickOpenMailboxNodeAction? onOpenMailboxFolderClick;
|
final OnClickOpenMailboxNodeAction? onOpenMailboxFolderClick;
|
||||||
@@ -43,6 +44,7 @@ class MailboxItemWidget extends StatefulWidget {
|
|||||||
super.key,
|
super.key,
|
||||||
required this.mailboxNode,
|
required this.mailboxNode,
|
||||||
this.mailboxDisplayed = MailboxDisplayed.mailbox,
|
this.mailboxDisplayed = MailboxDisplayed.mailbox,
|
||||||
|
this.isHighlighted = false,
|
||||||
this.mailboxNodeSelected,
|
this.mailboxNodeSelected,
|
||||||
this.mailboxActions,
|
this.mailboxActions,
|
||||||
this.mailboxIdAlreadySelected,
|
this.mailboxIdAlreadySelected,
|
||||||
@@ -116,6 +118,7 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
|
|||||||
mailboxNode: widget.mailboxNode,
|
mailboxNode: widget.mailboxNode,
|
||||||
isItemHovered: _isItemHovered,
|
isItemHovered: _isItemHovered,
|
||||||
isSelected: _isSelected,
|
isSelected: _isSelected,
|
||||||
|
isHighlighted: widget.isHighlighted,
|
||||||
textStyle: widget.textStyle,
|
textStyle: widget.textStyle,
|
||||||
onMenuActionClick: widget.onMenuActionClick,
|
onMenuActionClick: widget.onMenuActionClick,
|
||||||
onEmptyMailboxActionCallback: widget.onEmptyMailboxActionCallback,
|
onEmptyMailboxActionCallback: widget.onEmptyMailboxActionCallback,
|
||||||
@@ -174,6 +177,7 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
|
|||||||
mailboxNode: widget.mailboxNode,
|
mailboxNode: widget.mailboxNode,
|
||||||
isItemHovered: _isItemHovered,
|
isItemHovered: _isItemHovered,
|
||||||
isSelected: _isSelected,
|
isSelected: _isSelected,
|
||||||
|
isHighlighted: widget.isHighlighted,
|
||||||
textStyle: widget.textStyle,
|
textStyle: widget.textStyle,
|
||||||
onMenuActionClick: widget.onMenuActionClick,
|
onMenuActionClick: widget.onMenuActionClick,
|
||||||
onEmptyMailboxActionCallback: widget.onEmptyMailboxActionCallback,
|
onEmptyMailboxActionCallback: widget.onEmptyMailboxActionCallback,
|
||||||
@@ -224,6 +228,7 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
|
|||||||
mailboxNode: widget.mailboxNode,
|
mailboxNode: widget.mailboxNode,
|
||||||
isItemHovered: _isItemHovered,
|
isItemHovered: _isItemHovered,
|
||||||
isSelected: _isSelected,
|
isSelected: _isSelected,
|
||||||
|
isHighlighted: widget.isHighlighted,
|
||||||
textStyle: widget.textStyle,
|
textStyle: widget.textStyle,
|
||||||
onMenuActionClick: widget.onMenuActionClick,
|
onMenuActionClick: widget.onMenuActionClick,
|
||||||
onEmptyMailboxActionCallback: widget.onEmptyMailboxActionCallback,
|
onEmptyMailboxActionCallback: widget.onEmptyMailboxActionCallback,
|
||||||
@@ -273,6 +278,7 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
|
|||||||
mailboxNode: widget.mailboxNode,
|
mailboxNode: widget.mailboxNode,
|
||||||
showTrailing: false,
|
showTrailing: false,
|
||||||
isSelected: _isSelected,
|
isSelected: _isSelected,
|
||||||
|
isHighlighted: widget.isHighlighted,
|
||||||
isItemHovered: _isItemHovered,
|
isItemHovered: _isItemHovered,
|
||||||
textStyle: widget.textStyle,
|
textStyle: widget.textStyle,
|
||||||
isSelectedFolderInModal: isSelectedFolderInModal,
|
isSelectedFolderInModal: isSelectedFolderInModal,
|
||||||
@@ -306,7 +312,9 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
|
|||||||
|
|
||||||
Color get backgroundColorItem {
|
Color get backgroundColorItem {
|
||||||
if (widget.mailboxDisplayed == MailboxDisplayed.mailbox) {
|
if (widget.mailboxDisplayed == MailboxDisplayed.mailbox) {
|
||||||
return _isSelected ? AppColor.blue100 : Colors.transparent;
|
return _isSelected || widget.isHighlighted
|
||||||
|
? AppColor.blue100
|
||||||
|
: Colors.transparent;
|
||||||
}
|
}
|
||||||
return Colors.white;
|
return Colors.white;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1348,7 +1348,7 @@ class MailboxDashBoardController extends ReloadableController
|
|||||||
.map((e) => MapEntry(e.id!, e.hasRead))
|
.map((e) => MapEntry(e.id!, e.hasRead))
|
||||||
);
|
);
|
||||||
if (searchController.isSearchEmailRunning ||
|
if (searchController.isSearchEmailRunning ||
|
||||||
selectedMailbox.value?.id.isFavoriteMailboxId == true) {
|
selectedMailbox.value?.isFavorite == true) {
|
||||||
final Map<MailboxId,List<EmailId>> mapListEmailSelectedByMailBoxId = {};
|
final Map<MailboxId,List<EmailId>> mapListEmailSelectedByMailBoxId = {};
|
||||||
for (var element in listEmails) {
|
for (var element in listEmails) {
|
||||||
final mailbox = element.findMailboxContain(mapMailboxById);
|
final mailbox = element.findMailboxContain(mapMailboxById);
|
||||||
|
|||||||
+2
-2
@@ -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/email_action_type.dart';
|
||||||
import 'package:model/email/presentation_email.dart';
|
import 'package:model/email/presentation_email.dart';
|
||||||
import 'package:model/extensions/list_presentation_email_extension.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_email_extension.dart';
|
||||||
|
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
||||||
import 'package:model/mailbox/presentation_mailbox.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_action.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.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 = <MailboxId, List<EmailId>>{};
|
final mapEmailIdsByMailboxId = <MailboxId, List<EmailId>>{};
|
||||||
|
|
||||||
if (searchController.isSearchEmailRunning ||
|
if (searchController.isSearchEmailRunning ||
|
||||||
selectedMailbox.value?.id.isFavoriteMailboxId == true) {
|
selectedMailbox.value?.isFavorite == true) {
|
||||||
for (final email in emails) {
|
for (final email in emails) {
|
||||||
final mailboxId = email.firstMailboxIdAvailable;
|
final mailboxId = email.firstMailboxIdAvailable;
|
||||||
final emailId = email.id;
|
final emailId = email.id;
|
||||||
|
|||||||
+2
-2
@@ -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/email/email.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
import 'package:model/email/presentation_email.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';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||||
|
|
||||||
extension MoveEmailsToMailboxExtension on MailboxDashBoardController {
|
extension MoveEmailsToMailboxExtension on MailboxDashBoardController {
|
||||||
@@ -11,7 +11,7 @@ extension MoveEmailsToMailboxExtension on MailboxDashBoardController {
|
|||||||
required MailboxId destinationMailboxId,
|
required MailboxId destinationMailboxId,
|
||||||
}) {
|
}) {
|
||||||
if (destinationMailboxId == selectedMailbox.value?.id ||
|
if (destinationMailboxId == selectedMailbox.value?.id ||
|
||||||
selectedMailbox.value?.id.isFavoriteMailboxId == true) {
|
selectedMailbox.value?.isFavorite == true) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -545,7 +545,8 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
if (!controller.searchController.isSearchEmailRunning)
|
if (!controller.searchController.isSearchEmailRunning)
|
||||||
FilterMessageOption.attachments,
|
FilterMessageOption.attachments,
|
||||||
FilterMessageOption.unread,
|
FilterMessageOption.unread,
|
||||||
FilterMessageOption.starred,
|
if (controller.selectedMailbox.value?.isFavorite != true)
|
||||||
|
FilterMessageOption.starred,
|
||||||
].map((filterOption) {
|
].map((filterOption) {
|
||||||
return PopupMenuItem(
|
return PopupMenuItem(
|
||||||
padding: EdgeInsets.zero,
|
padding: EdgeInsets.zero,
|
||||||
|
|||||||
@@ -198,8 +198,8 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
|||||||
to.isNotEmpty ||
|
to.isNotEmpty ||
|
||||||
text?.value.trim().isNotEmpty == true ||
|
text?.value.trim().isNotEmpty == true ||
|
||||||
subject?.trim().isNotEmpty == true ||
|
subject?.trim().isNotEmpty == true ||
|
||||||
hasKeyword.isNotEmpty == true ||
|
hasKeyword.isNotEmpty ||
|
||||||
notKeyword.isNotEmpty == true ||
|
notKeyword.isNotEmpty ||
|
||||||
emailReceiveTimeType != EmailReceiveTimeType.allTime ||
|
emailReceiveTimeType != EmailReceiveTimeType.allTime ||
|
||||||
sortOrderType != SearchEmailFilter.defaultSortOrder ||
|
sortOrderType != SearchEmailFilter.defaultSortOrder ||
|
||||||
(mailbox != null && mailbox?.id != PresentationMailbox.unifiedMailbox.id) ||
|
(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 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
|
@override
|
||||||
List<Object?> get props => [
|
List<Object?> get props => [
|
||||||
from,
|
from,
|
||||||
|
|||||||
+2
-2
@@ -1,5 +1,5 @@
|
|||||||
import 'package:flutter/material.dart';
|
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/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/domain/model/filter_message_option.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/model/popup_menu_item_filter_message_action.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 = [
|
final popupMenuItems = [
|
||||||
FilterMessageOption.attachments,
|
FilterMessageOption.attachments,
|
||||||
FilterMessageOption.unread,
|
FilterMessageOption.unread,
|
||||||
if (selectedMailboxId?.isFavoriteMailboxId != true)
|
if (selectedMailbox?.isFavorite != true)
|
||||||
FilterMessageOption.starred,
|
FilterMessageOption.starred,
|
||||||
].map((filterOption) {
|
].map((filterOption) {
|
||||||
return PopupMenuItem(
|
return PopupMenuItem(
|
||||||
|
|||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
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: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/email/presentation/utils/email_utils.dart';
|
||||||
import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.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/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||||
@@ -49,7 +49,7 @@ extension HandlePullToRefreshListEmailExtension on ThreadController {
|
|||||||
accountId,
|
accountId,
|
||||||
),
|
),
|
||||||
getLatestChanges: true,
|
getLatestChanges: true,
|
||||||
useCache: selectedMailboxId?.isFavoriteMailboxId != true,
|
useCache: selectedMailbox?.isFavorite != true,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+2
-2
@@ -1,5 +1,5 @@
|
|||||||
import 'package:flutter/material.dart';
|
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/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/model/context_item_filter_message_option_action.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/thread_controller.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/thread_controller.dart';
|
||||||
@@ -14,7 +14,7 @@ extension HandleSelectMessageFilterExtension on ThreadController {
|
|||||||
final contextMenuActions = [
|
final contextMenuActions = [
|
||||||
FilterMessageOption.attachments,
|
FilterMessageOption.attachments,
|
||||||
FilterMessageOption.unread,
|
FilterMessageOption.unread,
|
||||||
if (selectedMailboxId?.isFavoriteMailboxId != true)
|
if (selectedMailbox?.isFavorite != true)
|
||||||
FilterMessageOption.starred,
|
FilterMessageOption.starred,
|
||||||
].map((filter) {
|
].map((filter) {
|
||||||
return ContextItemFilterMessageOptionAction(
|
return ContextItemFilterMessageOptionAction(
|
||||||
|
|||||||
@@ -507,7 +507,7 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
mailboxDashBoardController.updateRefreshAllEmailState(Right(RefreshAllEmailSuccess()));
|
mailboxDashBoardController.updateRefreshAllEmailState(Right(RefreshAllEmailSuccess()));
|
||||||
|
|
||||||
if (success.currentMailboxId != selectedMailboxId &&
|
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}');
|
log('ThreadController::_getAllEmailSuccess: GetAllForMailboxId = ${success.currentMailboxId?.asString} | SELECTED_MAILBOX_ID = ${selectedMailboxId?.asString} | SELECTED_MAILBOX_NAME = ${selectedMailbox?.name?.name}');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -548,7 +548,7 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
|
|
||||||
void _refreshChangesAllEmailSuccess(RefreshChangesAllEmailSuccess success) {
|
void _refreshChangesAllEmailSuccess(RefreshChangesAllEmailSuccess success) {
|
||||||
if (success.currentMailboxId != selectedMailboxId &&
|
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}');
|
log('ThreadController::_refreshChangesAllEmailSuccess: RefreshedMailboxId = ${success.currentMailboxId?.asString} | SELECTED_MAILBOX_ID = ${selectedMailboxId?.asString} | SELECTED_MAILBOX_NAME = ${selectedMailbox?.name?.name}');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -591,7 +591,7 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
_accountId!,
|
_accountId!,
|
||||||
),
|
),
|
||||||
getLatestChanges: getLatestChanges,
|
getLatestChanges: getLatestChanges,
|
||||||
useCache: selectedMailboxId?.isFavoriteMailboxId != true,
|
useCache: selectedMailbox?.isFavorite != true,
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
consumeState(Stream.value(Left(GetAllEmailFailure(NotFoundSessionException()))));
|
consumeState(Stream.value(Left(GetAllEmailFailure(NotFoundSessionException()))));
|
||||||
@@ -599,7 +599,7 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
EmailFilter getEmailFilterForLoadMailbox({PresentationEmail? oldestEmail}) {
|
EmailFilter getEmailFilterForLoadMailbox({PresentationEmail? oldestEmail}) {
|
||||||
if (selectedMailboxId?.isFavoriteMailboxId == true) {
|
if (selectedMailbox?.isFavorite == true) {
|
||||||
return EmailFilter(
|
return EmailFilter(
|
||||||
filter: getFilterConditionForLoadMailbox(oldestEmail: oldestEmail),
|
filter: getFilterConditionForLoadMailbox(oldestEmail: oldestEmail),
|
||||||
);
|
);
|
||||||
@@ -613,7 +613,7 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Filter getFilterConditionForLoadMailbox({PresentationEmail? oldestEmail}) {
|
Filter getFilterConditionForLoadMailbox({PresentationEmail? oldestEmail}) {
|
||||||
if (selectedMailboxId?.isFavoriteMailboxId == true) {
|
if (selectedMailbox?.isFavorite == true) {
|
||||||
switch (mailboxDashBoardController.filterMessageOption.value) {
|
switch (mailboxDashBoardController.filterMessageOption.value) {
|
||||||
case FilterMessageOption.unread:
|
case FilterMessageOption.unread:
|
||||||
return EmailFilterCondition(
|
return EmailFilterCondition(
|
||||||
@@ -711,7 +711,7 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
try {
|
try {
|
||||||
if (searchController.isSearchEmailRunning && PlatformInfo.isWeb) {
|
if (searchController.isSearchEmailRunning && PlatformInfo.isWeb) {
|
||||||
await _refreshChangeSearchEmail();
|
await _refreshChangeSearchEmail();
|
||||||
} else if (selectedMailboxId?.isFavoriteMailboxId == true) {
|
} else if (selectedMailbox?.isFavorite == true) {
|
||||||
await _refreshChangeListEmailsInFavoriteFolder();
|
await _refreshChangeListEmailsInFavoriteFolder();
|
||||||
} else {
|
} else {
|
||||||
await _refreshChangeListEmail();
|
await _refreshChangeListEmail();
|
||||||
@@ -868,14 +868,14 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
filter: getFilterConditionForLoadMailbox(oldestEmail: oldestEmail),
|
filter: getFilterConditionForLoadMailbox(oldestEmail: oldestEmail),
|
||||||
properties: EmailUtils.getPropertiesForEmailGetMethod(_session!, _accountId!),
|
properties: EmailUtils.getPropertiesForEmailGetMethod(_session!, _accountId!),
|
||||||
lastEmailId: oldestEmail?.id,
|
lastEmailId: oldestEmail?.id,
|
||||||
useCache: selectedMailboxId?.isFavoriteMailboxId != true,
|
useCache: selectedMailbox?.isFavorite != true,
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool _validatePresentationEmail(PresentationEmail email) {
|
bool _validatePresentationEmail(PresentationEmail email) {
|
||||||
return (_belongToCurrentMailboxId(email) || selectedMailboxId?.isFavoriteMailboxId == true)
|
return (_belongToCurrentMailboxId(email) || selectedMailbox?.isFavorite == true)
|
||||||
&& _notDuplicatedInCurrentList(email);
|
&& _notDuplicatedInCurrentList(email);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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/email/keyword_identifier.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
import 'package:model/extensions/keyword_identifier_extension.dart';
|
import 'package:model/extensions/keyword_identifier_extension.dart';
|
||||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
|
||||||
|
|
||||||
extension MailboxIdExtension on MailboxId {
|
extension MailboxIdExtension on MailboxId {
|
||||||
String generatePath() {
|
String generatePath() {
|
||||||
@@ -32,7 +31,4 @@ extension MailboxIdExtension on MailboxId {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String get asString => id.value;
|
String get asString => id.value;
|
||||||
|
|
||||||
bool get isFavoriteMailboxId =>
|
|
||||||
this == PresentationMailbox.favoriteFolder.id;
|
|
||||||
}
|
}
|
||||||
@@ -34,6 +34,8 @@ extension PresentationMailboxExtension on PresentationMailbox {
|
|||||||
|
|
||||||
bool get isSpam => role == PresentationMailbox.roleSpam || role == PresentationMailbox.roleJunk;
|
bool get isSpam => role == PresentationMailbox.roleSpam || role == PresentationMailbox.roleJunk;
|
||||||
|
|
||||||
|
bool get isFavorite => role == PresentationMailbox.roleFavorite;
|
||||||
|
|
||||||
bool get isTrash => role == PresentationMailbox.roleTrash;
|
bool get isTrash => role == PresentationMailbox.roleTrash;
|
||||||
|
|
||||||
bool get isDrafts => role == PresentationMailbox.roleDrafts;
|
bool get isDrafts => role == PresentationMailbox.roleDrafts;
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class PresentationMailbox with EquatableMixin {
|
|||||||
static final PresentationMailbox favoriteFolder = PresentationMailbox(
|
static final PresentationMailbox favoriteFolder = PresentationMailbox(
|
||||||
MailboxId(Id(favoriteRole)),
|
MailboxId(Id(favoriteRole)),
|
||||||
name: MailboxName('Starred'),
|
name: MailboxName('Starred'),
|
||||||
role: Role(favoriteRole),
|
role: roleFavorite,
|
||||||
);
|
);
|
||||||
|
|
||||||
static final roleInbox = Role(inboxRole);
|
static final roleInbox = Role(inboxRole);
|
||||||
@@ -37,6 +37,7 @@ class PresentationMailbox with EquatableMixin {
|
|||||||
static final roleJunk = Role(junkRole);
|
static final roleJunk = Role(junkRole);
|
||||||
static final roleArchive = Role(archiveRole);
|
static final roleArchive = Role(archiveRole);
|
||||||
static final roleRecovered = Role(recoveredRole);
|
static final roleRecovered = Role(recoveredRole);
|
||||||
|
static final roleFavorite = Role(favoriteRole);
|
||||||
|
|
||||||
final MailboxId id;
|
final MailboxId id;
|
||||||
final MailboxName? name;
|
final MailboxName? name;
|
||||||
|
|||||||
Reference in New Issue
Block a user