Adding functionality for mails to be unread when moved to spam.

Rebasing

(cherry picked from commit 4a907520bc0b53ff42cb7d6cde40771a649629f5)
This commit is contained in:
david.potoma
2023-11-05 12:49:30 +01:00
committed by Dat Vu
parent 34caadc2b7
commit 603acaa35a
3 changed files with 20 additions and 3 deletions
@@ -38,6 +38,7 @@ import 'package:model/account/account_request.dart';
import 'package:model/account/authentication_type.dart';
import 'package:model/download/download_task_id.dart';
import 'package:model/email/attachment.dart';
import 'package:model/email/email_action_type.dart';
import 'package:model/email/mark_star_action.dart';
import 'package:model/email/read_actions.dart';
import 'package:model/extensions/email_extension.dart';
@@ -52,6 +53,7 @@ import 'package:tmail_ui_user/features/base/mixin/handle_error_mixin.dart';
import 'package:tmail_ui_user/features/composer/domain/exceptions/set_method_exception.dart';
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
import 'package:tmail_ui_user/features/email/domain/exceptions/email_exceptions.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
import 'package:tmail_ui_user/features/email/domain/state/download_attachment_for_web_state.dart';
import 'package:tmail_ui_user/features/login/domain/exceptions/authentication_exception.dart';
@@ -388,8 +390,13 @@ class EmailAPI with HandleSetErrorMixin {
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
final currentSetEmailInvocations = currentExecuteList.map((currentItem) {
final moveProperties = (moveRequest.moveAction == MoveAction.moving && moveRequest.emailActionType == EmailActionType.moveToSpam)
? currentItem.value.generateMapUpdateObjectMoveToSpam(currentItem.key, moveRequest.destinationMailboxId)
: currentItem.value.generateMapUpdateObjectMoveToMailbox(currentItem.key, moveRequest.destinationMailboxId);
return SetEmailMethod(accountId)
..addUpdates(currentItem.value.generateMapUpdateObjectMoveToMailbox(currentItem.key, moveRequest.destinationMailboxId));
..addUpdates(moveProperties);
}).map(requestBuilder.invocation).toList();
final capabilities = {CapabilityIdentifier.jmapCore, CapabilityIdentifier.jmapMail}
@@ -30,10 +30,10 @@ extension ListEmailIdExtension on List<EmailId> {
};
}
Map<Id, PatchObject> generateMapUpdateObjectMarkAsSpam(MailboxId spamMailboxId) {
Map<Id, PatchObject> generateMapUpdateObjectMoveToSpam(MailboxId currentMailboxId, MailboxId spamMailboxId) {
return {
for (var emailId in this)
emailId.id: spamMailboxId.generateActionPath()
emailId.id: currentMailboxId.generateMoveToSpamActionPath(currentMailboxId, spamMailboxId)
};
}
@@ -1,6 +1,8 @@
import 'package:jmap_dart_client/jmap/core/patch_object.dart';
import 'package:jmap_dart_client/jmap/core/reference_id.dart';
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/extensions/keyword_identifier_extension.dart';
extension MailboxIdExtension on MailboxId {
String generatePath() {
@@ -24,5 +26,13 @@ extension MailboxIdExtension on MailboxId {
});
}
PatchObject generateMoveToSpamActionPath(MailboxId currentMailboxId, MailboxId spamMailboxId) {
return PatchObject({
currentMailboxId.generatePath(): null,
spamMailboxId.generatePath(): true,
KeyWordIdentifier.emailSeen.generatePath(): true
});
}
String get asString => id.value;
}