TF-2302 Fix move email to mailbox

(cherry picked from commit 639cba6bf9f5631fd36d0f1a65459beb5803a118)
This commit is contained in:
dab246
2023-11-07 13:53:35 +07:00
committed by Dat Vu
parent bfa596eb9f
commit 5c5aaec976
7 changed files with 18 additions and 49 deletions
+5 -11
View File
@@ -365,20 +365,14 @@ class EmailAPI with HandleSetErrorMixin {
AccountId accountId, AccountId accountId,
MoveToMailboxRequest moveRequest MoveToMailboxRequest moveRequest
) async { ) async {
requireCapability( final coreCapability = session.getCapabilityProperties<CoreCapability>(
moveRequest.session,
accountId,
[CapabilityIdentifier.jmapCore, CapabilityIdentifier.jmapMail]
);
final coreCapability = moveRequest.session.getCapabilityProperties<CoreCapability>(
accountId, accountId,
CapabilityIdentifier.jmapCore CapabilityIdentifier.jmapCore
); );
final maxMethodCount = coreCapability.maxCallsInRequest?.value.toInt() ?? CapabilityIdentifierExtension.defaultMaxCallsInRequest; int maxMethodCount = coreCapability?.maxCallsInRequest?.value.toInt() ?? CapabilityIdentifierExtension.defaultMaxCallsInRequest;
log('EmailAPI::moveToMailbox:maxMethodCount: $maxMethodCount');
var start = 0; int start = 0;
var end = 0; int end = 0;
final List<EmailId> listEmailIdResult = List.empty(growable: true); final List<EmailId> listEmailIdResult = List.empty(growable: true);
final listCurrentMailboxesEntries = moveRequest.currentMailboxes.entries.toList(); final listCurrentMailboxesEntries = moveRequest.currentMailboxes.entries.toList();
@@ -1,9 +1,8 @@
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart'; import 'package:model/email/email_action_type.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart'; import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
class MoveToMailboxRequest with EquatableMixin { class MoveToMailboxRequest with EquatableMixin {
@@ -13,13 +12,11 @@ class MoveToMailboxRequest with EquatableMixin {
final MoveAction moveAction; final MoveAction moveAction;
final EmailActionType emailActionType; final EmailActionType emailActionType;
final String? destinationPath; final String? destinationPath;
final Session session;
MoveToMailboxRequest( MoveToMailboxRequest(
this.currentMailboxes, this.currentMailboxes,
this.destinationMailboxId, this.destinationMailboxId,
this.moveAction, this.moveAction,
this.session,
this.emailActionType,{ this.emailActionType,{
this.destinationPath, this.destinationPath,
}); });
@@ -788,7 +788,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
{currentMailbox.id: [emailSelected.id!]}, {currentMailbox.id: [emailSelected.id!]},
destinationMailbox.id, destinationMailbox.id,
MoveAction.moving, MoveAction.moving,
session,
EmailActionType.moveToTrash)); EmailActionType.moveToTrash));
} else if (destinationMailbox.isSpam) { } else if (destinationMailbox.isSpam) {
_moveToSpamAction( _moveToSpamAction(
@@ -799,7 +798,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
{currentMailbox.id: [emailSelected.id!]}, {currentMailbox.id: [emailSelected.id!]},
destinationMailbox.id, destinationMailbox.id,
MoveAction.moving, MoveAction.moving,
session,
EmailActionType.moveToSpam)); EmailActionType.moveToSpam));
} else { } else {
_moveToMailbox( _moveToMailbox(
@@ -810,7 +808,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
{currentMailbox.id: [emailSelected.id!]}, {currentMailbox.id: [emailSelected.id!]},
destinationMailbox.id, destinationMailbox.id,
MoveAction.moving, MoveAction.moving,
session,
EmailActionType.moveToMailbox, EmailActionType.moveToMailbox,
destinationPath: destinationMailbox.mailboxPath)); destinationPath: destinationMailbox.mailboxPath));
} }
@@ -833,7 +830,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
{success.destinationMailboxId: [success.emailId]}, {success.destinationMailboxId: [success.emailId]},
success.currentMailboxId, success.currentMailboxId,
MoveAction.undo, MoveAction.undo,
mailboxDashBoardController.sessionCurrent!,
success.emailActionType)); success.emailActionType));
}, },
leadingSVGIcon: imagePaths.icFolderMailbox, leadingSVGIcon: imagePaths.icFolderMailbox,
@@ -868,7 +864,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
{currentMailbox.id: [email.id!]}, {currentMailbox.id: [email.id!]},
trashMailboxId, trashMailboxId,
MoveAction.moving, MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.moveToTrash) EmailActionType.moveToTrash)
); );
} }
@@ -899,7 +894,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
{currentMailbox.id: [email.id!]}, {currentMailbox.id: [email.id!]},
spamMailboxId, spamMailboxId,
MoveAction.moving, MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.moveToSpam) EmailActionType.moveToSpam)
); );
} }
@@ -920,7 +914,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
{spamMailboxId: [email.id!]}, {spamMailboxId: [email.id!]},
inboxMailboxId, inboxMailboxId,
MoveAction.moving, MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.unSpam) EmailActionType.unSpam)
); );
} }
@@ -187,10 +187,8 @@ class MailboxAPI with HandleSetErrorMixin {
Future<Map<Id, SetError>> deleteMultipleMailbox(Session session, AccountId accountId, List<MailboxId> mailboxIds) async { Future<Map<Id, SetError>> deleteMultipleMailbox(Session session, AccountId accountId, List<MailboxId> mailboxIds) async {
final coreCapability = session.getCapabilityProperties<CoreCapability>( final coreCapability = session.getCapabilityProperties<CoreCapability>(
accountId, accountId, CapabilityIdentifier.jmapCore);
CapabilityIdentifier.jmapCore final maxMethodCount = coreCapability?.maxCallsInRequest?.value.toInt() ?? 0;
);
final maxMethodCount = coreCapability.maxCallsInRequest?.value.toInt() ?? CapabilityIdentifierExtension.defaultMaxCallsInRequest;
final Map<Id,SetError> finalDeletedMailboxErrors = {}; final Map<Id,SetError> finalDeletedMailboxErrors = {};
var start = 0; var start = 0;
@@ -683,7 +683,6 @@ class MailboxDashBoardController extends ReloadableController {
{success.destinationMailboxId: [success.emailId]}, {success.destinationMailboxId: [success.emailId]},
success.currentMailboxId, success.currentMailboxId,
MoveAction.undo, MoveAction.undo,
sessionCurrent!,
success.emailActionType success.emailActionType
)); ));
}, },
@@ -909,7 +908,6 @@ class MailboxDashBoardController extends ReloadableController {
{currentMailbox.id: listEmailIds}, {currentMailbox.id: listEmailIds},
destinationMailbox.id, destinationMailbox.id,
MoveAction.moving, MoveAction.moving,
session,
EmailActionType.moveToTrash)); EmailActionType.moveToTrash));
} else if (destinationMailbox.isSpam) { } else if (destinationMailbox.isSpam) {
_moveSelectedEmailMultipleToMailboxAction( _moveSelectedEmailMultipleToMailboxAction(
@@ -919,7 +917,6 @@ class MailboxDashBoardController extends ReloadableController {
{currentMailbox.id: listEmailIds}, {currentMailbox.id: listEmailIds},
destinationMailbox.id, destinationMailbox.id,
MoveAction.moving, MoveAction.moving,
session,
EmailActionType.moveToSpam)); EmailActionType.moveToSpam));
} else { } else {
_moveSelectedEmailMultipleToMailboxAction( _moveSelectedEmailMultipleToMailboxAction(
@@ -929,7 +926,6 @@ class MailboxDashBoardController extends ReloadableController {
{currentMailbox.id: listEmailIds}, {currentMailbox.id: listEmailIds},
destinationMailbox.id, destinationMailbox.id,
MoveAction.moving, MoveAction.moving,
session,
EmailActionType.moveToMailbox, EmailActionType.moveToMailbox,
destinationPath: destinationMailbox.mailboxPath)); destinationPath: destinationMailbox.mailboxPath));
} }
@@ -973,7 +969,6 @@ class MailboxDashBoardController extends ReloadableController {
mapListEmails, mapListEmails,
destinationMailbox.id, destinationMailbox.id,
MoveAction.moving, MoveAction.moving,
sessionCurrent!,
EmailActionType.moveToTrash, EmailActionType.moveToTrash,
), ),
); );
@@ -985,7 +980,6 @@ class MailboxDashBoardController extends ReloadableController {
mapListEmails, mapListEmails,
destinationMailbox.id, destinationMailbox.id,
MoveAction.moving, MoveAction.moving,
sessionCurrent!,
EmailActionType.moveToSpam, EmailActionType.moveToSpam,
), ),
); );
@@ -997,7 +991,6 @@ class MailboxDashBoardController extends ReloadableController {
mapListEmails, mapListEmails,
destinationMailbox.id, destinationMailbox.id,
MoveAction.moving, MoveAction.moving,
sessionCurrent!,
EmailActionType.moveToMailbox, EmailActionType.moveToMailbox,
destinationPath: destinationMailbox.mailboxPath, destinationPath: destinationMailbox.mailboxPath,
), ),
@@ -1057,7 +1050,6 @@ class MailboxDashBoardController extends ReloadableController {
{newCurrentMailboxId: movedEmailIds}, {newCurrentMailboxId: movedEmailIds},
newDestinationMailboxId, newDestinationMailboxId,
MoveAction.undo, MoveAction.undo,
sessionCurrent!,
emailActionType!, emailActionType!,
destinationPath: destinationPath destinationPath: destinationPath
)); ));
@@ -1091,7 +1083,6 @@ class MailboxDashBoardController extends ReloadableController {
{mailboxCurrent.id: listEmails.listEmailIds}, {mailboxCurrent.id: listEmails.listEmailIds},
trashMailboxId, trashMailboxId,
MoveAction.moving, MoveAction.moving,
sessionCurrent!,
EmailActionType.moveToTrash) EmailActionType.moveToTrash)
); );
} }
@@ -1107,7 +1098,6 @@ class MailboxDashBoardController extends ReloadableController {
{mailboxCurrent.id: listEmail.listEmailIds}, {mailboxCurrent.id: listEmail.listEmailIds},
spamMailboxId, spamMailboxId,
MoveAction.moving, MoveAction.moving,
sessionCurrent!,
EmailActionType.moveToSpam) EmailActionType.moveToSpam)
); );
} }
@@ -1124,7 +1114,6 @@ class MailboxDashBoardController extends ReloadableController {
{spamMailboxId: listEmail.listEmailIds}, {spamMailboxId: listEmail.listEmailIds},
inboxMailboxId, inboxMailboxId,
MoveAction.moving, MoveAction.moving,
sessionCurrent!,
EmailActionType.unSpam) EmailActionType.unSpam)
); );
} }
@@ -1306,7 +1295,7 @@ class MailboxDashBoardController extends ReloadableController {
try { try {
if (sessionCurrent != null && accountId.value != null) { if (sessionCurrent != null && accountId.value != null) {
final mailCapability = sessionCurrent!.getCapabilityProperties<MailCapability>(accountId.value!, CapabilityIdentifier.jmapMail); final mailCapability = sessionCurrent!.getCapabilityProperties<MailCapability>(accountId.value!, CapabilityIdentifier.jmapMail);
final maxSizeAttachmentsPerEmail = mailCapability.maxSizeAttachmentsPerEmail; final maxSizeAttachmentsPerEmail = mailCapability?.maxSizeAttachmentsPerEmail;
log('MailboxDashBoardController::maxSizeAttachmentsPerEmail(): $maxSizeAttachmentsPerEmail'); log('MailboxDashBoardController::maxSizeAttachmentsPerEmail(): $maxSizeAttachmentsPerEmail');
return maxSizeAttachmentsPerEmail; return maxSizeAttachmentsPerEmail;
} }
@@ -60,7 +60,6 @@ mixin EmailActionController {
{mailboxContain.id: email.id != null ? [email.id!] : []}, {mailboxContain.id: email.id != null ? [email.id!] : []},
trashMailboxId, trashMailboxId,
MoveAction.moving, MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.moveToTrash) EmailActionType.moveToTrash)
); );
} }
@@ -83,7 +82,6 @@ mixin EmailActionController {
{mailboxContain.id: email.id != null ? [email.id!] : []}, {mailboxContain.id: email.id != null ? [email.id!] : []},
spamMailboxId, spamMailboxId,
MoveAction.moving, MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.moveToSpam) EmailActionType.moveToSpam)
); );
} }
@@ -103,7 +101,6 @@ mixin EmailActionController {
{spamMailboxId: email.id != null ? [email.id!] : []}, {spamMailboxId: email.id != null ? [email.id!] : []},
inboxMailboxId, inboxMailboxId,
MoveAction.moving, MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.unSpam) EmailActionType.unSpam)
); );
} }
@@ -164,7 +161,6 @@ mixin EmailActionController {
{currentMailbox.id: emailSelected.id != null ? [emailSelected.id!] : []}, {currentMailbox.id: emailSelected.id != null ? [emailSelected.id!] : []},
destinationMailbox.id, destinationMailbox.id,
MoveAction.moving, MoveAction.moving,
session,
EmailActionType.moveToTrash)); EmailActionType.moveToTrash));
} else if (destinationMailbox.isSpam) { } else if (destinationMailbox.isSpam) {
moveToSpamAction( moveToSpamAction(
@@ -174,7 +170,6 @@ mixin EmailActionController {
{currentMailbox.id: emailSelected.id != null ? [emailSelected.id!] : []}, {currentMailbox.id: emailSelected.id != null ? [emailSelected.id!] : []},
destinationMailbox.id, destinationMailbox.id,
MoveAction.moving, MoveAction.moving,
session,
EmailActionType.moveToSpam)); EmailActionType.moveToSpam));
} else { } else {
_moveToMailboxAction( _moveToMailboxAction(
@@ -184,7 +179,6 @@ mixin EmailActionController {
{currentMailbox.id: emailSelected.id != null ? [emailSelected.id!] : []}, {currentMailbox.id: emailSelected.id != null ? [emailSelected.id!] : []},
destinationMailbox.id, destinationMailbox.id,
MoveAction.moving, MoveAction.moving,
session,
EmailActionType.moveToMailbox, EmailActionType.moveToMailbox,
destinationPath: destinationMailbox.mailboxPath)); destinationPath: destinationMailbox.mailboxPath));
} }
+9 -5
View File
@@ -35,15 +35,19 @@ extension SessionExtension on Session {
return Uri.parse(uploadUri); return Uri.parse(uploadUri);
} }
T getCapabilityProperties<T extends CapabilityProperties>( T? getCapabilityProperties<T extends CapabilityProperties>(
AccountId accountId, AccountId accountId,
CapabilityIdentifier identifier CapabilityIdentifier identifier
) { ) {
var capability = accounts[accountId]!.accountCapabilities[identifier]; var capability = accounts[accountId]?.accountCapabilities[identifier];
if (capability is EmptyCapability) { if (capability == null || capability is EmptyCapability) {
capability = capabilities[identifier] as T; capability = capabilities[identifier];
}
if (capability is T) {
return capability;
} else {
return null;
} }
return (capability as T);
} }
JmapAccount get personalAccount { JmapAccount get personalAccount {