diff --git a/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart b/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart index f39c778de..fa145f8b0 100644 --- a/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart +++ b/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart @@ -13,6 +13,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_controller.d import 'package:tmail_ui_user/features/mailbox/presentation/model/context_item_mailbox_action.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_utils.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_bottom_sheet_action_tile_builder.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/app_dashboard/app_list_dashboard_item.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; @@ -27,7 +28,8 @@ mixin MailboxWidgetMixin { List _listActionForDefaultMailbox( PresentationMailbox mailbox, - bool spamReportEnabled + bool spamReportEnabled, + bool deletedMessageVaultSupported ) { return [ @@ -38,7 +40,8 @@ mixin MailboxWidgetMixin { if (mailbox.isTrash) ...[ MailboxActions.emptyTrash, - MailboxActions.recoverDeletedMessages + if (deletedMessageVaultSupported) + MailboxActions.recoverDeletedMessages, ] else if (mailbox.isSpam) ...[ @@ -84,10 +87,11 @@ mixin MailboxWidgetMixin { List _listActionForAllMailboxType( PresentationMailbox mailbox, - bool spamReportEnabled + bool spamReportEnabled, + bool deletedMessageVaultSupported ) { if (mailbox.isDefault) { - return _listActionForDefaultMailbox(mailbox, spamReportEnabled); + return _listActionForDefaultMailbox(mailbox, spamReportEnabled, deletedMessageVaultSupported); } else if (mailbox.isPersonal) { return _listActionForPersonalMailbox(mailbox); } else { @@ -101,9 +105,14 @@ mixin MailboxWidgetMixin { PresentationMailbox mailbox, MailboxController controller ) { + final bool deletedMessageVaultSupported = MailboxUtils.isDeletedMessageVaultSupported( + controller.mailboxDashBoardController.sessionCurrent, + controller.mailboxDashBoardController.accountId.value); + final contextMenuActions = listContextMenuItemAction( mailbox, - controller.mailboxDashBoardController.enableSpamReport + controller.mailboxDashBoardController.enableSpamReport, + deletedMessageVaultSupported ); if (contextMenuActions.isEmpty) { @@ -174,9 +183,10 @@ mixin MailboxWidgetMixin { List listContextMenuItemAction( PresentationMailbox mailbox, - bool spamReportEnabled + bool spamReportEnabled, + bool deletedMessageVaultSupported ) { - final mailboxActionsSupported = _listActionForAllMailboxType(mailbox, spamReportEnabled); + final mailboxActionsSupported = _listActionForAllMailboxType(mailbox, spamReportEnabled, deletedMessageVaultSupported); final listContextMenuItemAction = mailboxActionsSupported .map((action) => ContextMenuItemMailboxAction(action, action.getContextMenuItemState(mailbox))) @@ -193,9 +203,14 @@ mixin MailboxWidgetMixin { PresentationMailbox mailbox, MailboxController controller ) { + final bool deletedMessageVaultSupported = MailboxUtils.isDeletedMessageVaultSupported( + controller.mailboxDashBoardController.sessionCurrent, + controller.mailboxDashBoardController.accountId.value); + final contextMenuActions = listContextMenuItemAction( mailbox, - controller.mailboxDashBoardController.enableSpamReport + controller.mailboxDashBoardController.enableSpamReport, + deletedMessageVaultSupported ); if (contextMenuActions.isEmpty) { diff --git a/lib/features/mailbox/presentation/utils/mailbox_utils.dart b/lib/features/mailbox/presentation/utils/mailbox_utils.dart index dd12ca7d0..776fac198 100644 --- a/lib/features/mailbox/presentation/utils/mailbox_utils.dart +++ b/lib/features/mailbox/presentation/utils/mailbox_utils.dart @@ -1,11 +1,15 @@ import 'package:core/presentation/utils/responsive_utils.dart'; import 'package:core/utils/app_logger.dart'; import 'package:dartz/dartz.dart'; +import 'package:email_recovery/email_recovery/capability_deleted_messages_vault.dart'; import 'package:flutter/material.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/extensions/list_mailbox_node_extension.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart'; +import 'package:tmail_ui_user/main/error/capability_validator.dart'; class MailboxUtils { @@ -50,4 +54,11 @@ class MailboxUtils { } } } + + static bool isDeletedMessageVaultSupported(Session? session, AccountId? accountId) { + if (session == null || accountId == null) { + return false; + } + return capabilityDeletedMessagesVault.isSupported(session, accountId); + } } \ No newline at end of file diff --git a/lib/features/search/mailbox/presentation/search_mailbox_view.dart b/lib/features/search/mailbox/presentation/search_mailbox_view.dart index beeb62071..fb9470180 100644 --- a/lib/features/search/mailbox/presentation/search_mailbox_view.dart +++ b/lib/features/search/mailbox/presentation/search_mailbox_view.dart @@ -15,6 +15,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/state/search_mailbox_state import 'package:tmail_ui_user/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/context_item_mailbox_action.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_utils.dart'; import 'package:tmail_ui_user/features/search/mailbox/presentation/search_mailbox_controller.dart'; import 'package:tmail_ui_user/features/search/mailbox/presentation/utils/search_mailbox_utils.dart'; import 'package:tmail_ui_user/features/search/mailbox/presentation/widgets/mailbox_searched_item_builder.dart'; @@ -196,9 +197,14 @@ class SearchMailboxView extends GetWidget } List _listPopupMenuItemAction(BuildContext context, PresentationMailbox mailbox) { + final bool deletedMessageVaultSupported = MailboxUtils.isDeletedMessageVaultSupported( + controller.dashboardController.sessionCurrent, + controller.dashboardController.accountId.value); + final contextMenuActions = listContextMenuItemAction( mailbox, controller.dashboardController.enableSpamReport, + deletedMessageVaultSupported ); return contextMenuActions .map((action) => _mailboxFocusedMenuItem(context, action, mailbox)) @@ -252,9 +258,14 @@ class SearchMailboxView extends GetWidget PresentationMailbox mailbox, {RelativeRect? position} ) { + final bool deletedMessageVaultSupported = MailboxUtils.isDeletedMessageVaultSupported( + controller.dashboardController.sessionCurrent, + controller.dashboardController.accountId.value); + final contextMenuActions = listContextMenuItemAction( mailbox, controller.dashboardController.enableSpamReport, + deletedMessageVaultSupported ); if (contextMenuActions.isEmpty) {