TF-2667 Handle error better when perform save as drafts
This commit is contained in:
-25
@@ -72,13 +72,6 @@ class CreateNewAndSaveEmailToDraftsInteractor {
|
||||
cancelToken: cancelToken
|
||||
);
|
||||
|
||||
await _deleteOldDraftsEmail(
|
||||
session: createEmailRequest.session,
|
||||
accountId: createEmailRequest.accountId,
|
||||
draftEmailId: createEmailRequest.draftsEmailId!,
|
||||
cancelToken: cancelToken
|
||||
);
|
||||
|
||||
yield dartz.Right<Failure, Success>(
|
||||
UpdateEmailDraftsSuccess(
|
||||
emailDraftSaved.id!,
|
||||
@@ -137,22 +130,4 @@ class CreateNewAndSaveEmailToDraftsInteractor {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _deleteOldDraftsEmail({
|
||||
required Session session,
|
||||
required AccountId accountId,
|
||||
required EmailId draftEmailId,
|
||||
CancelToken? cancelToken
|
||||
}) async {
|
||||
try {
|
||||
await _emailRepository.removeEmailDrafts(
|
||||
session,
|
||||
accountId,
|
||||
draftEmailId,
|
||||
cancelToken: cancelToken
|
||||
);
|
||||
} catch (e) {
|
||||
logError('CreateNewAndSaveEmailToDraftsInteractor::_deleteOldDraftsEmail: Exception: $e');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -541,11 +541,14 @@ class EmailAPI with HandleSetErrorMixin {
|
||||
setEmailInvocation.methodCallId,
|
||||
SetEmailResponse.deserialize);
|
||||
|
||||
return Future.sync(() async {
|
||||
return setEmailResponse?.destroyed?.contains(emailId.id) == true;
|
||||
}).catchError((error) {
|
||||
throw error;
|
||||
});
|
||||
final isEmailDestroyed = setEmailResponse?.destroyed?.contains(emailId.id) ?? false;
|
||||
final mapErrors = handleSetResponse([setEmailResponse]);
|
||||
|
||||
if (isEmailDestroyed && mapErrors.isEmpty) {
|
||||
return isEmailDestroyed;
|
||||
} else {
|
||||
throw SetMethodException(mapErrors);
|
||||
}
|
||||
}
|
||||
|
||||
Future<Email> updateEmailDrafts(
|
||||
@@ -555,37 +558,25 @@ class EmailAPI with HandleSetErrorMixin {
|
||||
EmailId oldEmailId,
|
||||
{CancelToken? cancelToken}
|
||||
) async {
|
||||
final idCreateMethod = Id(_uuid.v1());
|
||||
final setEmailMethod = SetEmailMethod(accountId)
|
||||
..addCreate(idCreateMethod, newEmail)
|
||||
..addDestroy({oldEmailId.id});
|
||||
|
||||
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
|
||||
|
||||
final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
|
||||
|
||||
final capabilities = setEmailMethod.requiredCapabilities
|
||||
.toCapabilitiesSupportTeamMailboxes(session, accountId);
|
||||
|
||||
final response = await (requestBuilder
|
||||
..usings(capabilities))
|
||||
.build()
|
||||
.execute(cancelToken: cancelToken);
|
||||
|
||||
final setEmailResponse = response.parse<SetEmailResponse>(
|
||||
setEmailInvocation.methodCallId,
|
||||
SetEmailResponse.deserialize
|
||||
final emailCreated = await saveEmailAsDrafts(
|
||||
session,
|
||||
accountId,
|
||||
newEmail,
|
||||
cancelToken: cancelToken
|
||||
);
|
||||
|
||||
final emailUpdated = setEmailResponse?.created?[idCreateMethod];
|
||||
final isEmailDeleted = setEmailResponse?.destroyed?.contains(oldEmailId.id);
|
||||
final mapErrors = handleSetResponse([setEmailResponse]);
|
||||
|
||||
if (emailUpdated != null && isEmailDeleted == true && mapErrors.isEmpty) {
|
||||
return emailUpdated;
|
||||
} else {
|
||||
throw SetMethodException(mapErrors);
|
||||
try {
|
||||
await removeEmailDrafts(
|
||||
session,
|
||||
accountId,
|
||||
oldEmailId,
|
||||
cancelToken: cancelToken
|
||||
);
|
||||
} catch (e) {
|
||||
logError('EmailAPI::updateEmailDrafts: Exception = $e');
|
||||
}
|
||||
|
||||
return emailCreated;
|
||||
}
|
||||
|
||||
Future<List<EmailId>> deleteMultipleEmailsPermanently(
|
||||
|
||||
Reference in New Issue
Block a user