diff --git a/lib/features/base/mixin/mailbox_action_handler_mixin.dart b/lib/features/base/mixin/mailbox_action_handler_mixin.dart index 20f77239e..abce8c6b0 100644 --- a/lib/features/base/mixin/mailbox_action_handler_mixin.dart +++ b/lib/features/base/mixin/mailbox_action_handler_mixin.dart @@ -1,11 +1,16 @@ -import 'package:core/core.dart'; +import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/utils/app_toast.dart'; +import 'package:core/presentation/utils/responsive_utils.dart'; +import 'package:core/presentation/views/bottom_popup/confirmation_dialog_action_sheet_builder.dart'; +import 'package:core/presentation/views/dialog/confirmation_dialog_builder.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; -import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; @@ -58,7 +63,7 @@ mixin MailboxActionHandlerMixin { ..onCancelAction(AppLocalizations.of(context).cancel, popBack) ..onConfirmAction(AppLocalizations.of(context).delete, () { popBack(); - if (mailbox.countEmails > 0) { + if (mailbox.countTotalEmails > 0) { dashboardController.emptyTrashFolderAction(trashFolderId: mailbox.id); } else { appToast.showToastWarningMessage( @@ -85,7 +90,7 @@ mixin MailboxActionHandlerMixin { ..onCloseButtonAction(popBack) ..onConfirmButtonAction(AppLocalizations.of(context).delete, () { popBack(); - if (mailbox.countEmails > 0) { + if (mailbox.countTotalEmails > 0) { dashboardController.emptyTrashFolderAction(trashFolderId: mailbox.id); } else { appToast.showToastWarningMessage( @@ -118,7 +123,7 @@ mixin MailboxActionHandlerMixin { ..onCancelAction(AppLocalizations.of(context).cancel, popBack) ..onConfirmAction(AppLocalizations.of(context).delete_all, () { popBack(); - if (mailbox.countEmails > 0) { + if (mailbox.countTotalEmails > 0) { dashboardController.emptySpamFolderAction(spamFolderId: mailbox.id); } else { appToast.showToastWarningMessage( @@ -145,7 +150,7 @@ mixin MailboxActionHandlerMixin { ..onCloseButtonAction(popBack) ..onConfirmButtonAction(AppLocalizations.of(context).delete_all, () { popBack(); - if (mailbox.countEmails > 0) { + if (mailbox.countTotalEmails > 0) { dashboardController.emptySpamFolderAction(spamFolderId: mailbox.id); } else { appToast.showToastWarningMessage( diff --git a/lib/features/destination_picker/presentation/widgets/destination_picker_search_mailbox_item_builder.dart b/lib/features/destination_picker/presentation/widgets/destination_picker_search_mailbox_item_builder.dart index 324d15d76..eddb3be3d 100644 --- a/lib/features/destination_picker/presentation/widgets/destination_picker_search_mailbox_item_builder.dart +++ b/lib/features/destination_picker/presentation/widgets/destination_picker_search_mailbox_item_builder.dart @@ -6,8 +6,8 @@ import 'package:core/utils/platform_info.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; -import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart'; diff --git a/lib/features/email/presentation/email_view.dart b/lib/features/email/presentation/email_view.dart index 2c0dc20e7..845b9e06a 100644 --- a/lib/features/email/presentation/email_view.dart +++ b/lib/features/email/presentation/email_view.dart @@ -19,6 +19,7 @@ import 'package:model/email/presentation_email.dart'; import 'package:model/extensions/list_attachment_extension.dart'; import 'package:model/extensions/list_email_address_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/base/mixin/app_loader_mixin.dart'; import 'package:tmail_ui_user/features/base/widget/custom_scroll_behavior.dart'; diff --git a/lib/features/mailbox/domain/extensions/presentation_mailbox_extension.dart b/lib/features/mailbox/domain/extensions/presentation_mailbox_extension.dart deleted file mode 100644 index 1a7bce53b..000000000 --- a/lib/features/mailbox/domain/extensions/presentation_mailbox_extension.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:core/presentation/resources/image_paths.dart'; -import 'package:model/mailbox/presentation_mailbox.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_utils.dart'; - -extension PresentationMailboxExtension on PresentationMailbox { - - String getMailboxIcon(ImagePaths imagePaths) { - if (hasRole()) { - switch(role!.value) { - case PresentationMailbox.inboxRole: - return imagePaths.icMailboxInbox; - case PresentationMailbox.draftsRole: - return imagePaths.icMailboxDrafts; - case PresentationMailbox.outboxRole: - return imagePaths.icMailboxOutbox; - case PresentationMailbox.archiveRole: - return imagePaths.icMailboxArchived; - case PresentationMailbox.sentRole: - return imagePaths.icMailboxSent; - case PresentationMailbox.trashRole: - return imagePaths.icMailboxTrash; - case PresentationMailbox.spamRole: - return imagePaths.icMailboxSpam; - case PresentationMailbox.templatesRole: - return imagePaths.icMailboxTemplate; - case 'all_mail': - return imagePaths.icMailboxAllMail; - default: - return imagePaths.icFolderMailbox; - } - } else if (isChildOfTeamMailboxes) { - switch(name!.name.toLowerCase()) { - case 'inbox': - return imagePaths.icMailboxInbox; - case 'outbox': - return imagePaths.icMailboxOutbox; - case 'drafts': - return imagePaths.icMailboxDrafts; - case 'archive': - return imagePaths.icMailboxArchived; - case 'sent': - return imagePaths.icMailboxSent; - case 'trash': - return imagePaths.icMailboxTrash; - case 'spam': - return imagePaths.icMailboxSpam; - case 'templates': - return imagePaths.icMailboxTemplate; - default: - return imagePaths.icFolderMailbox; - } - } else { - return imagePaths.icFolderMailbox; - } - } - - Uri get mailboxRouteWeb => RouteUtils.generateRouteBrowser(AppRoutes.dashboard, NavigationRouter(mailboxId: id)); -} \ No newline at end of file diff --git a/lib/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart b/lib/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart index a39c6bb65..e473b3dcb 100644 --- a/lib/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart +++ b/lib/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart @@ -1,7 +1,12 @@ +import 'package:core/presentation/resources/image_paths.dart'; import 'package:flutter/material.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.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_utils.dart'; extension PresentationMailboxExtension on PresentationMailbox { @@ -28,4 +33,56 @@ extension PresentationMailboxExtension on PresentationMailbox { } return name?.name ?? ''; } + + String getMailboxIcon(ImagePaths imagePaths) { + if (hasRole()) { + switch(role!.value) { + case PresentationMailbox.inboxRole: + return imagePaths.icMailboxInbox; + case PresentationMailbox.draftsRole: + return imagePaths.icMailboxDrafts; + case PresentationMailbox.outboxRole: + return imagePaths.icMailboxOutbox; + case PresentationMailbox.archiveRole: + return imagePaths.icMailboxArchived; + case PresentationMailbox.sentRole: + return imagePaths.icMailboxSent; + case PresentationMailbox.trashRole: + return imagePaths.icMailboxTrash; + case PresentationMailbox.spamRole: + return imagePaths.icMailboxSpam; + case PresentationMailbox.templatesRole: + return imagePaths.icMailboxTemplate; + case 'all_mail': + return imagePaths.icMailboxAllMail; + default: + return imagePaths.icFolderMailbox; + } + } else if (isChildOfTeamMailboxes) { + switch(name!.name.toLowerCase()) { + case 'inbox': + return imagePaths.icMailboxInbox; + case 'outbox': + return imagePaths.icMailboxOutbox; + case 'drafts': + return imagePaths.icMailboxDrafts; + case 'archive': + return imagePaths.icMailboxArchived; + case 'sent': + return imagePaths.icMailboxSent; + case 'trash': + return imagePaths.icMailboxTrash; + case 'spam': + return imagePaths.icMailboxSpam; + case 'templates': + return imagePaths.icMailboxTemplate; + default: + return imagePaths.icFolderMailbox; + } + } else { + return imagePaths.icFolderMailbox; + } + } + + Uri get mailboxRouteWeb => RouteUtils.generateRouteBrowser(AppRoutes.dashboard, NavigationRouter(mailboxId: id)); } \ No newline at end of file diff --git a/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart b/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart index dde378d10..8aa6a0f1b 100644 --- a/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart +++ b/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart @@ -9,6 +9,7 @@ import 'package:core/utils/platform_info.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/expand_mode.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:tmail_ui_user/features/base/base_mailbox_controller.dart'; @@ -39,7 +40,7 @@ mixin MailboxWidgetMixin { MailboxActions.openInNewTab, if (mailbox.isSpam) _mailboxActionForSpam(spamReportEnabled), - if (mailbox.getCountUnReadEmails().isNotEmpty) + if (mailbox.countUnReadEmailsAsString.isNotEmpty) MailboxActions.markAsRead, if (mailbox.isTrash) MailboxActions.emptyTrash, @@ -52,7 +53,7 @@ mixin MailboxWidgetMixin { return [ if (PlatformInfo.isWeb && mailbox.isSubscribedMailbox) MailboxActions.openInNewTab, - if (mailbox.getCountUnReadEmails().isNotEmpty) + if (mailbox.countUnReadEmailsAsString.isNotEmpty) MailboxActions.markAsRead, MailboxActions.move, MailboxActions.rename, @@ -68,7 +69,7 @@ mixin MailboxWidgetMixin { return [ if (PlatformInfo.isWeb && mailbox.isSubscribedMailbox) MailboxActions.openInNewTab, - if (mailbox.getCountUnReadEmails().isNotEmpty) + if (mailbox.countUnReadEmailsAsString.isNotEmpty) MailboxActions.markAsRead, if (mailbox.isTeamMailboxes) if (mailbox.isSubscribedMailbox) diff --git a/lib/features/mailbox/presentation/model/mailbox_actions.dart b/lib/features/mailbox/presentation/model/mailbox_actions.dart index 72fa31b97..7de105d2f 100644 --- a/lib/features/mailbox/presentation/model/mailbox_actions.dart +++ b/lib/features/mailbox/presentation/model/mailbox_actions.dart @@ -1,6 +1,7 @@ import 'package:core/core.dart'; import 'package:flutter/material.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:tmail_ui_user/features/base/widget/context_menu_item_action.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; @@ -166,7 +167,7 @@ extension MailboxActionsExtension on MailboxActions { case MailboxActions.emptySpam: return ContextMenuItemState.activated; case MailboxActions.markAsRead: - return mailbox.getCountUnReadEmails().isNotEmpty + return mailbox.countUnReadEmailsAsString.isNotEmpty ? ContextMenuItemState.activated : ContextMenuItemState.deactivated; default: diff --git a/lib/features/mailbox/presentation/model/mailbox_node.dart b/lib/features/mailbox/presentation/model/mailbox_node.dart index befd5a321..43bcbe14e 100644 --- a/lib/features/mailbox/presentation/model/mailbox_node.dart +++ b/lib/features/mailbox/presentation/model/mailbox_node.dart @@ -1,6 +1,7 @@ import 'package:equatable/equatable.dart'; import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/expand_mode.dart'; import 'package:model/mailbox/mailbox_state.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; diff --git a/lib/features/mailbox_creator/presentation/mailbox_creator_view.dart b/lib/features/mailbox_creator/presentation/mailbox_creator_view.dart index 2959b0cad..ac94dd506 100644 --- a/lib/features/mailbox_creator/presentation/mailbox_creator_view.dart +++ b/lib/features/mailbox_creator/presentation/mailbox_creator_view.dart @@ -10,7 +10,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; -import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart'; import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_controller.dart'; import 'package:tmail_ui_user/features/mailbox_creator/presentation/widgets/app_bar_mailbox_creator_builder.dart'; 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 42b0e3b48..2b38146da 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -1471,7 +1471,7 @@ class MailboxDashBoardController extends ReloadableController { bool isEmptyTrashBannerEnabledOnWeb(BuildContext context) { return selectedMailbox.value != null && selectedMailbox.value!.isTrash && - selectedMailbox.value!.countEmails > 0 && + selectedMailbox.value!.countTotalEmails > 0 && !searchController.isSearchActive() && _responsiveUtils.isWebDesktop(context); } @@ -1479,7 +1479,7 @@ class MailboxDashBoardController extends ReloadableController { bool isEmptyTrashBannerEnabledOnMobile(BuildContext context) { return selectedMailbox.value != null && selectedMailbox.value!.isTrash && - selectedMailbox.value!.countEmails > 0 && + selectedMailbox.value!.countTotalEmails > 0 && !searchController.isSearchActive() && !_responsiveUtils.isWebDesktop(context); } @@ -1992,7 +1992,7 @@ class MailboxDashBoardController extends ReloadableController { bool isEmptySpamBannerEnabledOnWeb(BuildContext context) { return selectedMailbox.value != null && selectedMailbox.value!.isSpam && - selectedMailbox.value!.countEmails > 0 && + selectedMailbox.value!.countTotalEmails > 0 && !searchController.isSearchActive() && _responsiveUtils.isWebDesktop(context); } @@ -2000,7 +2000,7 @@ class MailboxDashBoardController extends ReloadableController { bool isEmptySpamBannerEnabledOnMobile(BuildContext context) { return selectedMailbox.value != null && selectedMailbox.value!.isSpam && - selectedMailbox.value!.countEmails > 0 && + selectedMailbox.value!.countTotalEmails > 0 && !searchController.isSearchActive() && !_responsiveUtils.isWebDesktop(context); } @@ -2018,7 +2018,7 @@ class MailboxDashBoardController extends ReloadableController { ..onCancelAction(AppLocalizations.of(context).cancel, popBack) ..onConfirmAction(AppLocalizations.of(context).delete_all, () { popBack(); - if (spamMailbox.countEmails > 0) { + if (spamMailbox.countTotalEmails > 0) { emptySpamFolderAction(spamFolderId: spamMailbox.id); } else { _appToast.showToastWarningMessage( @@ -2045,7 +2045,7 @@ class MailboxDashBoardController extends ReloadableController { ..onCloseButtonAction(popBack) ..onConfirmButtonAction(AppLocalizations.of(context).delete_all, () { popBack(); - if (spamMailbox.countEmails > 0) { + if (spamMailbox.countTotalEmails > 0) { emptySpamFolderAction(spamFolderId: spamMailbox.id); } else { _appToast.showToastWarningMessage( diff --git a/lib/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart index e646f9d03..bc646790c 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart @@ -9,6 +9,7 @@ import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_filter_condition.dart'; import 'package:model/extensions/mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; +import 'package:model/model.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart'; @@ -105,7 +106,7 @@ class SpamReportController extends BaseController { bool get notShowSpamReportBanner => _presentationSpamMailbox.value == null; - String get numberOfUnreadSpamEmails => _presentationSpamMailbox.value?.getCountUnReadEmails() ?? ''; + String get numberOfUnreadSpamEmails => _presentationSpamMailbox.value?.countUnReadEmailsAsString ?? ''; bool get enableSpamReport => _spamReportState.value == SpamReportState.enabled; 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 ad450724a..3257817c4 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 @@ -6,6 +6,7 @@ import 'package:jmap_dart_client/jmap/core/filter/operator/logic_filter_operator import 'package:jmap_dart_client/jmap/core/utc_date.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart'; import 'package:model/extensions/email_filter_condition_extension.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart'; import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart'; diff --git a/lib/features/mailbox_dashboard/presentation/widgets/email_quick_search_item_tile_widget.dart b/lib/features/mailbox_dashboard/presentation/widgets/email_quick_search_item_tile_widget.dart index a602c3f8d..747efe687 100644 --- a/lib/features/mailbox_dashboard/presentation/widgets/email_quick_search_item_tile_widget.dart +++ b/lib/features/mailbox_dashboard/presentation/widgets/email_quick_search_item_tile_widget.dart @@ -5,6 +5,7 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:model/email/presentation_email.dart'; import 'package:model/extensions/presentation_email_extension.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; class EmailQuickSearchItemTileWidget extends StatelessWidget { diff --git a/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart b/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart index 2809a4b4f..969b9f6a3 100644 --- a/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart +++ b/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart @@ -9,6 +9,7 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/expand_mode.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:tmail_ui_user/features/base/base_mailbox_controller.dart'; diff --git a/lib/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_folder_tile_builder.dart b/lib/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_folder_tile_builder.dart index 19b883047..57c5bef00 100644 --- a/lib/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_folder_tile_builder.dart +++ b/lib/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_folder_tile_builder.dart @@ -5,8 +5,8 @@ import 'package:core/presentation/views/button/icon_button_web.dart'; import 'package:core/utils/direction_utils.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/expand_mode.dart'; -import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart'; diff --git a/lib/features/push_notification/data/repository/fcm_repository_impl.dart b/lib/features/push_notification/data/repository/fcm_repository_impl.dart index d5398d624..338e909bb 100644 --- a/lib/features/push_notification/data/repository/fcm_repository_impl.dart +++ b/lib/features/push_notification/data/repository/fcm_repository_impl.dart @@ -11,6 +11,7 @@ import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart'; import 'package:model/email/email_property.dart'; import 'package:model/extensions/list_email_extension.dart'; import 'package:model/extensions/mailbox_extension.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:tmail_ui_user/features/mailbox/data/datasource/mailbox_datasource.dart'; import 'package:tmail_ui_user/features/push_notification/data/datasource/fcm_datasource.dart'; diff --git a/lib/features/search/email/presentation/search_email_controller.dart b/lib/features/search/email/presentation/search_email_controller.dart index 89d4e4924..7d3b22dc3 100644 --- a/lib/features/search/email/presentation/search_email_controller.dart +++ b/lib/features/search/email/presentation/search_email_controller.dart @@ -23,6 +23,7 @@ import 'package:model/email/presentation_email.dart'; import 'package:model/email/read_actions.dart'; import 'package:model/extensions/list_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/select_mode.dart'; import 'package:model/user/user_profile.dart'; diff --git a/lib/features/search/mailbox/presentation/widgets/mailbox_searched_item_builder.dart b/lib/features/search/mailbox/presentation/widgets/mailbox_searched_item_builder.dart index 0650aed20..5a770ce40 100644 --- a/lib/features/search/mailbox/presentation/widgets/mailbox_searched_item_builder.dart +++ b/lib/features/search/mailbox/presentation/widgets/mailbox_searched_item_builder.dart @@ -9,8 +9,8 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:focused_menu_custom/focused_menu.dart'; import 'package:focused_menu_custom/modals.dart'; import 'package:model/email/presentation_email.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; -import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart'; import 'package:tmail_ui_user/features/search/mailbox/presentation/utils/search_mailbox_utils.dart'; diff --git a/lib/features/thread/presentation/mixin/base_email_item_tile.dart b/lib/features/thread/presentation/mixin/base_email_item_tile.dart index 5484ed141..33021a622 100644 --- a/lib/features/thread/presentation/mixin/base_email_item_tile.dart +++ b/lib/features/thread/presentation/mixin/base_email_item_tile.dart @@ -14,6 +14,7 @@ import 'package:get/get.dart'; import 'package:model/email/email_action_type.dart'; import 'package:model/email/presentation_email.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/select_mode.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart'; diff --git a/lib/features/thread/presentation/mixin/email_action_controller.dart b/lib/features/thread/presentation/mixin/email_action_controller.dart index cce92b218..25b39d71c 100644 --- a/lib/features/thread/presentation/mixin/email_action_controller.dart +++ b/lib/features/thread/presentation/mixin/email_action_controller.dart @@ -15,6 +15,7 @@ import 'package:model/email/email_action_type.dart'; import 'package:model/email/mark_star_action.dart'; import 'package:model/email/presentation_email.dart'; import 'package:model/email/read_actions.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart'; diff --git a/lib/features/thread/presentation/widgets/bottom_bar_thread_selection_widget.dart b/lib/features/thread/presentation/widgets/bottom_bar_thread_selection_widget.dart index 2a98a7e3e..4ea481954 100644 --- a/lib/features/thread/presentation/widgets/bottom_bar_thread_selection_widget.dart +++ b/lib/features/thread/presentation/widgets/bottom_bar_thread_selection_widget.dart @@ -7,6 +7,7 @@ import 'package:flutter/material.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/presentation_mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; diff --git a/lib/features/thread/presentation/widgets/email_tile_web_builder.dart b/lib/features/thread/presentation/widgets/email_tile_web_builder.dart index 82a06ba55..ea7c6ef4e 100644 --- a/lib/features/thread/presentation/widgets/email_tile_web_builder.dart +++ b/lib/features/thread/presentation/widgets/email_tile_web_builder.dart @@ -7,6 +7,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:model/email/email_action_type.dart'; import 'package:model/email/presentation_email.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:model/mailbox/select_mode.dart'; import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart'; diff --git a/model/lib/extensions/list_presentation_mailbox_extension.dart b/model/lib/extensions/list_presentation_mailbox_extension.dart index 973fb511c..1ca05f5b9 100644 --- a/model/lib/extensions/list_presentation_mailbox_extension.dart +++ b/model/lib/extensions/list_presentation_mailbox_extension.dart @@ -1,5 +1,6 @@ import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; extension ListPresentationMailboxExtension on List { @@ -14,7 +15,7 @@ extension ListPresentationMailboxExtension on List { bool get isAllDefaultMailboxes => every((mailbox) => mailbox.isDefault); - bool get isAllUnreadMailboxes => every((mailbox) => mailbox.getCountUnReadEmails().isNotEmpty); + bool get isAllUnreadMailboxes => every((mailbox) => mailbox.countUnReadEmailsAsString.isNotEmpty); List get mailboxIds => map((mailbox) => mailbox.id).toList(); } \ 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 9c8d11fac..ae3fb5bef 100644 --- a/model/lib/extensions/presentation_mailbox_extension.dart +++ b/model/lib/extensions/presentation_mailbox_extension.dart @@ -1,8 +1,73 @@ import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; -import 'package:model/model.dart'; +import 'package:jmap_dart_client/jmap/mail/mailbox/namespace.dart'; +import 'package:model/mailbox/mailbox_state.dart'; +import 'package:model/mailbox/presentation_mailbox.dart'; +import 'package:model/mailbox/select_mode.dart'; extension PresentationMailboxExtension on PresentationMailbox { + bool get isActivated => state == MailboxState.activated; + + bool hasParentId() => parentId != null && parentId!.id.value.isNotEmpty; + + bool hasRole() => role != null && role!.value.isNotEmpty; + + bool get isDefault => hasRole(); + + bool get isPersonal => namespace == null || namespace == Namespace('Personal'); + + bool get isTeamMailboxes => !isPersonal && !hasParentId(); + + bool get isChildOfTeamMailboxes => !isPersonal && hasParentId(); + + String get countUnReadEmailsAsString { + if (countUnreadEmails <= 0) return ''; + return countUnreadEmails <= 999 ? '$countUnreadEmails' : '999+'; + } + + int get countUnreadEmails => unreadEmails?.value.value.toInt() ?? 0; + + int get countTotalEmails => totalEmails?.value.value.toInt() ?? 0; + + bool get isSpam => role == PresentationMailbox.roleSpam; + + bool get isTrash => role == PresentationMailbox.roleTrash; + + bool get isDrafts => role == PresentationMailbox.roleDrafts; + + bool get isTemplates => role == PresentationMailbox.roleTemplates; + + bool get isSent => role == PresentationMailbox.roleSent; + + bool get isOutbox => name == PresentationMailbox.lowerCaseOutboxMailboxName || role == PresentationMailbox.roleOutbox; + + bool get isSubscribedMailbox => isSubscribed != null && isSubscribed?.value == true; + + bool get allowedToDisplayCountOfUnreadEmails => !(isTrash || isSpam || isDrafts || isTemplates || isSent); + + bool get allowedToDisplayCountOfTotalEmails => isTrash || isSpam; + + String get countTotalEmailsAsString { + if (countTotalEmails <= 0) return ''; + return countTotalEmails <= 999 ? '$countTotalEmails' : '999+'; + } + + String? get emailTeamMailBoxes => namespace?.value.substring( + (namespace?.value.indexOf('[') ?? 0) + 1, + namespace?.value.indexOf(']')); + + bool get allowedToDisplay => isSubscribedMailbox || isDefault; + + MailboxId? get mailboxId { + if (id == PresentationMailbox.unifiedMailbox.id) { + return null; + } else { + return id; + } + } + + bool get pushNotificationDeactivated => isOutbox || isSent || isDrafts || isTrash || isSpam; + PresentationMailbox toPresentationMailboxWithMailboxPath(String mailboxPath) { return PresentationMailbox( id, diff --git a/model/lib/mailbox/presentation_mailbox.dart b/model/lib/mailbox/presentation_mailbox.dart index 32127a551..90ab329b1 100644 --- a/model/lib/mailbox/presentation_mailbox.dart +++ b/model/lib/mailbox/presentation_mailbox.dart @@ -68,68 +68,6 @@ class PresentationMailbox with EquatableMixin { } ); - bool get isActivated => state == MailboxState.activated; - - bool hasParentId() => parentId != null && parentId!.id.value.isNotEmpty; - - bool hasRole() => role != null && role!.value.isNotEmpty; - - bool get isDefault => hasRole(); - - bool get isPersonal => namespace == null || namespace == Namespace('Personal'); - - bool get isTeamMailboxes => !isPersonal && !hasParentId(); - - bool get isChildOfTeamMailboxes => !isPersonal && hasParentId(); - - String getCountUnReadEmails() { - if (unreadEmails == null || unreadEmails!.value.value <= 0) { - return ''; - } - - return unreadEmails!.value.value <= 999 ? '${unreadEmails!.value.value}' : '999+'; - } - - int get countEmails => totalEmails?.value.value.toInt() ?? 0; - - bool get isSpam => role == roleSpam; - - bool get isTrash => role == roleTrash; - - bool get isDrafts => role == roleDrafts; - - bool get isTemplates => role == roleTemplates; - - bool get isSent => role == roleSent; - - bool get isOutbox => name == lowerCaseOutboxMailboxName || role == roleOutbox; - - bool get isSubscribedMailbox => isSubscribed != null && isSubscribed?.value == true; - - bool matchCountingRules() { - if (isTrash || isDrafts || isTemplates || isSent) { - return false; - } else { - return true; - } - } - - String? get emailTeamMailBoxes => namespace?.value.substring( - (namespace?.value.indexOf('[') ?? 0) + 1, - namespace?.value.indexOf(']')); - - bool get allowedToDisplay => isSubscribedMailbox || isDefault; - - MailboxId? get mailboxId { - if (id == unifiedMailbox.id) { - return null; - } else { - return id; - } - } - - bool get pushNotificationDeactivated => isOutbox || isSent || isDrafts || isTrash || isSpam; - @override List get props => [ id, @@ -147,5 +85,6 @@ class PresentationMailbox with EquatableMixin { mailboxPath, state, namespace, + displayName, ]; } \ No newline at end of file