TF-1604: Add requiredCapabilities support TeamMailbox for SetEmailMethod

(cherry picked from commit af9432c91755489a544b781bf068dd037fc627ee)
This commit is contained in:
HuyNguyen
2023-03-22 13:32:49 +07:00
committed by Dat Vu
parent 02e5d9e6aa
commit a794d8491e
28 changed files with 477 additions and 291 deletions
@@ -15,9 +15,14 @@ import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_r
abstract class EmailDataSource {
Future<Email> getEmailContent(Session session, AccountId accountId, EmailId emailId);
Future<bool> sendEmail(AccountId accountId, EmailRequest emailRequest, {CreateNewMailboxRequest? mailboxRequest});
Future<bool> sendEmail(
Session session,
AccountId accountId,
EmailRequest emailRequest,
{CreateNewMailboxRequest? mailboxRequest}
);
Future<List<Email>> markAsRead(AccountId accountId, List<Email> emails, ReadActions readActions);
Future<List<Email>> markAsRead(Session session, AccountId accountId, List<Email> emails, ReadActions readActions);
Future<List<DownloadTaskId>> downloadAttachments(
List<Attachment> attachments,
@@ -43,21 +48,22 @@ abstract class EmailDataSource {
StreamController<Either<Failure, Success>> onReceiveController
);
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveToMailboxRequest moveRequest);
Future<List<EmailId>> moveToMailbox(Session session, AccountId accountId, MoveToMailboxRequest moveRequest);
Future<List<Email>> markAsStar(
Session session,
AccountId accountId,
List<Email> emails,
MarkStarAction markStarAction
);
Future<Email> saveEmailAsDrafts(AccountId accountId, Email email);
Future<Email> saveEmailAsDrafts(Session session, AccountId accountId, Email email);
Future<bool> removeEmailDrafts(AccountId accountId, EmailId emailId);
Future<bool> removeEmailDrafts(Session session, AccountId accountId, EmailId emailId);
Future<Email> updateEmailDrafts(AccountId accountId, Email newEmail, EmailId oldEmailId);
Future<Email> updateEmailDrafts(Session session, AccountId accountId, Email newEmail, EmailId oldEmailId);
Future<List<EmailId>> deleteMultipleEmailsPermanently(AccountId accountId, List<EmailId> emailIds);
Future<List<EmailId>> deleteMultipleEmailsPermanently(Session session, AccountId accountId, List<EmailId> emailIds);
Future<bool> deleteEmailPermanently(AccountId accountId, EmailId emailId);
Future<bool> deleteEmailPermanently(Session session, AccountId accountId, EmailId emailId);
}
@@ -32,16 +32,26 @@ class EmailDataSourceImpl extends EmailDataSource {
}
@override
Future<bool> sendEmail(AccountId accountId, EmailRequest emailRequest, {CreateNewMailboxRequest? mailboxRequest}) {
Future<bool> sendEmail(
Session session,
AccountId accountId,
EmailRequest emailRequest,
{CreateNewMailboxRequest? mailboxRequest}
) {
return Future.sync(() async {
return await emailAPI.sendEmail(accountId, emailRequest, mailboxRequest: mailboxRequest);
return await emailAPI.sendEmail(session, accountId, emailRequest, mailboxRequest: mailboxRequest);
}).catchError(_exceptionThrower.throwException);
}
@override
Future<List<Email>> markAsRead(AccountId accountId, List<Email> emails, ReadActions readActions) {
Future<List<Email>> markAsRead(
Session session,
AccountId accountId,
List<Email> emails,
ReadActions readActions
) {
return Future.sync(() async {
return await emailAPI.markAsRead(accountId, emails, readActions);
return await emailAPI.markAsRead(session, accountId, emails, readActions);
}).catchError(_exceptionThrower.throwException);
}
@@ -71,37 +81,37 @@ class EmailDataSourceImpl extends EmailDataSource {
}
@override
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveToMailboxRequest moveRequest) {
Future<List<EmailId>> moveToMailbox(Session session, AccountId accountId, MoveToMailboxRequest moveRequest) {
return Future.sync(() async {
return await emailAPI.moveToMailbox(accountId, moveRequest);
return await emailAPI.moveToMailbox(session, accountId, moveRequest);
}).catchError(_exceptionThrower.throwException);
}
@override
Future<List<Email>> markAsStar(AccountId accountId, List<Email> emails, MarkStarAction markStarAction) {
Future<List<Email>> markAsStar(Session session, AccountId accountId, List<Email> emails, MarkStarAction markStarAction) {
return Future.sync(() async {
return await emailAPI.markAsStar(accountId, emails, markStarAction);
return await emailAPI.markAsStar(session, accountId, emails, markStarAction);
}).catchError(_exceptionThrower.throwException);
}
@override
Future<Email> saveEmailAsDrafts(AccountId accountId, Email email) {
Future<Email> saveEmailAsDrafts(Session session, AccountId accountId, Email email) {
return Future.sync(() async {
return await emailAPI.saveEmailAsDrafts(accountId, email);
return await emailAPI.saveEmailAsDrafts(session, accountId, email);
}).catchError(_exceptionThrower.throwException);
}
@override
Future<bool> removeEmailDrafts(AccountId accountId, EmailId emailId) {
Future<bool> removeEmailDrafts(Session session, AccountId accountId, EmailId emailId) {
return Future.sync(() async {
return await emailAPI.removeEmailDrafts(accountId, emailId);
return await emailAPI.removeEmailDrafts(session, accountId, emailId);
}).catchError(_exceptionThrower.throwException);
}
@override
Future<Email> updateEmailDrafts(AccountId accountId, Email newEmail, EmailId oldEmailId) {
Future<Email> updateEmailDrafts(Session session, AccountId accountId, Email newEmail, EmailId oldEmailId) {
return Future.sync(() async {
return await emailAPI.updateEmailDrafts(accountId, newEmail, oldEmailId);
return await emailAPI.updateEmailDrafts(session, accountId, newEmail, oldEmailId);
}).catchError(_exceptionThrower.throwException);
}
@@ -126,16 +136,16 @@ class EmailDataSourceImpl extends EmailDataSource {
}
@override
Future<List<EmailId>> deleteMultipleEmailsPermanently(AccountId accountId, List<EmailId> emailIds) {
Future<List<EmailId>> deleteMultipleEmailsPermanently(Session session, AccountId accountId, List<EmailId> emailIds) {
return Future.sync(() async {
return await emailAPI.deleteMultipleEmailsPermanently(accountId, emailIds);
return await emailAPI.deleteMultipleEmailsPermanently(session, accountId, emailIds);
}).catchError(_exceptionThrower.throwException);
}
@override
Future<bool> deleteEmailPermanently(AccountId accountId, EmailId emailId) {
Future<bool> deleteEmailPermanently(Session session, AccountId accountId, EmailId emailId) {
return Future.sync(() async {
return await emailAPI.deleteEmailPermanently(accountId, emailId);
return await emailAPI.deleteEmailPermanently(session, accountId, emailId);
}).catchError(_exceptionThrower.throwException);
}
}
+70 -22
View File
@@ -86,11 +86,8 @@ class EmailAPI with HandleSetErrorMixin {
final getEmailInvocation = jmapRequestBuilder.invocation(getEmailMethod);
final capabilitiesSupportTeamMailboxes = getEmailMethod.requiredCapabilities.add(CapabilityIdentifier.jmapTeamMailboxes) as Set<CapabilityIdentifier>;
final capabilities = [CapabilityIdentifier.jmapTeamMailboxes].isSupportTeamMailboxes(session, accountId)
? capabilitiesSupportTeamMailboxes
: getEmailMethod.requiredCapabilities;
final capabilities = getEmailMethod.requiredCapabilities
.toCapabilitiesSupportTeamMailboxes(session, accountId);
final result = await (jmapRequestBuilder
..usings(capabilities))
@@ -108,6 +105,7 @@ class EmailAPI with HandleSetErrorMixin {
}
Future<bool> sendEmail(
Session session,
AccountId accountId,
EmailRequest emailRequest,
{CreateNewMailboxRequest? mailboxRequest}
@@ -170,8 +168,11 @@ class EmailAPI with HandleSetErrorMixin {
final setEmailSubmissionInvocation = requestBuilder.invocation(setEmailSubmissionMethod);
final capabilities = setEmailSubmissionMethod.requiredCapabilities
.toCapabilitiesSupportTeamMailboxes(session, accountId);
final response = await (requestBuilder
..usings(setEmailSubmissionMethod.requiredCapabilities))
..usings(capabilities))
.build()
.execute();
@@ -228,7 +229,12 @@ class EmailAPI with HandleSetErrorMixin {
return remainedErrors;
}
Future<List<Email>> markAsRead(AccountId accountId, List<Email> emails, ReadActions readActions) async {
Future<List<Email>> markAsRead(
Session session,
AccountId accountId,
List<Email> emails,
ReadActions readActions
) async {
final setEmailMethod = SetEmailMethod(accountId)
..addUpdates(emails.listEmailIds.generateMapUpdateObjectMarkAsRead(readActions));
@@ -242,8 +248,11 @@ class EmailAPI with HandleSetErrorMixin {
final getEmailInvocation = requestBuilder.invocation(getEmailMethod);
final capabilities = setEmailMethod.requiredCapabilities
.toCapabilitiesSupportTeamMailboxes(session, accountId);
final response = await (requestBuilder
..usings(setEmailMethod.requiredCapabilities))
..usings(capabilities))
.build()
.execute();
@@ -358,7 +367,11 @@ class EmailAPI with HandleSetErrorMixin {
return bytesDownloaded;
}
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveToMailboxRequest moveRequest) async {
Future<List<EmailId>> moveToMailbox(
Session session,
AccountId accountId,
MoveToMailboxRequest moveRequest
) async {
requireCapability(moveRequest.session, accountId, [CapabilityIdentifier.jmapCore, CapabilityIdentifier.jmapMail]);
@@ -388,7 +401,10 @@ class EmailAPI with HandleSetErrorMixin {
..addUpdates(currentItem.value.generateMapUpdateObjectMoveToMailbox(currentItem.key, moveRequest.destinationMailboxId));
}).map(requestBuilder.invocation).toList();
final response = await (requestBuilder..usings({CapabilityIdentifier.jmapCore, CapabilityIdentifier.jmapMail}))
final capabilities = {CapabilityIdentifier.jmapCore, CapabilityIdentifier.jmapMail}
.toCapabilitiesSupportTeamMailboxes(session, accountId);
final response = await (requestBuilder..usings(capabilities))
.build()
.execute();
@@ -414,7 +430,12 @@ class EmailAPI with HandleSetErrorMixin {
}
Future<List<Email>> markAsStar(AccountId accountId, List<Email> emails, MarkStarAction markStarAction) async {
Future<List<Email>> markAsStar(
Session session,
AccountId accountId,
List<Email> emails,
MarkStarAction markStarAction
) async {
final setEmailMethod = SetEmailMethod(accountId)
..addUpdates(emails.listEmailIds.generateMapUpdateObjectMarkAsStar(markStarAction));
@@ -428,8 +449,11 @@ class EmailAPI with HandleSetErrorMixin {
final getEmailInvocation = requestBuilder.invocation(getEmailMethod);
final capabilities = setEmailMethod.requiredCapabilities
.toCapabilitiesSupportTeamMailboxes(session, accountId);
final response = await (requestBuilder
..usings(setEmailMethod.requiredCapabilities))
..usings(capabilities))
.build()
.execute();
@@ -444,7 +468,7 @@ class EmailAPI with HandleSetErrorMixin {
});
}
Future<Email> saveEmailAsDrafts(AccountId accountId, Email email) async {
Future<Email> saveEmailAsDrafts(Session session, AccountId accountId, Email email) async {
final idCreateMethod = Id(_uuid.v1());
final setEmailMethod = SetEmailMethod(accountId)
..addCreate(idCreateMethod, email);
@@ -453,8 +477,11 @@ class EmailAPI with HandleSetErrorMixin {
final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
final capabilities = setEmailMethod.requiredCapabilities
.toCapabilitiesSupportTeamMailboxes(session, accountId);
final response = await (requestBuilder
..usings(setEmailMethod.requiredCapabilities))
..usings(capabilities))
.build()
.execute();
@@ -474,7 +501,7 @@ class EmailAPI with HandleSetErrorMixin {
}
}
Future<bool> removeEmailDrafts(AccountId accountId, EmailId emailId) async {
Future<bool> removeEmailDrafts(Session session, AccountId accountId, EmailId emailId) async {
final setEmailMethod = SetEmailMethod(accountId)
..addDestroy({emailId.id});
@@ -482,8 +509,11 @@ class EmailAPI with HandleSetErrorMixin {
final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
final capabilities = setEmailMethod.requiredCapabilities
.toCapabilitiesSupportTeamMailboxes(session, accountId);
final response = await (requestBuilder
..usings(setEmailMethod.requiredCapabilities))
..usings(capabilities))
.build()
.execute();
@@ -498,7 +528,12 @@ class EmailAPI with HandleSetErrorMixin {
});
}
Future<Email> updateEmailDrafts(AccountId accountId, Email newEmail, EmailId oldEmailId) async {
Future<Email> updateEmailDrafts(
Session session,
AccountId accountId,
Email newEmail,
EmailId oldEmailId
) async {
final idCreateMethod = Id(_uuid.v1());
final setEmailMethod = SetEmailMethod(accountId)
..addCreate(idCreateMethod, newEmail)
@@ -508,8 +543,11 @@ class EmailAPI with HandleSetErrorMixin {
final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
final capabilities = setEmailMethod.requiredCapabilities
.toCapabilitiesSupportTeamMailboxes(session, accountId);
final response = await (requestBuilder
..usings(setEmailMethod.requiredCapabilities))
..usings(capabilities))
.build()
.execute();
@@ -530,15 +568,22 @@ class EmailAPI with HandleSetErrorMixin {
}
}
Future<List<EmailId>> deleteMultipleEmailsPermanently(AccountId accountId, List<EmailId> emailIds) async {
Future<List<EmailId>> deleteMultipleEmailsPermanently(
Session session,
AccountId accountId,
List<EmailId> emailIds
) async {
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
final setEmailMethod = SetEmailMethod(accountId)
..addDestroy(emailIds.map((emailId) => emailId.id).toSet());
final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
final capabilities = setEmailMethod.requiredCapabilities
.toCapabilitiesSupportTeamMailboxes(session, accountId);
final response = await (requestBuilder
..usings(setEmailMethod.requiredCapabilities))
..usings(capabilities))
.build()
.execute();
@@ -555,15 +600,18 @@ class EmailAPI with HandleSetErrorMixin {
return List.empty();
}
Future<bool> deleteEmailPermanently(AccountId accountId, EmailId emailId) async {
Future<bool> deleteEmailPermanently(Session session, AccountId accountId, EmailId emailId) async {
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
final setEmailMethod = SetEmailMethod(accountId)
..addDestroy({emailId.id});
final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
final capabilities = setEmailMethod.requiredCapabilities
.toCapabilitiesSupportTeamMailboxes(session, accountId);
final response = await (requestBuilder
..usings(setEmailMethod.requiredCapabilities))
..usings(capabilities))
.build()
.execute();
@@ -37,13 +37,23 @@ class EmailRepositoryImpl extends EmailRepository {
}
@override
Future<bool> sendEmail(AccountId accountId, EmailRequest emailRequest, {CreateNewMailboxRequest? mailboxRequest}) {
return emailDataSource.sendEmail(accountId, emailRequest, mailboxRequest: mailboxRequest);
Future<bool> sendEmail(
Session session,
AccountId accountId,
EmailRequest emailRequest,
{CreateNewMailboxRequest? mailboxRequest}
) {
return emailDataSource.sendEmail(session, accountId, emailRequest, mailboxRequest: mailboxRequest);
}
@override
Future<List<Email>> markAsRead(AccountId accountId, List<Email> emails, ReadActions readActions) {
return emailDataSource.markAsRead(accountId, emails, readActions);
Future<List<Email>> markAsRead(
Session session,
AccountId accountId,
List<Email> emails,
ReadActions readActions
) {
return emailDataSource.markAsRead(session, accountId, emails, readActions);
}
@override
@@ -73,17 +83,18 @@ class EmailRepositoryImpl extends EmailRepository {
}
@override
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveToMailboxRequest moveRequest) {
return emailDataSource.moveToMailbox(accountId, moveRequest);
Future<List<EmailId>> moveToMailbox(Session session, AccountId accountId, MoveToMailboxRequest moveRequest) {
return emailDataSource.moveToMailbox(session, accountId, moveRequest);
}
@override
Future<List<Email>> markAsStar(
AccountId accountId,
List<Email> emails,
MarkStarAction markStarAction
Session session,
AccountId accountId,
List<Email> emails,
MarkStarAction markStarAction
) {
return emailDataSource.markAsStar(accountId, emails, markStarAction);
return emailDataSource.markAsStar(session, accountId, emails, markStarAction);
}
@override
@@ -110,18 +121,18 @@ class EmailRepositoryImpl extends EmailRepository {
}
@override
Future<Email> saveEmailAsDrafts(AccountId accountId, Email email) {
return emailDataSource.saveEmailAsDrafts(accountId, email);
Future<Email> saveEmailAsDrafts(Session session, AccountId accountId, Email email) {
return emailDataSource.saveEmailAsDrafts(session, accountId, email);
}
@override
Future<bool> removeEmailDrafts(AccountId accountId, EmailId emailId) {
return emailDataSource.removeEmailDrafts(accountId, emailId);
Future<bool> removeEmailDrafts(Session session, AccountId accountId, EmailId emailId) {
return emailDataSource.removeEmailDrafts(session, accountId, emailId);
}
@override
Future<Email> updateEmailDrafts(AccountId accountId, Email newEmail, EmailId oldEmailId) {
return emailDataSource.updateEmailDrafts(accountId, newEmail, oldEmailId);
Future<Email> updateEmailDrafts(Session session, AccountId accountId, Email newEmail, EmailId oldEmailId) {
return emailDataSource.updateEmailDrafts(session, accountId, newEmail, oldEmailId);
}
@override
@@ -143,13 +154,13 @@ class EmailRepositoryImpl extends EmailRepository {
}
@override
Future<List<EmailId>> deleteMultipleEmailsPermanently(AccountId accountId, List<EmailId> emailIds) {
return emailDataSource.deleteMultipleEmailsPermanently(accountId, emailIds);
Future<List<EmailId>> deleteMultipleEmailsPermanently(Session session, AccountId accountId, List<EmailId> emailIds) {
return emailDataSource.deleteMultipleEmailsPermanently(session, accountId, emailIds);
}
@override
Future<bool> deleteEmailPermanently(AccountId accountId, EmailId emailId) {
return emailDataSource.deleteEmailPermanently(accountId, emailId);
Future<bool> deleteEmailPermanently(Session session, AccountId accountId, EmailId emailId) {
return emailDataSource.deleteEmailPermanently(session, accountId, emailId);
}
@override