TF-79 Mark as star/unstar selected multiple email

This commit is contained in:
dab246
2021-09-20 14:29:02 +07:00
committed by Dat H. Pham
parent 1b061d4af9
commit c7a3e90a68
30 changed files with 565 additions and 98 deletions
@@ -31,4 +31,9 @@ abstract class EmailDataSource {
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveRequest moveRequest);
Future<bool> markAsImportant(AccountId accountId, EmailId emailId, ImportantAction importantAction);
Future<List<Email>> markAsStar(
AccountId accountId,
List<Email> emails,
MarkStarAction markStarAction
);
}
@@ -79,9 +79,9 @@ class EmailDataSourceImpl extends EmailDataSource {
}
@override
Future<bool> markAsImportant(AccountId accountId, EmailId emailId, ImportantAction importantAction) {
Future<List<Email>> markAsStar(AccountId accountId, List<Email> emails, MarkStarAction markStarAction) {
return Future.sync(() async {
return await emailAPI.markAsImportant(accountId, emailId, importantAction);
return await emailAPI.markAsStar(accountId, emails, markStarAction);
}).catchError((error) {
throw error;
});
+18 -12
View File
@@ -221,27 +221,33 @@ class EmailAPI {
}
Future<bool> markAsImportant(AccountId accountId, EmailId emailId, ImportantAction importantAction) async {
Future<List<Email>> markAsStar(AccountId accountId, List<Email> emails, MarkStarAction markStarAction) async {
final emailIds = emails.map((email) => email.id).toList();
final setEmailMethod = SetEmailMethod(accountId)
..addUpdates({
emailId.id: KeyWordIdentifier.emailFlagged.generateImportantActionPath(importantAction)
});
..addUpdates(emailIds.generateMapUpdateObjectMarkAsStar(markStarAction));
final getEmailMethod = GetEmailMethod(accountId)
..addIds(emailIds.toIds().toSet())
..addProperties(Properties({'keywords'}));
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
requestBuilder.invocation(setEmailMethod);
final getEmailInvocation = requestBuilder.invocation(getEmailMethod);
final response = await (requestBuilder
..usings(setEmailMethod.requiredCapabilities))
.build()
.execute();
..usings(setEmailMethod.requiredCapabilities))
.build()
.execute();
final setEmailResponse = response.parse<SetEmailResponse>(
setEmailInvocation.methodCallId,
SetEmailResponse.deserialize);
final getEmailResponse = response.parse<GetEmailResponse>(
getEmailInvocation.methodCallId,
GetEmailResponse.deserialize);
return Future.sync(() async {
final emailUpdated = setEmailResponse!.updated![emailId.id];
return emailUpdated == null;
return getEmailResponse!.list;
}).catchError((error) {
throw error;
});
@@ -61,7 +61,11 @@ class EmailRepositoryImpl extends EmailRepository {
}
@override
Future<bool> markAsImportant(AccountId accountId, EmailId emailId, ImportantAction importantAction) {
return emailDataSource.markAsImportant(accountId, emailId, importantAction);
Future<List<Email>> markAsStar(
AccountId accountId,
List<Email> emails,
MarkStarAction markStarAction
) {
return emailDataSource.markAsStar(accountId, emails, markStarAction);
}
}