TF-82 Discard email drafts

This commit is contained in:
dab246
2022-02-21 13:55:19 +07:00
committed by Dat H. Pham
parent ea29405f08
commit a2ffd9b354
14 changed files with 186 additions and 27 deletions
@@ -35,5 +35,7 @@ abstract class EmailDataSource {
MarkStarAction markStarAction
);
Future<bool> saveEmailAsDrafts(AccountId accountId, Email email);
Future<Email?> saveEmailAsDrafts(AccountId accountId, Email email);
Future<bool> removeEmailDrafts(AccountId accountId, EmailId emailId);
}
@@ -88,11 +88,20 @@ class EmailDataSourceImpl extends EmailDataSource {
}
@override
Future<bool> saveEmailAsDrafts(AccountId accountId, Email email) {
Future<Email?> saveEmailAsDrafts(AccountId accountId, Email email) {
return Future.sync(() async {
return await emailAPI.saveEmailAsDrafts(accountId, email);
}).catchError((error) {
throw error;
});
}
@override
Future<bool> removeEmailDrafts(AccountId accountId, EmailId emailId) {
return Future.sync(() async {
return await emailAPI.removeEmailDrafts(accountId, emailId);
}).catchError((error) {
throw error;
});
}
}
+26 -2
View File
@@ -254,7 +254,7 @@ class EmailAPI {
});
}
Future<bool> saveEmailAsDrafts(AccountId accountId, Email email) async {
Future<Email?> saveEmailAsDrafts(AccountId accountId, Email email) async {
final setEmailMethod = SetEmailMethod(accountId)
..addCreate(email.id.id, email);
@@ -272,7 +272,31 @@ class EmailAPI {
SetEmailResponse.deserialize);
return Future.sync(() async {
return setEmailResponse?.created?[email.id.id] != null;
return setEmailResponse?.created?[email.id.id];
}).catchError((error) {
throw error;
});
}
Future<bool> removeEmailDrafts(AccountId accountId, EmailId emailId) async {
final setEmailMethod = SetEmailMethod(accountId)
..addDestroy({emailId.id});
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 {
return setEmailResponse?.destroyed?.contains(emailId.id) == true;
}).catchError((error) {
throw error;
});
@@ -90,7 +90,12 @@ class EmailRepositoryImpl extends EmailRepository {
}
@override
Future<bool> saveEmailAsDrafts(AccountId accountId, Email email) {
Future<Email?> saveEmailAsDrafts(AccountId accountId, Email email) {
return emailDataSource.saveEmailAsDrafts(accountId, email);
}
@override
Future<bool> removeEmailDrafts(AccountId accountId, EmailId emailId) {
return emailDataSource.removeEmailDrafts(accountId, emailId);
}
}