From ae4b201a4fd8924b39bc530ef47028dfee07f566 Mon Sep 17 00:00:00 2001 From: hieubt Date: Tue, 3 Oct 2023 10:52:09 +0700 Subject: [PATCH] TF-2184 Update creator controller for creating rule with multiple actions (cherry picked from commit 965118870abddc5552183d8f0cae8279711a997b) --- .../rules_filter_creator_controller.dart | 104 ++++++++++++++++-- 1 file changed, 95 insertions(+), 9 deletions(-) diff --git a/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart b/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart index 00bbc198e..3012b3338 100644 --- a/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart +++ b/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart @@ -9,6 +9,7 @@ import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; +import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:model/model.dart'; import 'package:rule_filter/rule_filter/rule_action.dart'; @@ -209,8 +210,46 @@ class RulesFilterCreatorController extends BaseMailboxController { ); } conditionCombinerType.value = currentRule.conditionCombiner; - - emailRuleFilterActionSelected.value = EmailRuleFilterAction.moveMessage; + RuleAction currentAction = RuleAction( + appendIn: _currentTMailRule!.action.appendIn, + markAsImportant: _currentTMailRule!.action.markAsImportant, + markAsSeen: _currentTMailRule!.action.markAsSeen, + reject: _currentTMailRule!.action.reject, + ); + if (currentAction.reject == true) { + EmailRuleFilterAction? action = EmailRuleFilterAction.rejectIt; + RuleFilterActionArguments newRuleFilterAction = RuleFilterActionArguments.newAction(action); + listEmailRuleFilterActionSelected.add(newRuleFilterAction); + } + if (currentAction.markAsSeen == true) { + EmailRuleFilterAction? action = EmailRuleFilterAction.maskAsSeen; + RuleFilterActionArguments newRuleFilterAction = RuleFilterActionArguments.newAction(action); + listEmailRuleFilterActionSelected.add(newRuleFilterAction); + } + if (currentAction.markAsImportant == true) { + EmailRuleFilterAction? action = EmailRuleFilterAction.startIt; + RuleFilterActionArguments newRuleFilterAction = RuleFilterActionArguments.newAction(action); + listEmailRuleFilterActionSelected.add(newRuleFilterAction); + } + if (currentAction.appendIn.mailboxIds.isNotEmpty == true) { + for (var mailboxId in currentAction.appendIn.mailboxIds) { + if (mailboxId == findMailboxNodeByRole(PresentationMailbox.roleSpam)?.item.id) { + EmailRuleFilterAction? action = EmailRuleFilterAction.markAsSpam; + RuleFilterActionArguments newRuleFilterAction = RuleFilterActionArguments.newAction(action); + listEmailRuleFilterActionSelected.add(newRuleFilterAction); + } else { + EmailRuleFilterAction? action = EmailRuleFilterAction.moveMessage; + RuleFilterActionArguments newRuleFilterAction = RuleFilterActionArguments.newAction(action); + listEmailRuleFilterActionSelected.add(newRuleFilterAction); + } + } + } + + if (listEmailRuleFilterActionSelected.length >= maxCountAction) { + isShowAddAction.value = false; + } else { + isShowAddAction.value = true; + } _newRuleName = _currentTMailRule!.name; _setValueInputField(inputRuleNameController, _newRuleName ?? ''); @@ -229,9 +268,22 @@ class RulesFilterCreatorController extends BaseMailboxController { void _setUpMailboxSelected() { if (_currentTMailRule != null) { - final mailboxIdOfRule = _currentTMailRule!.action.appendIn.mailboxIds.first; - final mailboxNode = findMailboxNodeById(mailboxIdOfRule); - mailboxSelected.value = mailboxNode?.item; + final mailboxIdsOfRule = _currentTMailRule!.action.appendIn.mailboxIds; + for (var mailboxId in mailboxIdsOfRule) { + if (mailboxId != findMailboxNodeByRole(PresentationMailbox.roleSpam)?.item.id) { + final mailboxNode = findMailboxNodeById(mailboxId); + if (mailboxNode != null) { + mailboxSelected.value = mailboxNode.item; + } + } + } + RuleFilterActionArguments newRuleFilterAction = MoveMessageActionArguments(mailbox: mailboxSelected.value); + for (var filterAction in listEmailRuleFilterActionSelected) { + if (filterAction is MoveMessageActionArguments) { + listEmailRuleFilterActionSelected[listEmailRuleFilterActionSelected.indexOf(filterAction)] = newRuleFilterAction; + } + } + listEmailRuleFilterActionSelected.refresh(); } } @@ -423,14 +475,45 @@ class RulesFilterCreatorController extends BaseMailboxController { late EquatableMixin ruleFilterRequest; + List mailboxIds = []; + bool markAsSeen = false; + bool markAsImportant = false; + bool reject = false; + + for (var ruleFilterAction in listEmailRuleFilterActionSelected) { + if (ruleFilterAction is MoveMessageActionArguments) { + mailboxIds.add(ruleFilterAction.mailbox!.id); + } + if (ruleFilterAction.action is MarAsSpamActionArguments) { + MailboxId? spamMailboxId = findMailboxNodeByRole(PresentationMailbox.roleSpam)?.item.id; + if (spamMailboxId != null) { + mailboxIds.add(spamMailboxId); + } + } + if (ruleFilterAction is MarkAsSeenActionArguments) { + markAsSeen = true; + } + if (ruleFilterAction is StarItActionArguments) { + markAsImportant = true; + } + if (ruleFilterAction is RejectItActionArguments) { + reject = true; + markAsSeen = false; + markAsImportant = false; + } + } + if (actionType.value == CreatorActionType.create) { final newTMailRule = TMailRule( id: _currentTMailRule?.id, name: _newRuleName!, action: RuleAction( appendIn: RuleAppendIn( - mailboxIds: [mailboxSelected.value!.id] - ) + mailboxIds: mailboxIds + ), + markAsSeen: markAsSeen, + markAsImportant: markAsImportant, + reject: reject, ), conditionGroup: RuleConditionGroup( conditionCombiner: conditionCombinerType.value!, @@ -444,8 +527,11 @@ class RulesFilterCreatorController extends BaseMailboxController { name: _newRuleName!, action: RuleAction( appendIn: RuleAppendIn( - mailboxIds: [mailboxSelected.value!.id] - ) + mailboxIds: mailboxIds + ), + markAsSeen: markAsSeen, + markAsImportant: markAsImportant, + reject: reject, ), conditionGroup: RuleConditionGroup( conditionCombiner: conditionCombinerType.value!,