From c1ce4ba80db61fdedc3ca407e60edef796b040e6 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 13 Feb 2025 15:58:50 -0500 Subject: [PATCH] Ensure that audio attachments with text aren't exported as voice notes. --- .../backup/v2/exporters/ChatItemArchiveExporter.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt index 7f22673a10..6fd291b53b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt @@ -1003,7 +1003,7 @@ private fun BackupMessageRecord.toRemoteStandardMessage(exportState: ExportState return StandardMessage( quote = this.toRemoteQuote(mediaArchiveEnabled, quotedAttachments), text = text.takeUnless { hasVoiceNote }, - attachments = messageAttachments.toRemoteAttachments(mediaArchiveEnabled), + attachments = messageAttachments.toRemoteAttachments(mediaArchiveEnabled).withFixedVoiceNotes(textPresent = text != null || longTextAttachment != null), linkPreview = linkPreviews.map { it.toRemoteLinkPreview(mediaArchiveEnabled) }, longText = longTextAttachment?.toRemoteFilePointer(mediaArchiveEnabled), reactions = reactionRecords.toRemote() @@ -1496,6 +1496,16 @@ private fun Text?.isNullOrBlank(): Boolean { return this == null || this.body.isBlank() } +private fun List.withFixedVoiceNotes(textPresent: Boolean): List { + return this.map { + if (textPresent && it.flag == MessageAttachment.Flag.VOICE_MESSAGE) { + it.copy(flag = MessageAttachment.Flag.NONE) + } else { + it + } + } +} + private fun Cursor.toBackupMessageRecord(pastIds: Set, backupStartTime: Long): BackupMessageRecord? { val id = this.requireLong(MessageTable.ID) if (pastIds.contains(id)) {