diff --git a/lib/features/composer/domain/usecases/create_new_and_save_email_to_drafts_interactor.dart b/lib/features/composer/domain/usecases/create_new_and_save_email_to_drafts_interactor.dart index 1102b225f..0c20eeff1 100644 --- a/lib/features/composer/domain/usecases/create_new_and_save_email_to_drafts_interactor.dart +++ b/lib/features/composer/domain/usecases/create_new_and_save_email_to_drafts_interactor.dart @@ -72,13 +72,6 @@ class CreateNewAndSaveEmailToDraftsInteractor { cancelToken: cancelToken ); - await _deleteOldDraftsEmail( - session: createEmailRequest.session, - accountId: createEmailRequest.accountId, - draftEmailId: createEmailRequest.draftsEmailId!, - cancelToken: cancelToken - ); - yield dartz.Right( UpdateEmailDraftsSuccess( emailDraftSaved.id!, @@ -137,22 +130,4 @@ class CreateNewAndSaveEmailToDraftsInteractor { return null; } } - - Future _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'); - } - } } \ No newline at end of file diff --git a/lib/features/email/data/network/email_api.dart b/lib/features/email/data/network/email_api.dart index 44a1d59ac..4a148a663 100644 --- a/lib/features/email/data/network/email_api.dart +++ b/lib/features/email/data/network/email_api.dart @@ -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 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( - 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> deleteMultipleEmailsPermanently(