From e77d9d3ad68e60b94bfbb0afddb1d6ffd5a0d001 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 25 Sep 2024 16:07:38 -0400 Subject: [PATCH] Fix link preview backup import/export. --- .../backup/v2/ArchiveImportExportTests.kt | 5 ++++ .../v2/database/ChatItemExportIterator.kt | 9 ++++---- .../v2/database/ChatItemImportInserter.kt | 23 +++++++++++-------- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ArchiveImportExportTests.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ArchiveImportExportTests.kt index bef92d08ba..78d0ceafe9 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ArchiveImportExportTests.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ArchiveImportExportTests.kt @@ -156,6 +156,11 @@ class ArchiveImportExportTests { runTests { it.startsWith("chat_item_standard_message_with_edits_") } } +// @Test + fun chatItemStandardMessageWithLinkPreview() { + runTests { it.startsWith("chat_item_standard_message_with_link_preview_") } + } + // @Test fun chatItemStandardMessageWithQuote() { runTests { it.startsWith("chat_item_standard_message_with_quote_") } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemExportIterator.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemExportIterator.kt index 199431f6bb..14ccd07e05 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemExportIterator.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemExportIterator.kt @@ -12,6 +12,7 @@ import org.json.JSONException import org.signal.core.util.Base64 import org.signal.core.util.Hex import org.signal.core.util.logging.Log +import org.signal.core.util.nullIfEmpty import org.signal.core.util.orNull import org.signal.core.util.requireBlob import org.signal.core.util.requireBoolean @@ -579,12 +580,12 @@ class ChatItemExportIterator(private val cursor: Cursor, private val batchSize: return emptyList() } - private fun LinkPreview.toBackupLinkPreview(): org.thoughtcrime.securesms.backup.v2.proto.LinkPreview { + private fun LinkPreview.toRemoteLinkPreview(): org.thoughtcrime.securesms.backup.v2.proto.LinkPreview { return org.thoughtcrime.securesms.backup.v2.proto.LinkPreview( url = url, - title = title, + title = title.nullIfEmpty(), image = (thumbnail.orNull() as? DatabaseAttachment)?.toRemoteMessageAttachment()?.pointer, - description = description, + description = description.nullIfEmpty(), date = date ) } @@ -690,7 +691,7 @@ class ChatItemExportIterator(private val cursor: Cursor, private val batchSize: quote = this.toQuote(quotedAttachments), text = text, attachments = messageAttachments.toBackupAttachments(), - linkPreview = linkPreviews.map { it.toBackupLinkPreview() }, + linkPreview = linkPreviews.map { it.toRemoteLinkPreview() }, longText = longTextAttachment?.toRemoteFilePointer(mediaArchiveEnabled), reactions = reactionRecords.toBackupReactions() ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemImportInserter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemImportInserter.kt index 3961356674..734827220d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemImportInserter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemImportInserter.kt @@ -400,18 +400,21 @@ class ChatItemImportInserter( it.toLocalAttachment() } ?: emptyList() - if (attachments.isNotEmpty() || linkPreviewAttachments.isNotEmpty() || quoteAttachments.isNotEmpty() || longTextAttachments.isNotEmpty()) { + val hasAttachments = attachments.isNotEmpty() || linkPreviewAttachments.isNotEmpty() || quoteAttachments.isNotEmpty() || longTextAttachments.isNotEmpty() + + if (hasAttachments || linkPreviews.isNotEmpty()) { followUp = { messageRowId -> - val attachmentMap = SignalDatabase.attachments.insertAttachmentsForMessage(messageRowId, attachments + linkPreviewAttachments + longTextAttachments, quoteAttachments) + val attachmentMap = if (hasAttachments) { + SignalDatabase.attachments.insertAttachmentsForMessage(messageRowId, attachments + linkPreviewAttachments + longTextAttachments, quoteAttachments) + } else { + emptyMap() + } + if (linkPreviews.isNotEmpty()) { - db.update( - MessageTable.TABLE_NAME, - contentValuesOf( - MessageTable.LINK_PREVIEWS to SignalDatabase.messages.getSerializedLinkPreviews(attachmentMap, linkPreviews) - ), - "${MessageTable.ID} = ?", - SqlUtil.buildArgs(messageRowId) - ) + db.update(MessageTable.TABLE_NAME) + .values(MessageTable.LINK_PREVIEWS to SignalDatabase.messages.getSerializedLinkPreviews(attachmentMap, linkPreviews)) + .where("${MessageTable.ID} = ?", messageRowId) + .run() } } }