Skip to content

Commit cb1b524

Browse files
committed
TF-2646 Handle mark all as Spam/UnSpam for selection emails
1 parent 48e4fdf commit cb1b524

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
@@ -3257,6 +3257,52 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
32573257
);
32583258
}
32593259

3260+
Future<void> maskAllAsSpamSelectionAllEmails(
3261+
BuildContext context,
3262+
Session session,
3263+
AccountId accountId,
3264+
PresentationMailbox currentMailbox
3265+
) async {
3266+
final spamMailboxId = getMailboxIdByRole(PresentationMailbox.roleSpam);
3267+
3268+
if (spamMailboxId == null) return;
3269+
3270+
final spamMailboxPath = mapMailboxById[spamMailboxId]?.getDisplayName(context) ?? '';
3271+
3272+
consumeState(_moveAllSelectionAllEmailsInteractor.execute(
3273+
session,
3274+
accountId,
3275+
currentMailbox.id,
3276+
spamMailboxId,
3277+
spamMailboxPath,
3278+
currentMailbox.countTotalEmails,
3279+
_moveAllSelectionAllEmailsStreamController
3280+
));
3281+
}
3282+
3283+
Future<void> allUnSpamSelectionAllEmails(
3284+
BuildContext context,
3285+
Session session,
3286+
AccountId accountId,
3287+
PresentationMailbox currentMailbox
3288+
) async {
3289+
final inboxMailboxId = getMailboxIdByRole(PresentationMailbox.roleInbox);
3290+
3291+
if (inboxMailboxId == null) return;
3292+
3293+
final inboxMailboxPath = mapMailboxById[inboxMailboxId]?.getDisplayName(context) ?? '';
3294+
3295+
consumeState(_moveAllSelectionAllEmailsInteractor.execute(
3296+
session,
3297+
accountId,
3298+
currentMailbox.id,
3299+
inboxMailboxId,
3300+
inboxMailboxPath,
3301+
currentMailbox.countTotalEmails,
3302+
_moveAllSelectionAllEmailsStreamController
3303+
));
3304+
}
3305+
32603306
@override
32613307
void onClose() {
32623308
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
@@ -1538,6 +1538,22 @@ class ThreadController extends BaseController with EmailActionController, PopupM
15381538
selectedMailbox.countTotalEmails
15391539
);
15401540
break;
1541+
case EmailActionType.markAllAsSpam:
1542+
mailboxDashBoardController.maskAllAsSpamSelectionAllEmails(
1543+
context,
1544+
_session!,
1545+
_accountId!,
1546+
selectedMailbox,
1547+
);
1548+
break;
1549+
case EmailActionType.allUnSpam:
1550+
mailboxDashBoardController.allUnSpamSelectionAllEmails(
1551+
context,
1552+
_session!,
1553+
_accountId!,
1554+
selectedMailbox,
1555+
);
1556+
break;
15411557
default:
15421558
break;
15431559
}

lib/main/localizations/app_localizations.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4583,4 +4583,18 @@ class AppLocalizations {
45834583
args: [reason]
45844584
);
45854585
}
4586+
4587+
String get allUnSpam {
4588+
return Intl.message(
4589+
'All UnSpam',
4590+
name: 'allUnSpam',
4591+
);
4592+
}
4593+
4594+
String get markAllAsSpam {
4595+
return Intl.message(
4596+
'Mark all as spam',
4597+
name: 'markAllAsSpam',
4598+
);
4599+
}
45864600
}

model/lib/email/email_action_type.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,6 @@ enum EmailActionType {
3535
moveAllToTrash,
3636
deleteAllPermanently,
3737
markAllAsStarred,
38+
markAllAsSpam,
39+
allUnSpam,
3840
}

0 commit comments

Comments
 (0)