Skip to content

Commit 0922b53

Browse files
committed
TF-2646 Handle mark all as Spam/UnSpam for selection emails
1 parent b05496c commit 0922b53

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
@@ -3262,6 +3262,52 @@ class MailboxDashBoardController extends ReloadableController
32623262
);
32633263
}
32643264

3265+
Future<void> maskAllAsSpamSelectionAllEmails(
3266+
BuildContext context,
3267+
Session session,
3268+
AccountId accountId,
3269+
PresentationMailbox currentMailbox
3270+
) async {
3271+
final spamMailboxId = getMailboxIdByRole(PresentationMailbox.roleSpam);
3272+
3273+
if (spamMailboxId == null) return;
3274+
3275+
final spamMailboxPath = mapMailboxById[spamMailboxId]?.getDisplayName(context) ?? '';
3276+
3277+
consumeState(_moveAllSelectionAllEmailsInteractor.execute(
3278+
session,
3279+
accountId,
3280+
currentMailbox.id,
3281+
spamMailboxId,
3282+
spamMailboxPath,
3283+
currentMailbox.countTotalEmails,
3284+
_moveAllSelectionAllEmailsStreamController
3285+
));
3286+
}
3287+
3288+
Future<void> allUnSpamSelectionAllEmails(
3289+
BuildContext context,
3290+
Session session,
3291+
AccountId accountId,
3292+
PresentationMailbox currentMailbox
3293+
) async {
3294+
final inboxMailboxId = getMailboxIdByRole(PresentationMailbox.roleInbox);
3295+
3296+
if (inboxMailboxId == null) return;
3297+
3298+
final inboxMailboxPath = mapMailboxById[inboxMailboxId]?.getDisplayName(context) ?? '';
3299+
3300+
consumeState(_moveAllSelectionAllEmailsInteractor.execute(
3301+
session,
3302+
accountId,
3303+
currentMailbox.id,
3304+
inboxMailboxId,
3305+
inboxMailboxPath,
3306+
currentMailbox.countTotalEmails,
3307+
_moveAllSelectionAllEmailsStreamController
3308+
));
3309+
}
3310+
32653311
@override
32663312
void onClose() {
32673313
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
@@ -4599,4 +4599,18 @@ class AppLocalizations {
45994599
args: [reason]
46004600
);
46014601
}
4602+
4603+
String get allUnSpam {
4604+
return Intl.message(
4605+
'All UnSpam',
4606+
name: 'allUnSpam',
4607+
);
4608+
}
4609+
4610+
String get markAllAsSpam {
4611+
return Intl.message(
4612+
'Mark all as spam',
4613+
name: 'markAllAsSpam',
4614+
);
4615+
}
46024616
}

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)