TF-82 Edit a email draft

This commit is contained in:
dab246
2022-02-21 17:07:07 +07:00
committed by Dat H. Pham
parent a2ffd9b354
commit 808191a806
19 changed files with 275 additions and 55 deletions
@@ -38,4 +38,6 @@ abstract class EmailDataSource {
Future<Email?> saveEmailAsDrafts(AccountId accountId, Email email);
Future<bool> removeEmailDrafts(AccountId accountId, EmailId emailId);
Future<Email?> updateEmailDrafts(AccountId accountId, Email newEmail, EmailId oldEmailId);
}
@@ -104,4 +104,13 @@ class EmailDataSourceImpl extends EmailDataSource {
throw error;
});
}
@override
Future<Email?> updateEmailDrafts(AccountId accountId, Email newEmail, EmailId oldEmailId) {
return Future.sync(() async {
return await emailAPI.updateEmailDrafts(accountId, newEmail, oldEmailId);
}).catchError((error) {
throw error;
});
}
}
+40 -2
View File
@@ -68,6 +68,11 @@ class EmailAPI {
final setEmailMethod = SetEmailMethod(accountId)
..addCreate(emailRequest.email.id.id, emailRequest.email);
if (emailRequest.emailIdDestroyed != null) {
setEmailMethod
..addDestroy({emailRequest.emailIdDestroyed!.id});
}
final setEmailSubmissionMethod = SetEmailSubmissionMethod(accountId)
..addCreate(
emailRequest.submissionCreateId,
@@ -107,8 +112,11 @@ class EmailAPI {
methodName: setEmailInvocation.methodName);
return Future.sync(() async {
final emailCreated = setEmailResponse!.created![emailRequest.email.id.id];
return setEmailSubmissionResponse!.updated![emailCreated!.id.id] == null;
final emailCreated = setEmailResponse?.created?[emailRequest.email.id.id];
if (emailCreated != null) {
return setEmailSubmissionResponse?.updated?[emailCreated.id.id] == null;
}
return false;
}).catchError((error) {
throw error;
});
@@ -301,4 +309,34 @@ class EmailAPI {
throw error;
});
}
Future<Email?> updateEmailDrafts(AccountId accountId, Email newEmail, EmailId oldEmailId) async {
final setEmailMethod = SetEmailMethod(accountId)
..addCreate(newEmail.id.id, newEmail)
..addDestroy({oldEmailId.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 {
final emailUpdated = setEmailResponse?.created?[newEmail.id.id];
final emailDestroyed = setEmailResponse?.destroyed?.contains(oldEmailId.id);
if (emailUpdated != null && emailDestroyed == true) {
return emailUpdated;
}
return null;
}).catchError((error) {
throw error;
});
}
}
@@ -98,4 +98,9 @@ class EmailRepositoryImpl extends EmailRepository {
Future<bool> removeEmailDrafts(AccountId accountId, EmailId emailId) {
return emailDataSource.removeEmailDrafts(accountId, emailId);
}
@override
Future<Email?> updateEmailDrafts(AccountId accountId, Email newEmail, EmailId oldEmailId) {
return emailDataSource.updateEmailDrafts(accountId, newEmail, oldEmailId);
}
}