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