TF-4392 [Team Mailbox] Empty the team mailbox trash

This commit is contained in:
dab246
2026-03-26 16:13:49 +07:00
committed by Dat H. Pham
parent 405501bd40
commit 865940450e
5 changed files with 28 additions and 29 deletions
@@ -68,10 +68,7 @@ mixin MailboxActionHandlerMixin {
..onConfirmAction(AppLocalizations.of(context).delete, () { ..onConfirmAction(AppLocalizations.of(context).delete, () {
popBack(); popBack();
if (mailbox.countTotalEmails > 0) { if (mailbox.countTotalEmails > 0) {
dashboardController.emptyTrashFolderAction( dashboardController.emptyTrashFolderAction(trashMailbox: mailbox);
trashFolderId: mailbox.id,
totalEmails: mailbox.countTotalEmails
);
} else { } else {
appToast.showToastWarningMessage( appToast.showToastWarningMessage(
context, context,
@@ -92,10 +89,7 @@ mixin MailboxActionHandlerMixin {
onConfirmAction: () { onConfirmAction: () {
popBack(); popBack();
if (mailbox.countTotalEmails > 0) { if (mailbox.countTotalEmails > 0) {
dashboardController.emptyTrashFolderAction( dashboardController.emptyTrashFolderAction(trashMailbox: mailbox);
trashFolderId: mailbox.id,
totalEmails: mailbox.countTotalEmails
);
} else { } else {
appToast.showToastWarningMessage( appToast.showToastWarningMessage(
context, context,
@@ -1600,8 +1600,7 @@ class MailboxController extends BaseMailboxController
log('MailboxController::emptyMailboxAction:presentationMailbox: ${presentationMailbox.name}'); log('MailboxController::emptyMailboxAction:presentationMailbox: ${presentationMailbox.name}');
if (presentationMailbox.isTrash) { if (presentationMailbox.isTrash) {
mailboxDashBoardController.emptyTrashFolderAction( mailboxDashBoardController.emptyTrashFolderAction(
trashFolderId: presentationMailbox.id, trashMailbox: presentationMailbox,
totalEmails: presentationMailbox.countTotalEmails
); );
} else if (presentationMailbox.isSpam) { } else if (presentationMailbox.isSpam) {
mailboxDashBoardController.emptySpamFolderAction( mailboxDashBoardController.emptySpamFolderAction(
@@ -93,7 +93,9 @@ mixin MailboxWidgetMixin {
if (mailbox.isSubscribedMailbox) if (mailbox.isSubscribedMailbox)
MailboxActions.disableMailbox MailboxActions.disableMailbox
else else
MailboxActions.enableMailbox MailboxActions.enableMailbox,
if (mailbox.isTrash && mailbox.myRights?.mayRemoveItems == true)
MailboxActions.emptyTrash,
]; ];
} }
@@ -1841,41 +1841,40 @@ class MailboxDashBoardController extends ReloadableController
void emptyTrashFolderAction({ void emptyTrashFolderAction({
Function? onCancelSelectionEmail, Function? onCancelSelectionEmail,
MailboxId? trashFolderId, PresentationMailbox? trashMailbox,
int totalEmails = 0,
}) { }) {
onCancelSelectionEmail?.call(); 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 accountId = this.accountId.value;
final session = sessionCurrent;
if (accountId == null || sessionCurrent == null) { if (accountId == null || session == null) {
consumeState(Stream.value(Left(EmptyTrashFolderFailure(NotFoundSessionException())))); consumeState(Stream.value(Left(EmptyTrashFolderFailure(NotFoundSessionException()))));
return; return;
} }
if (trashMailboxId == null) { if (trashFolder == null) {
consumeState(Stream.value(Left(EmptyTrashFolderFailure(NotFoundMailboxException())))); consumeState(Stream.value(Left(EmptyTrashFolderFailure(NotFoundMailboxException()))));
return; return;
} }
if (CapabilityIdentifier.jmapMailboxClear.isSupported(sessionCurrent!, accountId)) { if (CapabilityIdentifier.jmapMailboxClear.isSupported(session, accountId) &&
trashFolder.isTrashTeamMailbox != true) {
clearMailbox( clearMailbox(
sessionCurrent!, session,
accountId, accountId,
trashMailboxId, trashFolder.id,
PresentationMailbox.roleTrash, PresentationMailbox.roleTrash,
); );
} else { } else {
final totalEmailsInTrash = totalEmails == 0
? mapMailboxById[trashMailboxId]?.countTotalEmails ?? 0
: totalEmails;
consumeState(_emptyTrashFolderInteractor.execute( consumeState(_emptyTrashFolderInteractor.execute(
sessionCurrent!, session,
accountId, accountId,
trashMailboxId, trashFolder.id,
totalEmailsInTrash, trashFolder.countTotalEmails,
progressStateController, progressStateController,
)); ));
} }
@@ -2406,6 +2405,7 @@ class MailboxDashBoardController extends ReloadableController
) { ) {
return mailbox != null && return mailbox != null &&
mailbox.isTrash && mailbox.isTrash &&
mailbox.myRights?.mayRemoveItems == true &&
mailbox.countTotalEmails > 0 && mailbox.countTotalEmails > 0 &&
!searchController.isSearchActive() && !searchController.isSearchActive() &&
responsiveUtils.isWebDesktop(context); responsiveUtils.isWebDesktop(context);
@@ -2417,6 +2417,7 @@ class MailboxDashBoardController extends ReloadableController
) { ) {
return mailbox != null && return mailbox != null &&
mailbox.isTrash && mailbox.isTrash &&
mailbox.myRights?.mayRemoveItems == true &&
mailbox.countTotalEmails > 0 && mailbox.countTotalEmails > 0 &&
!searchController.isSearchActive() && !searchController.isSearchActive() &&
!responsiveUtils.isWebDesktop(context); !responsiveUtils.isWebDesktop(context);
@@ -44,12 +44,15 @@ extension PresentationMailboxExtension on PresentationMailbox {
if (isPersonal) { if (isPersonal) {
return role == PresentationMailbox.roleTrash; return role == PresentationMailbox.roleTrash;
} else { } else {
return isChildOfTeamMailboxes && return isTrashTeamMailbox;
name?.name.toLowerCase() ==
PresentationMailbox.trashRole.toLowerCase();
} }
} }
bool get isTrashTeamMailbox {
return isChildOfTeamMailboxes &&
name?.name.toLowerCase() == PresentationMailbox.trashRole.toLowerCase();
}
bool get isDrafts => role == PresentationMailbox.roleDrafts; bool get isDrafts => role == PresentationMailbox.roleDrafts;
bool get isTemplates => role == PresentationMailbox.roleTemplates; bool get isTemplates => role == PresentationMailbox.roleTemplates;