diff --git a/lib/features/base/mixin/mailbox_action_handler_mixin.dart b/lib/features/base/mixin/mailbox_action_handler_mixin.dart index 92b5dfd43..6cb101ddb 100644 --- a/lib/features/base/mixin/mailbox_action_handler_mixin.dart +++ b/lib/features/base/mixin/mailbox_action_handler_mixin.dart @@ -68,10 +68,7 @@ mixin MailboxActionHandlerMixin { ..onConfirmAction(AppLocalizations.of(context).delete, () { popBack(); if (mailbox.countTotalEmails > 0) { - dashboardController.emptyTrashFolderAction( - trashFolderId: mailbox.id, - totalEmails: mailbox.countTotalEmails - ); + dashboardController.emptyTrashFolderAction(trashMailbox: mailbox); } else { appToast.showToastWarningMessage( context, @@ -92,10 +89,7 @@ mixin MailboxActionHandlerMixin { onConfirmAction: () { popBack(); if (mailbox.countTotalEmails > 0) { - dashboardController.emptyTrashFolderAction( - trashFolderId: mailbox.id, - totalEmails: mailbox.countTotalEmails - ); + dashboardController.emptyTrashFolderAction(trashMailbox: mailbox); } else { appToast.showToastWarningMessage( context, diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index d9e936af4..7ffbad243 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -1600,8 +1600,7 @@ class MailboxController extends BaseMailboxController log('MailboxController::emptyMailboxAction:presentationMailbox: ${presentationMailbox.name}'); if (presentationMailbox.isTrash) { mailboxDashBoardController.emptyTrashFolderAction( - trashFolderId: presentationMailbox.id, - totalEmails: presentationMailbox.countTotalEmails + trashMailbox: presentationMailbox, ); } else if (presentationMailbox.isSpam) { mailboxDashBoardController.emptySpamFolderAction( diff --git a/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart b/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart index ac7c396a5..146ae5652 100644 --- a/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart +++ b/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart @@ -93,7 +93,9 @@ mixin MailboxWidgetMixin { if (mailbox.isSubscribedMailbox) MailboxActions.disableMailbox else - MailboxActions.enableMailbox + MailboxActions.enableMailbox, + if (mailbox.isTrash && mailbox.myRights?.mayRemoveItems == true) + MailboxActions.emptyTrash, ]; } 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 c544b6918..730f8b9f6 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -1841,41 +1841,40 @@ class MailboxDashBoardController extends ReloadableController void emptyTrashFolderAction({ Function? onCancelSelectionEmail, - MailboxId? trashFolderId, - int totalEmails = 0, + PresentationMailbox? trashMailbox, }) { onCancelSelectionEmail?.call(); - final trashMailboxId = trashFolderId ?? mapDefaultMailboxIdByRole[PresentationMailbox.roleTrash]; + final trashFolder = trashMailbox + ?? (selectedMailbox.value?.isTrash == true ? selectedMailbox.value : null) + ?? mapMailboxById[mapDefaultMailboxIdByRole[PresentationMailbox.roleTrash]]; final accountId = this.accountId.value; + final session = sessionCurrent; - if (accountId == null || sessionCurrent == null) { + if (accountId == null || session == null) { consumeState(Stream.value(Left(EmptyTrashFolderFailure(NotFoundSessionException())))); return; } - if (trashMailboxId == null) { + if (trashFolder == null) { consumeState(Stream.value(Left(EmptyTrashFolderFailure(NotFoundMailboxException())))); return; } - if (CapabilityIdentifier.jmapMailboxClear.isSupported(sessionCurrent!, accountId)) { + if (CapabilityIdentifier.jmapMailboxClear.isSupported(session, accountId) && + trashFolder.isTrashTeamMailbox != true) { clearMailbox( - sessionCurrent!, + session, accountId, - trashMailboxId, + trashFolder.id, PresentationMailbox.roleTrash, ); } else { - final totalEmailsInTrash = totalEmails == 0 - ? mapMailboxById[trashMailboxId]?.countTotalEmails ?? 0 - : totalEmails; - consumeState(_emptyTrashFolderInteractor.execute( - sessionCurrent!, + session, accountId, - trashMailboxId, - totalEmailsInTrash, + trashFolder.id, + trashFolder.countTotalEmails, progressStateController, )); } @@ -2406,6 +2405,7 @@ class MailboxDashBoardController extends ReloadableController ) { return mailbox != null && mailbox.isTrash && + mailbox.myRights?.mayRemoveItems == true && mailbox.countTotalEmails > 0 && !searchController.isSearchActive() && responsiveUtils.isWebDesktop(context); @@ -2417,6 +2417,7 @@ class MailboxDashBoardController extends ReloadableController ) { return mailbox != null && mailbox.isTrash && + mailbox.myRights?.mayRemoveItems == true && mailbox.countTotalEmails > 0 && !searchController.isSearchActive() && !responsiveUtils.isWebDesktop(context); diff --git a/model/lib/extensions/presentation_mailbox_extension.dart b/model/lib/extensions/presentation_mailbox_extension.dart index b8213119a..dc21751aa 100644 --- a/model/lib/extensions/presentation_mailbox_extension.dart +++ b/model/lib/extensions/presentation_mailbox_extension.dart @@ -44,12 +44,15 @@ extension PresentationMailboxExtension on PresentationMailbox { if (isPersonal) { return role == PresentationMailbox.roleTrash; } else { - return isChildOfTeamMailboxes && - name?.name.toLowerCase() == - PresentationMailbox.trashRole.toLowerCase(); + return isTrashTeamMailbox; } } + bool get isTrashTeamMailbox { + return isChildOfTeamMailboxes && + name?.name.toLowerCase() == PresentationMailbox.trashRole.toLowerCase(); + } + bool get isDrafts => role == PresentationMailbox.roleDrafts; bool get isTemplates => role == PresentationMailbox.roleTemplates;