From 5c5aaec976088938ce34ed53bd7d1e323d72b3b8 Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 7 Nov 2023 13:53:35 +0700 Subject: [PATCH] TF-2302 Fix move email to mailbox (cherry picked from commit 639cba6bf9f5631fd36d0f1a65459beb5803a118) --- lib/features/email/data/network/email_api.dart | 16 +++++----------- .../domain/model/move_to_mailbox_request.dart | 5 +---- .../controller/single_email_controller.dart | 7 ------- .../mailbox/data/network/mailbox_api.dart | 6 ++---- .../controller/mailbox_dashboard_controller.dart | 13 +------------ .../mixin/email_action_controller.dart | 6 ------ model/lib/extensions/session_extension.dart | 14 +++++++++----- 7 files changed, 18 insertions(+), 49 deletions(-) diff --git a/lib/features/email/data/network/email_api.dart b/lib/features/email/data/network/email_api.dart index 4446ed769..4150f73cf 100644 --- a/lib/features/email/data/network/email_api.dart +++ b/lib/features/email/data/network/email_api.dart @@ -365,20 +365,14 @@ class EmailAPI with HandleSetErrorMixin { AccountId accountId, MoveToMailboxRequest moveRequest ) async { - requireCapability( - moveRequest.session, - accountId, - [CapabilityIdentifier.jmapCore, CapabilityIdentifier.jmapMail] - ); - - final coreCapability = moveRequest.session.getCapabilityProperties( + final coreCapability = session.getCapabilityProperties( accountId, CapabilityIdentifier.jmapCore ); - final maxMethodCount = coreCapability.maxCallsInRequest?.value.toInt() ?? CapabilityIdentifierExtension.defaultMaxCallsInRequest; - - var start = 0; - var end = 0; + int maxMethodCount = coreCapability?.maxCallsInRequest?.value.toInt() ?? CapabilityIdentifierExtension.defaultMaxCallsInRequest; + log('EmailAPI::moveToMailbox:maxMethodCount: $maxMethodCount'); + int start = 0; + int end = 0; final List listEmailIdResult = List.empty(growable: true); final listCurrentMailboxesEntries = moveRequest.currentMailboxes.entries.toList(); diff --git a/lib/features/email/domain/model/move_to_mailbox_request.dart b/lib/features/email/domain/model/move_to_mailbox_request.dart index 27630e738..e3b16422a 100644 --- a/lib/features/email/domain/model/move_to_mailbox_request.dart +++ b/lib/features/email/domain/model/move_to_mailbox_request.dart @@ -1,9 +1,8 @@ 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/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'; class MoveToMailboxRequest with EquatableMixin { @@ -13,13 +12,11 @@ class MoveToMailboxRequest with EquatableMixin { final MoveAction moveAction; final EmailActionType emailActionType; final String? destinationPath; - final Session session; MoveToMailboxRequest( this.currentMailboxes, this.destinationMailboxId, this.moveAction, - this.session, this.emailActionType,{ this.destinationPath, }); diff --git a/lib/features/email/presentation/controller/single_email_controller.dart b/lib/features/email/presentation/controller/single_email_controller.dart index 30e5332a3..0e7af8902 100644 --- a/lib/features/email/presentation/controller/single_email_controller.dart +++ b/lib/features/email/presentation/controller/single_email_controller.dart @@ -788,7 +788,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin { {currentMailbox.id: [emailSelected.id!]}, destinationMailbox.id, MoveAction.moving, - session, EmailActionType.moveToTrash)); } else if (destinationMailbox.isSpam) { _moveToSpamAction( @@ -799,7 +798,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin { {currentMailbox.id: [emailSelected.id!]}, destinationMailbox.id, MoveAction.moving, - session, EmailActionType.moveToSpam)); } else { _moveToMailbox( @@ -810,7 +808,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin { {currentMailbox.id: [emailSelected.id!]}, destinationMailbox.id, MoveAction.moving, - session, EmailActionType.moveToMailbox, destinationPath: destinationMailbox.mailboxPath)); } @@ -833,7 +830,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin { {success.destinationMailboxId: [success.emailId]}, success.currentMailboxId, MoveAction.undo, - mailboxDashBoardController.sessionCurrent!, success.emailActionType)); }, leadingSVGIcon: imagePaths.icFolderMailbox, @@ -868,7 +864,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin { {currentMailbox.id: [email.id!]}, trashMailboxId, MoveAction.moving, - mailboxDashBoardController.sessionCurrent!, EmailActionType.moveToTrash) ); } @@ -899,7 +894,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin { {currentMailbox.id: [email.id!]}, spamMailboxId, MoveAction.moving, - mailboxDashBoardController.sessionCurrent!, EmailActionType.moveToSpam) ); } @@ -920,7 +914,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin { {spamMailboxId: [email.id!]}, inboxMailboxId, MoveAction.moving, - mailboxDashBoardController.sessionCurrent!, EmailActionType.unSpam) ); } diff --git a/lib/features/mailbox/data/network/mailbox_api.dart b/lib/features/mailbox/data/network/mailbox_api.dart index da112b255..c50f7cf0f 100644 --- a/lib/features/mailbox/data/network/mailbox_api.dart +++ b/lib/features/mailbox/data/network/mailbox_api.dart @@ -187,10 +187,8 @@ class MailboxAPI with HandleSetErrorMixin { Future> deleteMultipleMailbox(Session session, AccountId accountId, List mailboxIds) async { final coreCapability = session.getCapabilityProperties( - accountId, - CapabilityIdentifier.jmapCore - ); - final maxMethodCount = coreCapability.maxCallsInRequest?.value.toInt() ?? CapabilityIdentifierExtension.defaultMaxCallsInRequest; + accountId, CapabilityIdentifier.jmapCore); + final maxMethodCount = coreCapability?.maxCallsInRequest?.value.toInt() ?? 0; final Map finalDeletedMailboxErrors = {}; var start = 0; diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index 9df0d0a23..f264dcd63 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -683,7 +683,6 @@ class MailboxDashBoardController extends ReloadableController { {success.destinationMailboxId: [success.emailId]}, success.currentMailboxId, MoveAction.undo, - sessionCurrent!, success.emailActionType )); }, @@ -909,7 +908,6 @@ class MailboxDashBoardController extends ReloadableController { {currentMailbox.id: listEmailIds}, destinationMailbox.id, MoveAction.moving, - session, EmailActionType.moveToTrash)); } else if (destinationMailbox.isSpam) { _moveSelectedEmailMultipleToMailboxAction( @@ -919,7 +917,6 @@ class MailboxDashBoardController extends ReloadableController { {currentMailbox.id: listEmailIds}, destinationMailbox.id, MoveAction.moving, - session, EmailActionType.moveToSpam)); } else { _moveSelectedEmailMultipleToMailboxAction( @@ -929,7 +926,6 @@ class MailboxDashBoardController extends ReloadableController { {currentMailbox.id: listEmailIds}, destinationMailbox.id, MoveAction.moving, - session, EmailActionType.moveToMailbox, destinationPath: destinationMailbox.mailboxPath)); } @@ -973,7 +969,6 @@ class MailboxDashBoardController extends ReloadableController { mapListEmails, destinationMailbox.id, MoveAction.moving, - sessionCurrent!, EmailActionType.moveToTrash, ), ); @@ -985,7 +980,6 @@ class MailboxDashBoardController extends ReloadableController { mapListEmails, destinationMailbox.id, MoveAction.moving, - sessionCurrent!, EmailActionType.moveToSpam, ), ); @@ -997,7 +991,6 @@ class MailboxDashBoardController extends ReloadableController { mapListEmails, destinationMailbox.id, MoveAction.moving, - sessionCurrent!, EmailActionType.moveToMailbox, destinationPath: destinationMailbox.mailboxPath, ), @@ -1057,7 +1050,6 @@ class MailboxDashBoardController extends ReloadableController { {newCurrentMailboxId: movedEmailIds}, newDestinationMailboxId, MoveAction.undo, - sessionCurrent!, emailActionType!, destinationPath: destinationPath )); @@ -1091,7 +1083,6 @@ class MailboxDashBoardController extends ReloadableController { {mailboxCurrent.id: listEmails.listEmailIds}, trashMailboxId, MoveAction.moving, - sessionCurrent!, EmailActionType.moveToTrash) ); } @@ -1107,7 +1098,6 @@ class MailboxDashBoardController extends ReloadableController { {mailboxCurrent.id: listEmail.listEmailIds}, spamMailboxId, MoveAction.moving, - sessionCurrent!, EmailActionType.moveToSpam) ); } @@ -1124,7 +1114,6 @@ class MailboxDashBoardController extends ReloadableController { {spamMailboxId: listEmail.listEmailIds}, inboxMailboxId, MoveAction.moving, - sessionCurrent!, EmailActionType.unSpam) ); } @@ -1306,7 +1295,7 @@ class MailboxDashBoardController extends ReloadableController { try { if (sessionCurrent != null && accountId.value != null) { final mailCapability = sessionCurrent!.getCapabilityProperties(accountId.value!, CapabilityIdentifier.jmapMail); - final maxSizeAttachmentsPerEmail = mailCapability.maxSizeAttachmentsPerEmail; + final maxSizeAttachmentsPerEmail = mailCapability?.maxSizeAttachmentsPerEmail; log('MailboxDashBoardController::maxSizeAttachmentsPerEmail(): $maxSizeAttachmentsPerEmail'); return maxSizeAttachmentsPerEmail; } diff --git a/lib/features/thread/presentation/mixin/email_action_controller.dart b/lib/features/thread/presentation/mixin/email_action_controller.dart index ce81b3c06..1f2a72471 100644 --- a/lib/features/thread/presentation/mixin/email_action_controller.dart +++ b/lib/features/thread/presentation/mixin/email_action_controller.dart @@ -60,7 +60,6 @@ mixin EmailActionController { {mailboxContain.id: email.id != null ? [email.id!] : []}, trashMailboxId, MoveAction.moving, - mailboxDashBoardController.sessionCurrent!, EmailActionType.moveToTrash) ); } @@ -83,7 +82,6 @@ mixin EmailActionController { {mailboxContain.id: email.id != null ? [email.id!] : []}, spamMailboxId, MoveAction.moving, - mailboxDashBoardController.sessionCurrent!, EmailActionType.moveToSpam) ); } @@ -103,7 +101,6 @@ mixin EmailActionController { {spamMailboxId: email.id != null ? [email.id!] : []}, inboxMailboxId, MoveAction.moving, - mailboxDashBoardController.sessionCurrent!, EmailActionType.unSpam) ); } @@ -164,7 +161,6 @@ mixin EmailActionController { {currentMailbox.id: emailSelected.id != null ? [emailSelected.id!] : []}, destinationMailbox.id, MoveAction.moving, - session, EmailActionType.moveToTrash)); } else if (destinationMailbox.isSpam) { moveToSpamAction( @@ -174,7 +170,6 @@ mixin EmailActionController { {currentMailbox.id: emailSelected.id != null ? [emailSelected.id!] : []}, destinationMailbox.id, MoveAction.moving, - session, EmailActionType.moveToSpam)); } else { _moveToMailboxAction( @@ -184,7 +179,6 @@ mixin EmailActionController { {currentMailbox.id: emailSelected.id != null ? [emailSelected.id!] : []}, destinationMailbox.id, MoveAction.moving, - session, EmailActionType.moveToMailbox, destinationPath: destinationMailbox.mailboxPath)); } diff --git a/model/lib/extensions/session_extension.dart b/model/lib/extensions/session_extension.dart index 5d9da0a65..03b9e6ecf 100644 --- a/model/lib/extensions/session_extension.dart +++ b/model/lib/extensions/session_extension.dart @@ -35,15 +35,19 @@ extension SessionExtension on Session { return Uri.parse(uploadUri); } - T getCapabilityProperties( + T? getCapabilityProperties( AccountId accountId, CapabilityIdentifier identifier ) { - var capability = accounts[accountId]!.accountCapabilities[identifier]; - if (capability is EmptyCapability) { - capability = capabilities[identifier] as T; + var capability = accounts[accountId]?.accountCapabilities[identifier]; + if (capability == null || capability is EmptyCapability) { + capability = capabilities[identifier]; + } + if (capability is T) { + return capability; + } else { + return null; } - return (capability as T); } JmapAccount get personalAccount {