From 1212d31c738fd859c2aeb1a5191b26084dad75e5 Mon Sep 17 00:00:00 2001 From: Kevin Boulongne Date: Tue, 4 Feb 2025 14:49:01 +0100 Subject: [PATCH 1/4] fix: Re-trigger Attachments upload when removing an Attachment --- .../com/infomaniak/mail/ui/newMessage/NewMessageViewModel.kt | 3 +++ 1 file changed, 3 insertions(+) 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..cbde2aca42 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 @@ -787,6 +787,9 @@ class NewMessageViewModel @Inject constructor( LocalStorageUtils.deleteAttachmentUploadDir(appContext, draftLocalUuid!!, attachment.localUuid) attachments.removeAt(position) attachmentsLiveData.value = attachments + + // If we are removing Attachments, cancel the previous upload so we don't try to upload removed Attachments. + uploadAttachmentsToServer(attachments) } fun updateIsSendingAllowed( From 35054fb25984bc09258863c0d833f9da805d5690 Mon Sep 17 00:00:00 2001 From: Vincent TE Date: Tue, 4 Feb 2025 16:26:23 +0100 Subject: [PATCH 2/4] fix: Delete the attachment we removed from the draft in Realm when we delete one --- .../mail/ui/newMessage/NewMessageViewModel.kt | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) 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 cbde2aca42..e374755f49 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,16 +780,24 @@ 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 - - // If we are removing Attachments, cancel the previous upload so we don't try to upload removed Attachments. - uploadAttachmentsToServer(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) { draftToUpdate -> + draftToUpdate.attachments.apply { + findSpecificAttachment(attachment)?.let(::delete) + } + } + } + + attachments.removeAt(position) + attachmentsLiveData.postValue(attachments) + } } fun updateIsSendingAllowed( From cb8da6f74b5ca5a0d5addbb1667b14ff8a18b5ac Mon Sep 17 00:00:00 2001 From: Kevin Boulongne Date: Mon, 10 Feb 2025 09:23:17 +0100 Subject: [PATCH 3/4] refactor: Remove now useless Sentry --- .../mail/utils/extensions/AttachmentExtensions.kt | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) 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, From 73c1fb952074e07de6e7da683553bdf5fdc74819 Mon Sep 17 00:00:00 2001 From: Kevin Boulongne Date: Mon, 10 Feb 2025 09:26:51 +0100 Subject: [PATCH 4/4] refactor: Clean code --- .../infomaniak/mail/ui/newMessage/NewMessageViewModel.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) 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 e374755f49..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 @@ -788,10 +788,8 @@ class NewMessageViewModel @Inject constructor( LocalStorageUtils.deleteAttachmentUploadDir(appContext, draftLocalUuid!!, attachment.localUuid) mailboxContentRealm().write { - draftController.updateDraft(draftLocalUuid!!, realm = this) { draftToUpdate -> - draftToUpdate.attachments.apply { - findSpecificAttachment(attachment)?.let(::delete) - } + draftController.updateDraft(draftLocalUuid!!, realm = this) { + it.attachments.findSpecificAttachment(attachment)?.let(::delete) } }