TF-1604: Add requiredCapabilities support TeamMailbox for SetEmailMethod
(cherry picked from commit af9432c91755489a544b781bf068dd037fc627ee)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -16,9 +16,14 @@ import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_r
|
||||
abstract class EmailRepository {
|
||||
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,
|
||||
@@ -44,9 +49,10 @@ abstract class EmailRepository {
|
||||
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
|
||||
@@ -62,15 +68,15 @@ abstract class EmailRepository {
|
||||
|
||||
Future<List<EmailContent>> addTooltipWhenHoverOnLink(List<EmailContent> emailContents);
|
||||
|
||||
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);
|
||||
|
||||
Future<jmap.State?> getEmailState();
|
||||
}
|
||||
@@ -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:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/delete_email_permanently_state.dart';
|
||||
@@ -12,7 +13,7 @@ class DeleteEmailPermanentlyInteractor {
|
||||
|
||||
DeleteEmailPermanentlyInteractor(this._emailRepository, this._mailboxRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId, EmailId emailId) async* {
|
||||
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, EmailId emailId) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(StartDeleteEmailPermanently());
|
||||
|
||||
@@ -24,7 +25,7 @@ class DeleteEmailPermanentlyInteractor {
|
||||
final currentMailboxState = listState.first;
|
||||
final currentEmailState = listState.last;
|
||||
|
||||
final result = await _emailRepository.deleteEmailPermanently(accountId, emailId);
|
||||
final result = await _emailRepository.deleteEmailPermanently(session, accountId, emailId);
|
||||
if (result) {
|
||||
yield Right<Failure, Success>(DeleteEmailPermanentlySuccess(
|
||||
currentEmailState: currentEmailState,
|
||||
|
||||
+3
-2
@@ -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:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/delete_multiple_emails_permanently_state.dart';
|
||||
@@ -12,7 +13,7 @@ class DeleteMultipleEmailsPermanentlyInteractor {
|
||||
|
||||
DeleteMultipleEmailsPermanentlyInteractor(this._emailRepository, this._mailboxRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId, List<EmailId> emailIds) async* {
|
||||
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, List<EmailId> emailIds) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(LoadingDeleteMultipleEmailsPermanentlyAll());
|
||||
|
||||
@@ -24,7 +25,7 @@ class DeleteMultipleEmailsPermanentlyInteractor {
|
||||
final currentMailboxState = listState.first;
|
||||
final currentEmailState = listState.last;
|
||||
|
||||
final listResult = await _emailRepository.deleteMultipleEmailsPermanently(accountId, emailIds);
|
||||
final listResult = await _emailRepository.deleteMultipleEmailsPermanently(session, accountId, emailIds);
|
||||
if (listResult.length == emailIds.length) {
|
||||
yield Right<Failure, Success>(DeleteMultipleEmailsPermanentlyAllSuccess(
|
||||
listResult,
|
||||
|
||||
@@ -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';
|
||||
@@ -13,7 +14,7 @@ class MarkAsEmailReadInteractor {
|
||||
|
||||
MarkAsEmailReadInteractor(this._emailRepository, this._mailboxRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId, Email email, ReadActions readAction) async* {
|
||||
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, Email email, ReadActions readAction) async* {
|
||||
try {
|
||||
final listState = await Future.wait([
|
||||
_mailboxRepository.getMailboxState(),
|
||||
@@ -23,7 +24,7 @@ class MarkAsEmailReadInteractor {
|
||||
final currentMailboxState = listState.first;
|
||||
final currentEmailState = listState.last;
|
||||
|
||||
final result = await _emailRepository.markAsRead(accountId, [email], readAction);
|
||||
final result = await _emailRepository.markAsRead(session, accountId, [email], readAction);
|
||||
if (result.isNotEmpty) {
|
||||
final updatedEmail = email.updatedEmail(newKeywords: result.first.keywords);
|
||||
yield Right(MarkAsEmailReadSuccess(
|
||||
|
||||
@@ -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';
|
||||
@@ -11,10 +12,10 @@ class MarkAsStarEmailInteractor {
|
||||
|
||||
MarkAsStarEmailInteractor(this.emailRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId, Email email, MarkStarAction markStarAction) async* {
|
||||
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, Email email, MarkStarAction markStarAction) async* {
|
||||
try {
|
||||
final currentEmailState = await emailRepository.getEmailState();
|
||||
final result = await emailRepository.markAsStar(accountId, [email], markStarAction);
|
||||
final result = await emailRepository.markAsStar(session, accountId, [email], markStarAction);
|
||||
if (result.isNotEmpty) {
|
||||
final updatedEmail = email.updatedEmail(newKeywords: result.first.keywords);
|
||||
yield Right(MarkAsStarEmailSuccess(
|
||||
|
||||
@@ -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: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/email/domain/state/move_to_mailbox_state.dart';
|
||||
@@ -12,7 +13,7 @@ class MoveToMailboxInteractor {
|
||||
|
||||
MoveToMailboxInteractor(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(LoadingMoveToMailbox());
|
||||
|
||||
@@ -24,7 +25,7 @@ class MoveToMailboxInteractor {
|
||||
final currentMailboxState = listState.first;
|
||||
final currentEmailState = listState.last;
|
||||
|
||||
final result = await _emailRepository.moveToMailbox(accountId, moveRequest);
|
||||
final result = await _emailRepository.moveToMailbox(session, accountId, moveRequest);
|
||||
if (result.isNotEmpty) {
|
||||
yield Right(MoveToMailboxSuccess(
|
||||
result.first,
|
||||
|
||||
@@ -408,8 +408,9 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
|
||||
void markAsEmailRead(PresentationEmail presentationEmail, ReadActions readActions) async {
|
||||
final accountId = mailboxDashBoardController.accountId.value;
|
||||
if (accountId != null) {
|
||||
consumeState(_markAsEmailReadInteractor.execute(accountId, presentationEmail.toEmail(), readActions));
|
||||
final session = mailboxDashBoardController.sessionCurrent;
|
||||
if (accountId != null && session != null) {
|
||||
consumeState(_markAsEmailReadInteractor.execute(session, accountId, presentationEmail.toEmail(), readActions));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -664,21 +665,33 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
PresentationMailbox destinationMailbox
|
||||
) {
|
||||
if (destinationMailbox.isTrash) {
|
||||
_moveToTrashAction(context, accountId, MoveToMailboxRequest(
|
||||
_moveToTrashAction(
|
||||
context,
|
||||
session,
|
||||
accountId,
|
||||
MoveToMailboxRequest(
|
||||
{currentMailbox.id: [emailSelected.id!]},
|
||||
destinationMailbox.id,
|
||||
MoveAction.moving,
|
||||
session,
|
||||
EmailActionType.moveToTrash));
|
||||
} else if (destinationMailbox.isSpam) {
|
||||
_moveToSpamAction(context, accountId, MoveToMailboxRequest(
|
||||
_moveToSpamAction(
|
||||
context,
|
||||
session,
|
||||
accountId,
|
||||
MoveToMailboxRequest(
|
||||
{currentMailbox.id: [emailSelected.id!]},
|
||||
destinationMailbox.id,
|
||||
MoveAction.moving,
|
||||
session,
|
||||
EmailActionType.moveToSpam));
|
||||
} else {
|
||||
_moveToMailbox(context, accountId, MoveToMailboxRequest(
|
||||
_moveToMailbox(
|
||||
context,
|
||||
session,
|
||||
accountId,
|
||||
MoveToMailboxRequest(
|
||||
{currentMailbox.id: [emailSelected.id!]},
|
||||
destinationMailbox.id,
|
||||
MoveAction.moving,
|
||||
@@ -688,9 +701,9 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
}
|
||||
}
|
||||
|
||||
void _moveToMailbox(BuildContext context, AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
void _moveToMailbox(BuildContext context, Session session, AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
closeEmailView(context);
|
||||
consumeState(_moveToMailboxInteractor.execute(accountId, moveRequest));
|
||||
consumeState(_moveToMailboxInteractor.execute(session, accountId, moveRequest));
|
||||
}
|
||||
|
||||
void _moveToMailboxSuccess(MoveToMailboxSuccess success) {
|
||||
@@ -719,39 +732,55 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
|
||||
void _revertedToOriginalMailbox(MoveToMailboxRequest newMoveRequest) {
|
||||
final accountId = mailboxDashBoardController.accountId.value;
|
||||
if (accountId != null) {
|
||||
_moveToMailbox(currentContext!, accountId, newMoveRequest);
|
||||
final session = mailboxDashBoardController.sessionCurrent;
|
||||
if (accountId != null && session != null) {
|
||||
_moveToMailbox(currentContext!, session, accountId, newMoveRequest);
|
||||
}
|
||||
}
|
||||
|
||||
void moveToTrash(BuildContext context, PresentationEmail email) async {
|
||||
final session = mailboxDashBoardController.sessionCurrent;
|
||||
final accountId = mailboxDashBoardController.accountId.value;
|
||||
final trashMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleTrash);
|
||||
final currentMailbox = getMailboxContain(email);
|
||||
|
||||
if (accountId != null && currentMailbox != null && trashMailboxId != null) {
|
||||
_moveToTrashAction(context, accountId, MoveToMailboxRequest(
|
||||
{currentMailbox.id: [email.id!]},
|
||||
trashMailboxId,
|
||||
MoveAction.moving,
|
||||
mailboxDashBoardController.sessionCurrent!,
|
||||
EmailActionType.moveToTrash)
|
||||
if (session != null && accountId != null && currentMailbox != null && trashMailboxId != null) {
|
||||
_moveToTrashAction(
|
||||
context,
|
||||
session,
|
||||
accountId,
|
||||
MoveToMailboxRequest(
|
||||
{currentMailbox.id: [email.id!]},
|
||||
trashMailboxId,
|
||||
MoveAction.moving,
|
||||
mailboxDashBoardController.sessionCurrent!,
|
||||
EmailActionType.moveToTrash)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void _moveToTrashAction(BuildContext context, AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
void _moveToTrashAction(
|
||||
BuildContext context,
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
MoveToMailboxRequest moveRequest
|
||||
) {
|
||||
closeEmailView(context);
|
||||
mailboxDashBoardController.moveToMailbox(accountId, moveRequest);
|
||||
mailboxDashBoardController.moveToMailbox(session, accountId, moveRequest);
|
||||
}
|
||||
|
||||
void moveToSpam(BuildContext context, PresentationEmail email) async {
|
||||
final session = mailboxDashBoardController.sessionCurrent;
|
||||
final accountId = mailboxDashBoardController.accountId.value;
|
||||
final spamMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleSpam);
|
||||
final currentMailbox = getMailboxContain(email);
|
||||
|
||||
if (accountId != null && currentMailbox != null && spamMailboxId != null) {
|
||||
_moveToSpamAction(context, accountId, MoveToMailboxRequest(
|
||||
if (session != null && accountId != null && currentMailbox != null && spamMailboxId != null) {
|
||||
_moveToSpamAction(
|
||||
context,
|
||||
session,
|
||||
accountId,
|
||||
MoveToMailboxRequest(
|
||||
{currentMailbox.id: [email.id!]},
|
||||
spamMailboxId,
|
||||
MoveAction.moving,
|
||||
@@ -762,12 +791,17 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
}
|
||||
|
||||
void unSpam(BuildContext context, 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 (accountId != null && spamMailboxId != null && inboxMailboxId != null) {
|
||||
_moveToSpamAction(context, accountId, MoveToMailboxRequest(
|
||||
if (session != null && accountId != null && spamMailboxId != null && inboxMailboxId != null) {
|
||||
_moveToSpamAction(
|
||||
context,
|
||||
session,
|
||||
accountId,
|
||||
MoveToMailboxRequest(
|
||||
{spamMailboxId: [email.id!]},
|
||||
inboxMailboxId,
|
||||
MoveAction.moving,
|
||||
@@ -777,15 +811,21 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
}
|
||||
}
|
||||
|
||||
void _moveToSpamAction(BuildContext context, AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
void _moveToSpamAction(
|
||||
BuildContext context,
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
MoveToMailboxRequest moveRequest
|
||||
) {
|
||||
closeEmailView(context);
|
||||
mailboxDashBoardController.moveToMailbox(accountId, moveRequest);
|
||||
mailboxDashBoardController.moveToMailbox(session, accountId, moveRequest);
|
||||
}
|
||||
|
||||
void markAsStarEmail(PresentationEmail presentationEmail, MarkStarAction markStarAction) async {
|
||||
final accountId = mailboxDashBoardController.accountId.value;
|
||||
if (accountId != null) {
|
||||
consumeState(_markAsStarEmailInteractor.execute(accountId, presentationEmail.toEmail(), markStarAction));
|
||||
final session = mailboxDashBoardController.sessionCurrent;
|
||||
if (accountId != null && session != null) {
|
||||
consumeState(_markAsStarEmailInteractor.execute(session, accountId, presentationEmail.toEmail(), markStarAction));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user