TF-239 Delete single email permanently

This commit is contained in:
dab246
2022-04-05 11:45:50 +07:00
committed by Dat H. Pham
parent 6445e3076f
commit a89c5db744
15 changed files with 171 additions and 20 deletions
@@ -52,5 +52,7 @@ abstract class EmailDataSource {
Future<Email?> updateEmailDrafts(AccountId accountId, Email newEmail, EmailId oldEmailId);
Future<List<EmailId>> deleteMultipleEmailPermanently(Session session, AccountId accountId, List<EmailId> emailIds);
Future<List<EmailId>> deleteMultipleEmailsPermanently(Session session, AccountId accountId, List<EmailId> emailIds);
Future<bool> deleteEmailPermanently(AccountId accountId, EmailId emailId);
}
@@ -135,9 +135,18 @@ class EmailDataSourceImpl extends EmailDataSource {
}
@override
Future<List<EmailId>> deleteMultipleEmailPermanently(Session session, AccountId accountId, List<EmailId> emailIds) {
Future<List<EmailId>> deleteMultipleEmailsPermanently(Session session, AccountId accountId, List<EmailId> emailIds) {
return Future.sync(() async {
return await emailAPI.deleteMultipleEmailPermanently(session, accountId, emailIds);
return await emailAPI.deleteMultipleEmailsPermanently(session, accountId, emailIds);
}).catchError((error) {
throw error;
});
}
@override
Future<bool> deleteEmailPermanently(AccountId accountId, EmailId emailId) {
return Future.sync(() async {
return await emailAPI.deleteEmailPermanently(accountId, emailId);
}).catchError((error) {
throw error;
});
+20 -1
View File
@@ -386,7 +386,7 @@ class EmailAPI {
});
}
Future<List<EmailId>> deleteMultipleEmailPermanently(Session session, AccountId accountId, List<EmailId> emailIds) async {
Future<List<EmailId>> deleteMultipleEmailsPermanently(Session session, AccountId accountId, List<EmailId> emailIds) async {
requireCapability(session, [CapabilityIdentifier.jmapCore, CapabilityIdentifier.jmapMail]);
final coreCapability = (session.capabilities[CapabilityIdentifier.jmapCore] as CoreCapability);
@@ -430,4 +430,23 @@ class EmailAPI {
return listEmailResult;
}
Future<bool> deleteEmailPermanently(AccountId accountId, EmailId emailId) async {
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
final setEmailMethod = SetEmailMethod(accountId)
..addDestroy(Set.of([emailId.id]));
final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
final response = await (requestBuilder
..usings(setEmailMethod.requiredCapabilities))
.build()
.execute();
final setEmailResponse = response.parse<SetEmailResponse>(
setEmailInvocation.methodCallId,
SetEmailResponse.deserialize);
return setEmailResponse?.destroyed?.contains(emailId.id) == true;
}
}
@@ -117,7 +117,12 @@ class EmailRepositoryImpl extends EmailRepository {
}
@override
Future<List<EmailId>> deleteMultipleEmailPermanently(Session session, AccountId accountId, List<EmailId> emailIds) {
return emailDataSource.deleteMultipleEmailPermanently(session, 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);
}
}