TF-82 Edit a email draft
This commit is contained in:
@@ -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;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user