Fix edit message with media.

This commit is contained in:
Clark 2023-04-24 13:52:04 -04:00 committed by Nicholas
parent 8505530547
commit 324e83489e
2 changed files with 14 additions and 10 deletions

View file

@ -1488,8 +1488,9 @@ public class AttachmentTable extends DatabaseTable {
public void duplicateAttachmentsForMessage(long destinationMessageId, long sourceMessageId, Collection<Long> 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<SqlUtil.Query> 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");

View file

@ -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<Long>()
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<Long>()
excludeIds += textAttachments
excludeIds += linkPreviewAttachments
attachments.duplicateAttachmentsForMessage(messageId, message.messageToEdit, excludeIds)
reactions.moveReactionsToNewMessage(messageId, message.messageToEdit)
}