TF-1604: Add requiredCapabilities support TeamMailbox for SetEmailMethod
(cherry picked from commit af9432c91755489a544b781bf068dd037fc627ee)
This commit is contained in:
@@ -2,7 +2,6 @@ import 'dart:async';
|
||||
|
||||
import 'package:jmap_dart_client/http/http_client.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/filter/filter.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/request/reference_path.dart';
|
||||
@@ -27,23 +26,6 @@ class ThreadAPI {
|
||||
|
||||
ThreadAPI(this.httpClient);
|
||||
|
||||
Set<CapabilityIdentifier> _capabilitiesForEmailMethod(Session session, AccountId accountId) {
|
||||
final getMailboxCreated = GetEmailMethod(accountId);
|
||||
try {
|
||||
requireCapability(
|
||||
session,
|
||||
accountId,
|
||||
[CapabilityIdentifier.jmapTeamMailboxes]);
|
||||
return {
|
||||
CapabilityIdentifier.jmapCore,
|
||||
CapabilityIdentifier.jmapMail,
|
||||
CapabilityIdentifier.jmapTeamMailboxes
|
||||
};
|
||||
} catch (_) {
|
||||
return getMailboxCreated.requiredCapabilities;
|
||||
}
|
||||
}
|
||||
|
||||
Future<EmailsResponse> getAllEmail(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
@@ -78,8 +60,11 @@ class ThreadAPI {
|
||||
|
||||
final getEmailInvocation = jmapRequestBuilder.invocation(getEmailMethod);
|
||||
|
||||
final capabilities = getEmailMethod.requiredCapabilities
|
||||
.toCapabilitiesSupportTeamMailboxes(session, accountId);
|
||||
|
||||
final result = await (jmapRequestBuilder
|
||||
..usings(_capabilitiesForEmailMethod(session, accountId)))
|
||||
..usings(capabilities))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
@@ -133,8 +118,11 @@ class ThreadAPI {
|
||||
final getEmailUpdatedInvocation = jmapRequestBuilder.invocation(getMailboxUpdated);
|
||||
final getEmailCreatedInvocation = jmapRequestBuilder.invocation(getEmailCreated);
|
||||
|
||||
final capabilities = getEmailCreated.requiredCapabilities
|
||||
.toCapabilitiesSupportTeamMailboxes(session, accountId);
|
||||
|
||||
final result = await (jmapRequestBuilder
|
||||
..usings(_capabilitiesForEmailMethod(session, accountId)))
|
||||
..usings(capabilities))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
@@ -175,8 +163,11 @@ class ThreadAPI {
|
||||
|
||||
final getEmailInvocation = jmapRequestBuilder.invocation(getEmailMethod);
|
||||
|
||||
final capabilities = getEmailMethod.requiredCapabilities
|
||||
.toCapabilitiesSupportTeamMailboxes(session, accountId);
|
||||
|
||||
final result = await (jmapRequestBuilder
|
||||
..usings(_capabilitiesForEmailMethod(session, accountId)))
|
||||
..usings(capabilities))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ class ThreadIsolateWorker {
|
||||
if (newEmailList.isNotEmpty) {
|
||||
lastEmail = newEmailList.last;
|
||||
hasEmails = true;
|
||||
final listEmailIdDeleted = await args.emailAPI.deleteMultipleEmailsPermanently(args.accountId, newEmailList.listEmailIds);
|
||||
final listEmailIdDeleted = await args.emailAPI.deleteMultipleEmailsPermanently(args.session, args.accountId, newEmailList.listEmailIds);
|
||||
|
||||
if (listEmailIdDeleted.isNotEmpty && listEmailIdDeleted.length == newEmailList.listEmailIds.length) {
|
||||
sendPort.send(listEmailIdDeleted);
|
||||
@@ -123,7 +123,7 @@ class ThreadIsolateWorker {
|
||||
if (newEmailList.isNotEmpty) {
|
||||
lastEmail = newEmailList.last;
|
||||
hasEmails = true;
|
||||
final listEmailIdDeleted = await _emailAPI.deleteMultipleEmailsPermanently(accountId, newEmailList.listEmailIds);
|
||||
final listEmailIdDeleted = await _emailAPI.deleteMultipleEmailsPermanently(session, accountId, newEmailList.listEmailIds);
|
||||
|
||||
if (listEmailIdDeleted.isNotEmpty && listEmailIdDeleted.length == newEmailList.listEmailIds.length) {
|
||||
await updateDestroyedEmailCache(listEmailIdDeleted);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:dartz/dartz.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.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
@@ -14,9 +15,10 @@ class MarkAsMultipleEmailReadInteractor {
|
||||
MarkAsMultipleEmailReadInteractor(this._emailRepository, this._mailboxRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
AccountId accountId,
|
||||
List<Email> emails,
|
||||
ReadActions readAction
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
List<Email> emails,
|
||||
ReadActions readAction
|
||||
) async* {
|
||||
try {
|
||||
yield Right(LoadingMarkAsMultipleEmailReadAll());
|
||||
@@ -33,7 +35,7 @@ class MarkAsMultipleEmailReadInteractor {
|
||||
.where((email) => readAction == ReadActions.markAsUnread ? email.hasRead : !email.hasRead)
|
||||
.toList();
|
||||
|
||||
final result = await _emailRepository.markAsRead(accountId, listEmailNeedMarkAsRead, readAction);
|
||||
final result = await _emailRepository.markAsRead(session, accountId, listEmailNeedMarkAsRead, readAction);
|
||||
|
||||
if (listEmailNeedMarkAsRead.length == result.length) {
|
||||
final countMarkAsReadSuccess = emails.length;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:dartz/dartz.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.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
@@ -12,9 +13,10 @@ class MarkAsStarMultipleEmailInteractor {
|
||||
MarkAsStarMultipleEmailInteractor(this._emailRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
AccountId accountId,
|
||||
List<Email> emails,
|
||||
MarkStarAction markStarAction
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
List<Email> emails,
|
||||
MarkStarAction markStarAction
|
||||
) async* {
|
||||
try {
|
||||
yield Right(LoadingMarkAsStarMultipleEmailAll());
|
||||
@@ -25,7 +27,7 @@ class MarkAsStarMultipleEmailInteractor {
|
||||
.where((email) => markStarAction == MarkStarAction.unMarkStar ? email.hasStarred : !email.hasStarred)
|
||||
.toList();
|
||||
|
||||
final result = await _emailRepository.markAsStar(accountId, listEmailNeedMarkStar, markStarAction);
|
||||
final result = await _emailRepository.markAsStar(session, accountId, listEmailNeedMarkStar, markStarAction);
|
||||
|
||||
if (listEmailNeedMarkStar.length == result.length) {
|
||||
final countMarkStarSuccess = emails.length;
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'dart:async';
|
||||
import 'package:core/core.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
|
||||
@@ -14,7 +15,11 @@ class MoveMultipleEmailToMailboxInteractor {
|
||||
|
||||
MoveMultipleEmailToMailboxInteractor(this._emailRepository, this._mailboxRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId, MoveToMailboxRequest moveRequest) async* {
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
MoveToMailboxRequest moveRequest
|
||||
) async* {
|
||||
try {
|
||||
yield Right(LoadingMoveMultipleEmailToMailboxAll());
|
||||
|
||||
@@ -26,7 +31,7 @@ class MoveMultipleEmailToMailboxInteractor {
|
||||
final currentMailboxState = listState.first;
|
||||
final currentEmailState = listState.last;
|
||||
|
||||
final result = await _emailRepository.moveToMailbox(accountId, moveRequest);
|
||||
final result = await _emailRepository.moveToMailbox(session, accountId, moveRequest);
|
||||
int totalEmail = 0;
|
||||
for (var element in moveRequest.currentMailboxes.values) {
|
||||
totalEmail = totalEmail + element.length;
|
||||
|
||||
@@ -51,57 +51,69 @@ mixin EmailActionController on ViewAsDialogActionMixin {
|
||||
}
|
||||
|
||||
void moveToTrash(PresentationEmail email, {PresentationMailbox? mailboxContain}) async {
|
||||
final session = mailboxDashBoardController.sessionCurrent;
|
||||
final accountId = mailboxDashBoardController.accountId.value;
|
||||
final trashMailboxId = mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleTrash];
|
||||
|
||||
if (mailboxContain != null && accountId != null && trashMailboxId != null) {
|
||||
_moveToTrashAction(accountId, MoveToMailboxRequest(
|
||||
{mailboxContain.id: email.id != null ? [email.id!] : []},
|
||||
trashMailboxId,
|
||||
MoveAction.moving,
|
||||
mailboxDashBoardController.sessionCurrent!,
|
||||
EmailActionType.moveToTrash)
|
||||
if (session != null && mailboxContain != null && accountId != null && trashMailboxId != null) {
|
||||
_moveToTrashAction(
|
||||
session,
|
||||
accountId,
|
||||
MoveToMailboxRequest(
|
||||
{mailboxContain.id: email.id != null ? [email.id!] : []},
|
||||
trashMailboxId,
|
||||
MoveAction.moving,
|
||||
mailboxDashBoardController.sessionCurrent!,
|
||||
EmailActionType.moveToTrash)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void _moveToTrashAction(AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
mailboxDashBoardController.moveToMailbox(accountId, moveRequest);
|
||||
void _moveToTrashAction(Session session, AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
mailboxDashBoardController.moveToMailbox(session, accountId, moveRequest);
|
||||
}
|
||||
|
||||
void moveToSpam(PresentationEmail email, {PresentationMailbox? mailboxContain}) async {
|
||||
final session = mailboxDashBoardController.sessionCurrent;
|
||||
final accountId = mailboxDashBoardController.accountId.value;
|
||||
final spamMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleSpam);
|
||||
|
||||
if (mailboxContain != null && accountId != null && spamMailboxId != null) {
|
||||
moveToSpamAction(accountId, MoveToMailboxRequest(
|
||||
{mailboxContain.id: email.id != null ? [email.id!] : []},
|
||||
spamMailboxId,
|
||||
MoveAction.moving,
|
||||
mailboxDashBoardController.sessionCurrent!,
|
||||
EmailActionType.moveToSpam)
|
||||
if (session != null && mailboxContain != null && accountId != null && spamMailboxId != null) {
|
||||
moveToSpamAction(
|
||||
session,
|
||||
accountId,
|
||||
MoveToMailboxRequest(
|
||||
{mailboxContain.id: email.id != null ? [email.id!] : []},
|
||||
spamMailboxId,
|
||||
MoveAction.moving,
|
||||
mailboxDashBoardController.sessionCurrent!,
|
||||
EmailActionType.moveToSpam)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void unSpam(PresentationEmail email) async {
|
||||
final session = mailboxDashBoardController.sessionCurrent;
|
||||
final accountId = mailboxDashBoardController.accountId.value;
|
||||
final spamMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleSpam);
|
||||
final inboxMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleInbox);
|
||||
|
||||
if (inboxMailboxId != null && accountId != null && spamMailboxId != null) {
|
||||
moveToSpamAction(accountId, MoveToMailboxRequest(
|
||||
{spamMailboxId: email.id != null ? [email.id!] : []},
|
||||
inboxMailboxId,
|
||||
MoveAction.moving,
|
||||
mailboxDashBoardController.sessionCurrent!,
|
||||
EmailActionType.unSpam)
|
||||
if (session != null && inboxMailboxId != null && accountId != null && spamMailboxId != null) {
|
||||
moveToSpamAction(
|
||||
session,
|
||||
accountId,
|
||||
MoveToMailboxRequest(
|
||||
{spamMailboxId: email.id != null ? [email.id!] : []},
|
||||
inboxMailboxId,
|
||||
MoveAction.moving,
|
||||
mailboxDashBoardController.sessionCurrent!,
|
||||
EmailActionType.unSpam)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void moveToSpamAction(AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
mailboxDashBoardController.moveToMailbox(accountId, moveRequest);
|
||||
void moveToSpamAction(Session session, AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
mailboxDashBoardController.moveToMailbox(session, accountId, moveRequest);
|
||||
}
|
||||
|
||||
void moveToMailbox(
|
||||
@@ -160,32 +172,41 @@ mixin EmailActionController on ViewAsDialogActionMixin {
|
||||
PresentationMailbox destinationMailbox
|
||||
) {
|
||||
if (destinationMailbox.isTrash) {
|
||||
moveToSpamAction(accountId, MoveToMailboxRequest(
|
||||
{currentMailbox.id: emailSelected.id != null ? [emailSelected.id!] : []},
|
||||
destinationMailbox.id,
|
||||
MoveAction.moving,
|
||||
moveToSpamAction(
|
||||
session,
|
||||
EmailActionType.moveToTrash));
|
||||
accountId,
|
||||
MoveToMailboxRequest(
|
||||
{currentMailbox.id: emailSelected.id != null ? [emailSelected.id!] : []},
|
||||
destinationMailbox.id,
|
||||
MoveAction.moving,
|
||||
session,
|
||||
EmailActionType.moveToTrash));
|
||||
} else if (destinationMailbox.isSpam) {
|
||||
moveToSpamAction(accountId, MoveToMailboxRequest(
|
||||
{currentMailbox.id: emailSelected.id != null ? [emailSelected.id!] : []},
|
||||
destinationMailbox.id,
|
||||
MoveAction.moving,
|
||||
moveToSpamAction(
|
||||
session,
|
||||
EmailActionType.moveToSpam));
|
||||
accountId,
|
||||
MoveToMailboxRequest(
|
||||
{currentMailbox.id: emailSelected.id != null ? [emailSelected.id!] : []},
|
||||
destinationMailbox.id,
|
||||
MoveAction.moving,
|
||||
session,
|
||||
EmailActionType.moveToSpam));
|
||||
} else {
|
||||
_moveToMailboxAction(accountId, MoveToMailboxRequest(
|
||||
{currentMailbox.id: emailSelected.id != null ? [emailSelected.id!] : []},
|
||||
destinationMailbox.id,
|
||||
MoveAction.moving,
|
||||
_moveToMailboxAction(
|
||||
session,
|
||||
EmailActionType.moveToMailbox,
|
||||
destinationPath: destinationMailbox.mailboxPath));
|
||||
accountId,
|
||||
MoveToMailboxRequest(
|
||||
{currentMailbox.id: emailSelected.id != null ? [emailSelected.id!] : []},
|
||||
destinationMailbox.id,
|
||||
MoveAction.moving,
|
||||
session,
|
||||
EmailActionType.moveToMailbox,
|
||||
destinationPath: destinationMailbox.mailboxPath));
|
||||
}
|
||||
}
|
||||
|
||||
void _moveToMailboxAction(AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
mailboxDashBoardController.moveToMailbox(accountId, moveRequest);
|
||||
void _moveToMailboxAction(Session session, AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
mailboxDashBoardController.moveToMailbox(session, accountId, moveRequest);
|
||||
}
|
||||
|
||||
void deleteEmailPermanently(BuildContext context, PresentationEmail email) {
|
||||
|
||||
Reference in New Issue
Block a user