diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.java b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.java index df65e4d18c..42f71ab6c4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.java @@ -1488,8 +1488,9 @@ public class AttachmentTable extends DatabaseTable { public void duplicateAttachmentsForMessage(long destinationMessageId, long sourceMessageId, Collection excludedIds) { SQLiteDatabaseExtensionsKt.withinTransaction(getWritableDatabase(), db -> { db.execSQL("CREATE TEMPORARY TABLE tmp_part AS SELECT * FROM " + TABLE_NAME + " WHERE " + MMS_ID + " = ?", SqlUtil.buildArgs(sourceMessageId)); - for (Long id : excludedIds) { - db.execSQL("DELETE FROM tmp_part WHERE " + ROW_ID + " = ?", SqlUtil.buildArgs(id)); + List queries = SqlUtil.buildCollectionQuery(ROW_ID, excludedIds); + for (SqlUtil.Query query : queries) { + db.delete("tmp_part", query.getWhere(), query.getWhereArgs()); } db.execSQL("UPDATE tmp_part SET " + ROW_ID + " = NULL, " + MMS_ID + " = ?", SqlUtil.buildArgs(destinationMessageId)); db.execSQL("INSERT INTO " + TABLE_NAME + " SELECT * FROM tmp_part"); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt index 4a8d27a235..be4b099d35 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt @@ -2593,13 +2593,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat } if (retrieved.attachments.isEmpty() && editedMessage?.id != null && attachments.getAttachmentsForMessage(editedMessage.id).isNotEmpty()) { - val linkPreviewAttachmentIds = HashSet() - for (linkPreview in editedMessage.linkPreviews) { - val attachmentId = linkPreview.attachmentId - if (attachmentId != null) { - linkPreviewAttachmentIds.add(attachmentId.rowId) - } - } + val linkPreviewAttachmentIds = editedMessage.linkPreviews.mapNotNull { it.attachmentId?.rowId }.toSet() attachments.duplicateAttachmentsForMessage(messageId, editedMessage.id, linkPreviewAttachmentIds) } @@ -3029,7 +3023,9 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat contentValues.put(QUOTE_BODY_RANGES, quoteBodyRanges.build().toByteArray()) } - quoteAttachments += message.outgoingQuote.attachments + if (editedMessage == null) { + quoteAttachments += message.outgoingQuote.attachments + } } val updatedBodyAndMentions = MentionUtil.updateBodyAndMentionsWithPlaceholders(message.body, message.mentions) @@ -3084,6 +3080,13 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat .where("$ID_WHERE OR $LATEST_REVISION_ID = ?", message.messageToEdit, message.messageToEdit) .run() + val textAttachments = (editedMessage as? MediaMmsMessageRecord)?.slideDeck?.asAttachments()?.filter { it.contentType == MediaUtil.LONG_TEXT }?.mapNotNull { (it as? DatabaseAttachment)?.attachmentId?.rowId } ?: emptyList() + val linkPreviewAttachments = (editedMessage as? MediaMmsMessageRecord)?.linkPreviews?.mapNotNull { it.attachmentId?.rowId } ?: emptyList() + val excludeIds = HashSet() + excludeIds += textAttachments + excludeIds += linkPreviewAttachments + attachments.duplicateAttachmentsForMessage(messageId, message.messageToEdit, excludeIds) + reactions.moveReactionsToNewMessage(messageId, message.messageToEdit) }