Skip to content

Commit 52876bf

Browse files
committed
TF-2646 Handle mark all as Spam/UnSpam for selection emails
1 parent c7e1886 commit 52876bf

File tree

5 files changed

+116
-15
lines changed

5 files changed

+116
-15
lines changed

lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3547,6 +3547,52 @@ class MailboxDashBoardController extends ReloadableController
35473547
}
35483548
}
35493549

3550+
Future<void> maskAllAsSpamSelectionAllEmails(
3551+
BuildContext context,
3552+
Session session,
3553+
AccountId accountId,
3554+
PresentationMailbox currentMailbox
3555+
) async {
3556+
final spamMailboxId = getMailboxIdByRole(PresentationMailbox.roleSpam);
3557+
3558+
if (spamMailboxId == null) return;
3559+
3560+
final spamMailboxPath = mapMailboxById[spamMailboxId]?.getDisplayName(context) ?? '';
3561+
3562+
consumeState(_moveAllSelectionAllEmailsInteractor.execute(
3563+
session,
3564+
accountId,
3565+
currentMailbox.id,
3566+
spamMailboxId,
3567+
spamMailboxPath,
3568+
currentMailbox.countTotalEmails,
3569+
_moveAllSelectionAllEmailsStreamController
3570+
));
3571+
}
3572+
3573+
Future<void> allUnSpamSelectionAllEmails(
3574+
BuildContext context,
3575+
Session session,
3576+
AccountId accountId,
3577+
PresentationMailbox currentMailbox
3578+
) async {
3579+
final inboxMailboxId = getMailboxIdByRole(PresentationMailbox.roleInbox);
3580+
3581+
if (inboxMailboxId == null) return;
3582+
3583+
final inboxMailboxPath = mapMailboxById[inboxMailboxId]?.getDisplayName(context) ?? '';
3584+
3585+
consumeState(_moveAllSelectionAllEmailsInteractor.execute(
3586+
session,
3587+
accountId,
3588+
currentMailbox.id,
3589+
inboxMailboxId,
3590+
inboxMailboxPath,
3591+
currentMailbox.countTotalEmails,
3592+
_moveAllSelectionAllEmailsStreamController
3593+
));
3594+
}
3595+
35503596
@override
35513597
void onClose() {
35523598
if (PlatformInfo.isWeb) {

lib/features/mailbox_dashboard/presentation/widgets/top_bar_thread_selection.dart

Lines changed: 38 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -95,24 +95,15 @@ class TopBarThreadSelection extends StatelessWidget{
9595
)
9696
),
9797
TMailButtonWidget.fromIcon(
98-
icon: isAllSpam ? imagePaths.icNotSpam : imagePaths.icSpam,
98+
icon: _getIconForMoveToSpam(),
9999
backgroundColor: Colors.transparent,
100100
iconSize: 24,
101-
tooltipMessage: isAllSpam
102-
? AppLocalizations.of(context).un_spam
103-
: AppLocalizations.of(context).mark_as_spam,
101+
tooltipMessage: _getTooltipMessageForMoveToSpam(context),
104102
onTapActionCallback: () {
105-
if (isAllSpam) {
106-
onEmailActionTypeAction?.call(
107-
List.from(listEmail),
108-
EmailActionType.unSpam
109-
);
110-
} else {
111-
onEmailActionTypeAction?.call(
112-
List.from(listEmail.listEmailCanSpam(mapMailbox)),
113-
EmailActionType.moveToSpam
114-
);
115-
}
103+
onEmailActionTypeAction?.call(
104+
List.from(listEmail.listEmailCanSpam(mapMailbox)),
105+
_getActionTypeForMoveToSpam()
106+
);
116107
}
117108
)
118109
],
@@ -268,4 +259,36 @@ class TopBarThreadSelection extends StatelessWidget{
268259
: EmailActionType.markAsStarred;
269260
}
270261
}
262+
263+
String _getIconForMoveToSpam() {
264+
if (isSelectAllEmailsEnabled) {
265+
return selectedMailbox?.isSpam == true ? imagePaths.icNotSpam : imagePaths.icSpam;
266+
} else {
267+
return isAllSpam ? imagePaths.icNotSpam : imagePaths.icSpam;
268+
}
269+
}
270+
271+
String _getTooltipMessageForMoveToSpam(BuildContext context) {
272+
if (isSelectAllEmailsEnabled) {
273+
return selectedMailbox?.isSpam == true
274+
? AppLocalizations.of(context).allUnSpam
275+
: AppLocalizations.of(context).markAllAsSpam;
276+
} else {
277+
return isAllSpam
278+
? AppLocalizations.of(context).un_spam
279+
: AppLocalizations.of(context).mark_as_spam;
280+
}
281+
}
282+
283+
EmailActionType _getActionTypeForMoveToSpam() {
284+
if (isSelectAllEmailsEnabled) {
285+
return selectedMailbox?.isSpam == true
286+
? EmailActionType.allUnSpam
287+
: EmailActionType.markAllAsSpam;
288+
} else {
289+
return isAllSpam
290+
? EmailActionType.unSpam
291+
: EmailActionType.moveToSpam;
292+
}
293+
}
271294
}

lib/features/thread/presentation/thread_controller.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1658,6 +1658,22 @@ class ThreadController extends BaseController with EmailActionController, PopupM
16581658
selectedMailbox.countTotalEmails,
16591659
);
16601660
break;
1661+
case EmailActionType.markAllAsSpam:
1662+
mailboxDashBoardController.maskAllAsSpamSelectionAllEmails(
1663+
context,
1664+
_session!,
1665+
_accountId!,
1666+
selectedMailbox,
1667+
);
1668+
break;
1669+
case EmailActionType.allUnSpam:
1670+
mailboxDashBoardController.allUnSpamSelectionAllEmails(
1671+
context,
1672+
_session!,
1673+
_accountId!,
1674+
selectedMailbox,
1675+
);
1676+
break;
16611677
default:
16621678
break;
16631679
}

lib/main/localizations/app_localizations.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4688,4 +4688,18 @@ class AppLocalizations {
46884688
args: [reason]
46894689
);
46904690
}
4691+
4692+
String get allUnSpam {
4693+
return Intl.message(
4694+
'All UnSpam',
4695+
name: 'allUnSpam',
4696+
);
4697+
}
4698+
4699+
String get markAllAsSpam {
4700+
return Intl.message(
4701+
'Mark all as spam',
4702+
name: 'markAllAsSpam',
4703+
);
4704+
}
46914705
}

model/lib/email/email_action_type.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,6 @@ enum EmailActionType {
3737
moveAllToTrash,
3838
deleteAllPermanently,
3939
markAllAsStarred,
40+
markAllAsSpam,
41+
allUnSpam,
4042
}

0 commit comments

Comments
 (0)