diff --git a/app/src/main/java/com/infomaniak/mail/ui/newMessage/NewMessageViewModel.kt b/app/src/main/java/com/infomaniak/mail/ui/newMessage/NewMessageViewModel.kt index 4ff6aca626..7b77b0a769 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/newMessage/NewMessageViewModel.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/newMessage/NewMessageViewModel.kt @@ -780,13 +780,22 @@ class NewMessageViewModel @Inject constructor( if (recipient.isDisplayedAsExternal) appContext.trackExternalEvent("deleteRecipient") } - fun deleteAttachment(position: Int) = runCatching { - val attachments = attachmentsLiveData.valueOrEmpty().toMutableList() - val attachment = attachments[position] - attachment.getUploadLocalFile()?.delete() - LocalStorageUtils.deleteAttachmentUploadDir(appContext, draftLocalUuid!!, attachment.localUuid) - attachments.removeAt(position) - attachmentsLiveData.value = attachments + fun deleteAttachment(position: Int) = viewModelScope.launch(ioCoroutineContext) { + runCatching { + val attachments = attachmentsLiveData.valueOrEmpty().toMutableList() + val attachment = attachments[position] + attachment.getUploadLocalFile()?.delete() + LocalStorageUtils.deleteAttachmentUploadDir(appContext, draftLocalUuid!!, attachment.localUuid) + + mailboxContentRealm().write { + draftController.updateDraft(draftLocalUuid!!, realm = this) { + it.attachments.findSpecificAttachment(attachment)?.let(::delete) + } + } + + attachments.removeAt(position) + attachmentsLiveData.postValue(attachments) + } } fun updateIsSendingAllowed( diff --git a/app/src/main/java/com/infomaniak/mail/utils/extensions/AttachmentExtensions.kt b/app/src/main/java/com/infomaniak/mail/utils/extensions/AttachmentExtensions.kt index fe79b2227e..4bbd19efbc 100644 --- a/app/src/main/java/com/infomaniak/mail/utils/extensions/AttachmentExtensions.kt +++ b/app/src/main/java/com/infomaniak/mail/utils/extensions/AttachmentExtensions.kt @@ -208,14 +208,7 @@ object AttachmentExtensions { } } - fun List.findSpecificAttachment(attachment: Attachment) = this - .filter { it.localUuid == attachment.localUuid } - .also { - // TODO: If this Sentry never triggers, remove it and replace the - // `filter { … }.also { … }.firstOrNull()` with `singleOrNull { … }` - if (it.count() > 1) Sentry.captureMessage("Found several Attachments with the same localUuid") - } - .firstOrNull() + fun List.findSpecificAttachment(attachment: Attachment) = singleOrNull { it.localUuid == attachment.localUuid } enum class AttachmentIntentType { OPEN_WITH,