Skip to content

Commit 62ce1ac

Browse files
committed
TF-2646 Handle mark all as Spam/UnSpam for selection emails
1 parent f5d45b3 commit 62ce1ac

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
@@ -3549,6 +3549,52 @@ class MailboxDashBoardController extends ReloadableController
35493549
}
35503550
}
35513551

3552+
Future<void> maskAllAsSpamSelectionAllEmails(
3553+
BuildContext context,
3554+
Session session,
3555+
AccountId accountId,
3556+
PresentationMailbox currentMailbox
3557+
) async {
3558+
final spamMailboxId = getMailboxIdByRole(PresentationMailbox.roleSpam);
3559+
3560+
if (spamMailboxId == null) return;
3561+
3562+
final spamMailboxPath = mapMailboxById[spamMailboxId]?.getDisplayName(context) ?? '';
3563+
3564+
consumeState(_moveAllSelectionAllEmailsInteractor.execute(
3565+
session,
3566+
accountId,
3567+
currentMailbox.id,
3568+
spamMailboxId,
3569+
spamMailboxPath,
3570+
currentMailbox.countTotalEmails,
3571+
_moveAllSelectionAllEmailsStreamController
3572+
));
3573+
}
3574+
3575+
Future<void> allUnSpamSelectionAllEmails(
3576+
BuildContext context,
3577+
Session session,
3578+
AccountId accountId,
3579+
PresentationMailbox currentMailbox
3580+
) async {
3581+
final inboxMailboxId = getMailboxIdByRole(PresentationMailbox.roleInbox);
3582+
3583+
if (inboxMailboxId == null) return;
3584+
3585+
final inboxMailboxPath = mapMailboxById[inboxMailboxId]?.getDisplayName(context) ?? '';
3586+
3587+
consumeState(_moveAllSelectionAllEmailsInteractor.execute(
3588+
session,
3589+
accountId,
3590+
currentMailbox.id,
3591+
inboxMailboxId,
3592+
inboxMailboxPath,
3593+
currentMailbox.countTotalEmails,
3594+
_moveAllSelectionAllEmailsStreamController
3595+
));
3596+
}
3597+
35523598
@override
35533599
void onClose() {
35543600
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
@@ -4608,4 +4608,18 @@ class AppLocalizations {
46084608
args: [reason]
46094609
);
46104610
}
4611+
4612+
String get allUnSpam {
4613+
return Intl.message(
4614+
'All UnSpam',
4615+
name: 'allUnSpam',
4616+
);
4617+
}
4618+
4619+
String get markAllAsSpam {
4620+
return Intl.message(
4621+
'Mark all as spam',
4622+
name: 'markAllAsSpam',
4623+
);
4624+
}
46114625
}

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)