TF-78 Implement automatically marked as read when open one email

This commit is contained in:
dab246
2021-09-14 10:26:54 +07:00
committed by Dat H. Pham
parent c4b3109294
commit 3219aedc70
11 changed files with 113 additions and 2 deletions
@@ -6,4 +6,6 @@ abstract class EmailDataSource {
Future<Email> getEmailContent(AccountId accountId, EmailId emailId);
Future<bool> sendEmail(AccountId accountId, EmailRequest emailRequest);
Future<bool> markAsRead(AccountId accountId, EmailId emailId, bool unread);
}
@@ -27,4 +27,13 @@ class EmailDataSourceImpl extends EmailDataSource {
throw error;
});
}
@override
Future<bool> markAsRead(AccountId accountId, EmailId emailId, bool unread) {
return Future.sync(() async {
return await emailAPI.markAsRead(accountId, emailId, unread);
}).catchError((error) {
throw error;
});
}
}
@@ -10,6 +10,7 @@ import 'package:jmap_dart_client/jmap/jmap_request.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/email/get/get_email_method.dart';
import 'package:jmap_dart_client/jmap/mail/email/get/get_email_response.dart';
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
import 'package:jmap_dart_client/jmap/mail/email/set/set_email_method.dart';
import 'package:jmap_dart_client/jmap/mail/email/set/set_email_response.dart';
import 'package:jmap_dart_client/jmap/mail/email/submission/address.dart';
@@ -103,4 +104,33 @@ class EmailAPI {
throw error;
});
}
Future<bool> markAsRead(AccountId accountId, EmailId emailId, bool unread) async {
final setEmailMethod = SetEmailMethod(accountId)
..addUpdates({
emailId.id: PatchObject({
KeyWordIdentifier.emailSeen.generatePath() : unread ? null : true
})
});
final requestBuilder = JmapRequestBuilder(httpClient, ProcessingInvocation());
final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
final response = await (requestBuilder
..usings(setEmailMethod.requiredCapabilities))
.build()
.execute();
final setEmailResponse = response.parse<SetEmailResponse>(
setEmailInvocation.methodCallId,
SetEmailResponse.deserialize);
return Future.sync(() async {
final emailUpdated = setEmailResponse!.updated![emailId.id];
return emailUpdated == null;
}).catchError((error) {
throw error;
});
}
}
@@ -20,4 +20,9 @@ class EmailRepositoryImpl extends EmailRepository {
Future<bool> sendEmail(AccountId accountId, EmailRequest emailRequest) {
return emailDataSource.sendEmail(accountId, emailRequest);
}
@override
Future<bool> markAsRead(AccountId accountId, EmailId emailId, bool unread) {
return emailDataSource.markAsRead(accountId, emailId, unread);
}
}