Fix MarkAsSpam not displayed when edit rule filter

This commit is contained in:
dab246
2024-08-26 10:12:48 +07:00
committed by Dat H. Pham
parent 150b4607d5
commit b67037a30b
6 changed files with 164 additions and 115 deletions
@@ -14,7 +14,7 @@ abstract class RuleFilterActionArguments with EquatableMixin {
case EmailRuleFilterAction.maskAsSeen: case EmailRuleFilterAction.maskAsSeen:
return MarkAsSeenActionArguments(); return MarkAsSeenActionArguments();
case EmailRuleFilterAction.markAsSpam: case EmailRuleFilterAction.markAsSpam:
return MarAsSpamActionArguments(); return MarkAsSpamActionArguments();
case EmailRuleFilterAction.forwardTo: case EmailRuleFilterAction.forwardTo:
return ForwardActionArguments(); return ForwardActionArguments();
case EmailRuleFilterAction.moveMessage: case EmailRuleFilterAction.moveMessage:
@@ -28,6 +28,8 @@ abstract class RuleFilterActionArguments with EquatableMixin {
} }
} }
factory RuleFilterActionArguments.emptyAction() => EmptyRuleFilterActionArguments();
@override @override
List<Object?> get props => [ List<Object?> get props => [
action, action,
@@ -55,8 +57,8 @@ class MarkAsSeenActionArguments extends RuleFilterActionArguments {
); );
} }
class MarAsSpamActionArguments extends RuleFilterActionArguments { class MarkAsSpamActionArguments extends RuleFilterActionArguments {
MarAsSpamActionArguments() : super( MarkAsSpamActionArguments() : super(
action: EmailRuleFilterAction.markAsSpam, action: EmailRuleFilterAction.markAsSpam,
); );
} }
@@ -9,7 +9,6 @@ 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/core/session/session.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.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:model/model.dart';
import 'package:rule_filter/rule_filter/rule_action.dart'; import 'package:rule_filter/rule_filter/rule_action.dart';
import 'package:rule_filter/rule_filter/rule_append_in.dart'; import 'package:rule_filter/rule_filter/rule_append_in.dart';
@@ -43,7 +42,6 @@ import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/dialog_router.dart'; import 'package:tmail_ui_user/main/routes/dialog_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart';
class RulesFilterCreatorController extends BaseMailboxController { class RulesFilterCreatorController extends BaseMailboxController {
final GetAllMailboxInteractor _getAllMailboxInteractor; final GetAllMailboxInteractor _getAllMailboxInteractor;
@@ -88,14 +86,12 @@ class RulesFilterCreatorController extends BaseMailboxController {
@override @override
void onInit() { void onInit() {
super.onInit(); super.onInit();
log('RulesFilterCreatorController::onInit():arguments: ${Get.arguments}');
arguments = Get.arguments; arguments = Get.arguments;
} }
@override @override
void onReady() { void onReady() {
super.onReady(); super.onReady();
log('RulesFilterCreatorController::onReady():');
if (arguments != null) { if (arguments != null) {
_accountId = arguments!.accountId; _accountId = arguments!.accountId;
_session = arguments!.session; _session = arguments!.session;
@@ -104,19 +100,14 @@ class RulesFilterCreatorController extends BaseMailboxController {
_mailboxDestination = arguments!.mailboxDestination; _mailboxDestination = arguments!.mailboxDestination;
actionType.value = arguments!.actionType; actionType.value = arguments!.actionType;
injectRuleFilterBindings(_session, _accountId); injectRuleFilterBindings(_session, _accountId);
try {
_getAllRulesInteractor = Get.find<GetAllRulesInteractor>();
} catch (e) {
logError('RulesFilterCreatorController::onInit(): ${e.toString()}');
}
_setUpDefaultValueRuleFilter(); _setUpDefaultValueRuleFilter();
_getAllRules(); _getAllRules();
_getAllMailboxAction();
} }
} }
@override @override
void onClose() { void onClose() {
log('RulesFilterCreatorController::onClose():');
inputRuleNameFocusNode.dispose(); inputRuleNameFocusNode.dispose();
inputRuleNameController.dispose(); inputRuleNameController.dispose();
for (var ruleConditionValueArguments in listRuleConditionValueArguments) { for (var ruleConditionValueArguments in listRuleConditionValueArguments) {
@@ -133,7 +124,6 @@ class RulesFilterCreatorController extends BaseMailboxController {
super.handleSuccessViewState(success); super.handleSuccessViewState(success);
if (success is GetAllMailboxSuccess) { if (success is GetAllMailboxSuccess) {
await buildTree(success.mailboxList); await buildTree(success.mailboxList);
_setUpMailboxSelected();
if (currentContext != null) { if (currentContext != null) {
await syncAllMailboxWithDisplayName(currentContext!); await syncAllMailboxWithDisplayName(currentContext!);
} }
@@ -145,7 +135,18 @@ class RulesFilterCreatorController extends BaseMailboxController {
} }
} }
@override
void onDone() {
viewState.value.fold((failure) => null, (success) {
if (success is GetAllMailboxSuccess) {
_setUpRuleFilterActions();
}
});
}
void _getAllRules() { void _getAllRules() {
_getAllRulesInteractor = getBinding<GetAllRulesInteractor>();
if (_accountId != null && _getAllRulesInteractor != null) { if (_accountId != null && _getAllRulesInteractor != null) {
consumeState(_getAllRulesInteractor!.execute(_accountId!)); consumeState(_getAllRulesInteractor!.execute(_accountId!));
} }
@@ -168,8 +169,6 @@ class RulesFilterCreatorController extends BaseMailboxController {
); );
listRuleConditionValueArguments.add(newRuleConditionValueArguments); listRuleConditionValueArguments.add(newRuleConditionValueArguments);
isShowAddAction.value = true; isShowAddAction.value = true;
RuleFilterActionArguments newRuleFilterAction = RuleFilterActionArguments.newAction(null);
listEmailRuleFilterActionSelected.add(newRuleFilterAction);
if (_emailAddress != null) { if (_emailAddress != null) {
RuleCondition firstRuleCondition = RuleCondition( RuleCondition firstRuleCondition = RuleCondition(
field: rule_condition.Field.from, field: rule_condition.Field.from,
@@ -184,16 +183,25 @@ class RulesFilterCreatorController extends BaseMailboxController {
); );
} }
if (_mailboxDestination != null) { if (_mailboxDestination != null) {
mailboxSelected.value = _mailboxDestination; if (_mailboxDestination!.isSpam) {
listEmailRuleFilterActionSelected.add(MarkAsSpamActionArguments());
} else {
mailboxSelected.value = _mailboxDestination;
listEmailRuleFilterActionSelected.add(
MoveMessageActionArguments(mailbox: _mailboxDestination)
);
}
} else {
listEmailRuleFilterActionSelected.add(RuleFilterActionArguments.emptyAction());
} }
break; break;
case CreatorActionType.edit: case CreatorActionType.edit:
if (_currentTMailRule != null) { if (_currentTMailRule == null) {
RuleConditionGroup currentRule = RuleConditionGroup( return;
conditionCombiner: _currentTMailRule!.conditionGroup!.conditionCombiner, }
conditions: _currentTMailRule!.conditionGroup!.conditions,
); if (_currentTMailRule!.conditionGroup?.conditions.isNotEmpty == true) {
for (var condition in currentRule.conditions) { for (var condition in _currentTMailRule!.conditionGroup!.conditions) {
listRuleCondition.add(condition); listRuleCondition.add(condition);
RulesFilterInputFieldArguments newRuleConditionValueArguments = RulesFilterInputFieldArguments( RulesFilterInputFieldArguments newRuleConditionValueArguments = RulesFilterInputFieldArguments(
focusNode: FocusNode(), focusNode: FocusNode(),
@@ -206,90 +214,70 @@ class RulesFilterCreatorController extends BaseMailboxController {
condition.value condition.value
); );
} }
conditionCombinerType.value = currentRule.conditionCombiner;
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.appendIn.mailboxIds.isNotEmpty == true) {
final spamMailboxId = findMailboxNodeByRole(PresentationMailbox.roleJunk)?.item.id
?? findMailboxNodeByRole(PresentationMailbox.roleSpam)?.item.id;
for (var mailboxId in currentAction.appendIn.mailboxIds) {
if (mailboxId == spamMailboxId) {
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 (currentAction.markAsImportant == true) {
EmailRuleFilterAction? action = EmailRuleFilterAction.starIt;
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 (listEmailRuleFilterActionSelected.length >= maxCountAction) {
isShowAddAction.value = false;
} else {
isShowAddAction.value = true;
}
_newRuleName = _currentTMailRule!.name;
_setValueInputField(inputRuleNameController, _newRuleName ?? '');
_getAllMailboxAction();
} }
conditionCombinerType.value = _currentTMailRule!.conditionGroup?.conditionCombiner;
if (_currentTMailRule!.action.reject == true) {
EmailRuleFilterAction? action = EmailRuleFilterAction.rejectIt;
listEmailRuleFilterActionSelected.add(RuleFilterActionArguments.newAction(action));
}
if (_currentTMailRule!.action.markAsImportant == true) {
EmailRuleFilterAction? action = EmailRuleFilterAction.starIt;
listEmailRuleFilterActionSelected.add(RuleFilterActionArguments.newAction(action));
}
if (_currentTMailRule!.action.markAsSeen == true) {
EmailRuleFilterAction? action = EmailRuleFilterAction.maskAsSeen;
listEmailRuleFilterActionSelected.add(RuleFilterActionArguments.newAction(action));
}
if (listEmailRuleFilterActionSelected.length >= maxCountAction) {
isShowAddAction.value = false;
} else {
isShowAddAction.value = true;
}
_newRuleName = _currentTMailRule!.name;
_setValueInputField(inputRuleNameController, _newRuleName ?? '');
break; break;
} }
inputRuleNameFocusNode.requestFocus(); inputRuleNameFocusNode.requestFocus();
} }
MailboxId? getSpamMailboxId() {
return findMailboxNodeByRole(PresentationMailbox.roleJunk)?.item.id
?? findMailboxNodeByRole(PresentationMailbox.roleSpam)?.item.id;
}
void _setValueInputField(TextEditingController? controller, String value) { void _setValueInputField(TextEditingController? controller, String value) {
controller?.value = controller.value.copyWith( controller?.value = controller.value.copyWith(
text: value, text: value,
selection: TextSelection.collapsed(offset: value.length)); selection: TextSelection.collapsed(offset: value.length));
} }
void _setUpMailboxSelected() { void _setUpRuleFilterActions() {
if (_currentTMailRule != null) { if (_currentTMailRule!.action.appendIn.mailboxIds.isNotEmpty != true) return;
final mailboxIdsOfRule = _currentTMailRule!.action.appendIn.mailboxIds;
final spamMailboxId = findMailboxNodeByRole(PresentationMailbox.roleJunk)?.item.id final mailboxNode = findMailboxNodeById(
?? findMailboxNodeByRole(PresentationMailbox.roleSpam)?.item.id; _currentTMailRule!.action.appendIn.mailboxIds.first);
for (var mailboxId in mailboxIdsOfRule) {
if (mailboxId != spamMailboxId) { if (mailboxNode == null) {
final mailboxNode = findMailboxNodeById(mailboxId); mailboxSelected.value = PresentationMailbox.unifiedMailbox;
if (mailboxNode != null) { listEmailRuleFilterActionSelected.add(
mailboxSelected.value = mailboxNode.item; MoveMessageActionArguments(mailbox: PresentationMailbox.unifiedMailbox));
} } else if (mailboxNode.item.isSpam) {
} listEmailRuleFilterActionSelected.add(MarkAsSpamActionArguments());
} } else {
RuleFilterActionArguments newRuleFilterAction = MoveMessageActionArguments(mailbox: mailboxSelected.value); mailboxSelected.value = mailboxNode.item;
for (var filterAction in listEmailRuleFilterActionSelected) { listEmailRuleFilterActionSelected.add(
if (filterAction is MoveMessageActionArguments) { MoveMessageActionArguments(mailbox: mailboxNode.item));
listEmailRuleFilterActionSelected[listEmailRuleFilterActionSelected.indexOf(filterAction)] = newRuleFilterAction;
}
}
listEmailRuleFilterActionSelected.refresh();
} }
} }
void _getAllMailboxAction() { void _getAllMailboxAction() {
if (_accountId != null) { if (_accountId != null && _session != null) {
consumeState(_getAllMailboxInteractor.execute(_session!, _accountId!)); consumeState(_getAllMailboxInteractor.execute(_session!, _accountId!));
} }
} }
@@ -358,7 +346,11 @@ class RulesFilterCreatorController extends BaseMailboxController {
} }
} }
void selectEmailRuleFilterAction(EmailRuleFilterAction? newAction, int ruleFilterActionIndex) { void selectEmailRuleFilterAction(
BuildContext context,
EmailRuleFilterAction? newAction,
int ruleFilterActionIndex
) {
RuleFilterActionArguments newRuleFilterAction = RuleFilterActionArguments.newAction(newAction); RuleFilterActionArguments newRuleFilterAction = RuleFilterActionArguments.newAction(newAction);
if (newRuleFilterAction is RejectItActionArguments) { if (newRuleFilterAction is RejectItActionArguments) {
listEmailRuleFilterActionSelected.clear(); listEmailRuleFilterActionSelected.clear();
@@ -378,11 +370,43 @@ class RulesFilterCreatorController extends BaseMailboxController {
currentOverlayContext!, currentOverlayContext!,
AppLocalizations.of(currentContext!).duplicatedActionError, AppLocalizations.of(currentContext!).duplicatedActionError,
); );
} else { return;
listEmailRuleFilterActionSelected[ruleFilterActionIndex] = newRuleFilterAction;
} }
if (newAction == EmailRuleFilterAction.markAsSpam) {
final moveMessageActionIndex = listEmailRuleFilterActionSelected
.indexWhere((filter) => filter.action == EmailRuleFilterAction.moveMessage);
log('RulesFilterCreatorController::selectEmailRuleFilterAction: moveMessageActionIndex = $moveMessageActionIndex');
if (moveMessageActionIndex != -1) {
mailboxSelected.value = null;
listEmailRuleFilterActionSelected[ruleFilterActionIndex] = newRuleFilterAction;
if (listEmailRuleFilterActionSelected.length > 1) {
listEmailRuleFilterActionSelected.removeAt(moveMessageActionIndex);
}
isShowAddAction.value = listEmailRuleFilterActionSelected.length < maxCountAction;
listEmailRuleFilterActionSelected.refresh();
return;
}
}
if (newAction == EmailRuleFilterAction.moveMessage) {
final markAsSpamActionIndex = listEmailRuleFilterActionSelected
.indexWhere((filter) => filter.action == EmailRuleFilterAction.markAsSpam);
log('RulesFilterCreatorController::selectEmailRuleFilterAction: markAsSpamActionIndex = $markAsSpamActionIndex');
if (markAsSpamActionIndex != -1) {
listEmailRuleFilterActionSelected[ruleFilterActionIndex] = newRuleFilterAction;
if (listEmailRuleFilterActionSelected.length > 1) {
listEmailRuleFilterActionSelected.removeAt(markAsSpamActionIndex);
}
isShowAddAction.value = listEmailRuleFilterActionSelected.length < maxCountAction;
listEmailRuleFilterActionSelected.refresh();
return;
}
}
listEmailRuleFilterActionSelected[ruleFilterActionIndex] = newRuleFilterAction;
listEmailRuleFilterActionSelected.refresh();
} }
listEmailRuleFilterActionSelected.refresh();
} }
void selectMailbox(BuildContext context, int ruleFilterActionIndex) async { void selectMailbox(BuildContext context, int ruleFilterActionIndex) async {
@@ -454,11 +478,19 @@ class RulesFilterCreatorController extends BaseMailboxController {
final errorAction = _getErrorStringByInputValue(context, mailboxSelected.value?.getDisplayName(context)); final errorAction = _getErrorStringByInputValue(context, mailboxSelected.value?.getDisplayName(context));
log('RulesFilterCreatorController::createNewRuleFilter:errorAction: $errorAction'); log('RulesFilterCreatorController::createNewRuleFilter:errorAction: $errorAction');
if (errorAction?.isNotEmpty == true) { if (errorAction?.isNotEmpty == true) {
if (currentOverlayContext != null && currentContext != null) { appToast.showToastErrorMessage(
appToast.showToastErrorMessage( context,
currentOverlayContext!, AppLocalizations.of(context).notSelectedMailboxToMoveMessage);
AppLocalizations.of(currentContext!).notSelectedMailboxToMoveMessage); return;
} }
}
if (ruleFilterAction is MarkAsSpamActionArguments) {
final spamMailboxId = getSpamMailboxId();
log('RulesFilterCreatorController::createNewRuleFilter:spamMailboxId: ${spamMailboxId?.asString}');
if (spamMailboxId == null) {
appToast.showToastErrorMessage(
context,
AppLocalizations.of(context).spamFolderNotFound);
return; return;
} }
} }
@@ -485,9 +517,8 @@ class RulesFilterCreatorController extends BaseMailboxController {
if (ruleFilterAction is MoveMessageActionArguments) { if (ruleFilterAction is MoveMessageActionArguments) {
mailboxIds.add(ruleFilterAction.mailbox!.id); mailboxIds.add(ruleFilterAction.mailbox!.id);
} }
if (ruleFilterAction.action is MarAsSpamActionArguments) { if (ruleFilterAction is MarkAsSpamActionArguments) {
final spamMailboxId = findMailboxNodeByRole(PresentationMailbox.roleJunk)?.item.id final spamMailboxId = getSpamMailboxId();
?? findMailboxNodeByRole(PresentationMailbox.roleSpam)?.item.id;
if (spamMailboxId != null) { if (spamMailboxId != null) {
mailboxIds.add(spamMailboxId); mailboxIds.add(spamMailboxId);
} }
@@ -573,9 +604,9 @@ class RulesFilterCreatorController extends BaseMailboxController {
conditionCombinerType.value = combinerType; conditionCombinerType.value = combinerType;
} }
} }
void tapAddAction() { void tapAddAction() {
RuleFilterActionArguments newRuleFilterAction = RuleFilterActionArguments.newAction(null); listEmailRuleFilterActionSelected.add(RuleFilterActionArguments.emptyAction());
listEmailRuleFilterActionSelected.add(newRuleFilterAction);
if (listEmailRuleFilterActionSelected.length >= maxCountAction) { if (listEmailRuleFilterActionSelected.length >= maxCountAction) {
isShowAddAction.value = false; isShowAddAction.value = false;
} }
@@ -183,7 +183,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
responsiveUtils: controller.responsiveUtils, responsiveUtils: controller.responsiveUtils,
actionList: controller.listEmailRuleFilterActionSelected, actionList: controller.listEmailRuleFilterActionSelected,
onActionChanged: (newAction, index) { onActionChanged: (newAction, index) {
controller.selectEmailRuleFilterAction(newAction, index); controller.selectEmailRuleFilterAction(context, newAction, index);
}, },
forwardEmailEditingController: controller.forwardEmailController, forwardEmailEditingController: controller.forwardEmailController,
forwardEmailFocusNode: controller.forwardEmailFocusNode, forwardEmailFocusNode: controller.forwardEmailFocusNode,
@@ -344,7 +344,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
responsiveUtils: controller.responsiveUtils, responsiveUtils: controller.responsiveUtils,
actionList: controller.listEmailRuleFilterActionSelected, actionList: controller.listEmailRuleFilterActionSelected,
onActionChanged: (newAction, index) { onActionChanged: (newAction, index) {
controller.selectEmailRuleFilterAction(newAction, index); controller.selectEmailRuleFilterAction(context, newAction, index);
}, },
forwardEmailEditingController: controller.forwardEmailController, forwardEmailEditingController: controller.forwardEmailController,
forwardEmailFocusNode: controller.forwardEmailFocusNode, forwardEmailFocusNode: controller.forwardEmailFocusNode,
@@ -807,7 +807,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
fit: BoxFit.fill)) fit: BoxFit.fill))
..onActionClick((ruleAction) { ..onActionClick((ruleAction) {
if (ruleAction != controller.listEmailRuleFilterActionSelected[ruleActionIndex].action) { if (ruleAction != controller.listEmailRuleFilterActionSelected[ruleActionIndex].action) {
controller.selectEmailRuleFilterAction(ruleAction, ruleActionIndex); controller.selectEmailRuleFilterAction(context, ruleAction, ruleActionIndex);
} }
popBack(); popBack();
})) }))
+7 -1
View File
@@ -1,5 +1,5 @@
{ {
"@@last_modified": "2024-08-19T19:20:23.876948", "@@last_modified": "2024-08-23T16:45:33.629548",
"initializing_data": "Initializing data...", "initializing_data": "Initializing data...",
"@initializing_data": { "@initializing_data": {
"type": "text", "type": "text",
@@ -3999,5 +3999,11 @@
"type": "text", "type": "text",
"placeholders_order": [], "placeholders_order": [],
"placeholders": {} "placeholders": {}
},
"spamFolderNotFound": "Spam folder not found",
"@spamFolderNotFound": {
"type": "text",
"placeholders_order": [],
"placeholders": {}
} }
} }
@@ -4188,4 +4188,11 @@ class AppLocalizations {
'This image cannot be pasted into the editor.', 'This image cannot be pasted into the editor.',
name: 'thisImageCannotBePastedIntoTheEditor'); name: 'thisImageCannotBePastedIntoTheEditor');
} }
String get spamFolderNotFound {
return Intl.message(
'Spam folder not found',
name: 'spamFolderNotFound',
);
}
} }
+9 -6
View File
@@ -4,27 +4,30 @@ import 'package:rule_filter/rule_filter/rule_append_in.dart';
part 'rule_action.g.dart'; part 'rule_action.g.dart';
@JsonSerializable(explicitToJson: true) @JsonSerializable(explicitToJson: true, includeIfNull: false)
class RuleAction with EquatableMixin { class RuleAction with EquatableMixin {
final RuleAppendIn appendIn; final RuleAppendIn appendIn;
@JsonKey(includeIfNull: false)
final bool? markAsSeen; final bool? markAsSeen;
@JsonKey(includeIfNull: false)
final bool? markAsImportant; final bool? markAsImportant;
@JsonKey(includeIfNull: false)
final bool? reject; final bool? reject;
final List<String>? withKeywords;
RuleAction({ RuleAction({
required this.appendIn, required this.appendIn,
this.markAsSeen, this.markAsSeen,
this.markAsImportant, this.markAsImportant,
this.reject, this.reject,
this.withKeywords,
}); });
@override @override
List<Object?> get props => [ List<Object?> get props => [
appendIn, appendIn,
]; markAsSeen,
markAsImportant,
reject,
withKeywords,
];
factory RuleAction.fromJson(Map<String, dynamic> json) => factory RuleAction.fromJson(Map<String, dynamic> json) =>
_$RuleActionFromJson(json); _$RuleActionFromJson(json);