Skip to content

Commit 86cd4c5

Browse files
authored
Fix remote delete for edit messages.
1 parent 62d5f61 commit 86cd4c5

2 files changed

Lines changed: 42 additions & 2 deletions

File tree

app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1941,6 +1941,18 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
19411941
return mmsReaderFor(cursor)
19421942
}
19431943

1944+
private fun getPreviousEditIds(id: Long): List<Long> {
1945+
return readableDatabase
1946+
.select(ID)
1947+
.from(TABLE_NAME)
1948+
.where("$LATEST_REVISION_ID = ?", id)
1949+
.orderBy("$DATE_SENT ASC")
1950+
.run()
1951+
.readToList {
1952+
it.requireLong(ID)
1953+
}
1954+
}
1955+
19441956
private fun updateMailboxBitmask(id: Long, maskOff: Long, maskOn: Long, threadId: Optional<Long>) {
19451957
writableDatabase.withinTransaction { db ->
19461958
db.execSQL(
@@ -2011,7 +2023,33 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
20112023
ApplicationDependencies.getDatabaseObserver().notifyConversationListListeners()
20122024
}
20132025

2026+
fun markAsRemoteDelete(targetMessage: MessageRecord) {
2027+
writableDatabase.withinTransaction { db ->
2028+
if (targetMessage.isEditMessage) {
2029+
val latestRevisionId = (targetMessage as? MediaMmsMessageRecord)?.latestRevisionId?.id ?: targetMessage.id
2030+
markAsRemoteDeleteInternal(latestRevisionId)
2031+
getPreviousEditIds(latestRevisionId).map { id ->
2032+
db.update(TABLE_NAME)
2033+
.values(
2034+
ORIGINAL_MESSAGE_ID to null,
2035+
LATEST_REVISION_ID to null
2036+
)
2037+
.where("$ID = ?", id)
2038+
.run()
2039+
deleteMessage(id)
2040+
}
2041+
} else {
2042+
markAsRemoteDeleteInternal(targetMessage.id)
2043+
}
2044+
}
2045+
}
2046+
20142047
fun markAsRemoteDelete(messageId: Long) {
2048+
val targetMessage: MessageRecord = getMessageRecord(messageId)
2049+
markAsRemoteDelete(targetMessage)
2050+
}
2051+
2052+
private fun markAsRemoteDeleteInternal(messageId: Long) {
20152053
var deletedAttachments = false
20162054
writableDatabase.withinTransaction { db ->
20172055
db.update(TABLE_NAME)
@@ -2023,7 +2061,9 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
20232061
QUOTE_TYPE to null,
20242062
QUOTE_ID to null,
20252063
LINK_PREVIEWS to null,
2026-
SHARED_CONTACTS to null
2064+
SHARED_CONTACTS to null,
2065+
ORIGINAL_MESSAGE_ID to null,
2066+
LATEST_REVISION_ID to null
20272067
)
20282068
.where("$ID = ?", messageId)
20292069
.run()

app/src/main/java/org/thoughtcrime/securesms/messages/DataMessageProcessor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,7 @@ object DataMessageProcessor {
522522
val targetMessage: MessageRecord? = SignalDatabase.messages.getMessageFor(targetSentTimestamp, senderRecipientId)
523523

524524
return if (targetMessage != null && MessageConstraintsUtil.isValidRemoteDeleteReceive(targetMessage, senderRecipientId, envelope.serverTimestamp)) {
525-
SignalDatabase.messages.markAsRemoteDelete(targetMessage.id)
525+
SignalDatabase.messages.markAsRemoteDelete(targetMessage)
526526
if (targetMessage.isStory()) {
527527
SignalDatabase.messages.deleteRemotelyDeletedStory(targetMessage.id)
528528
}

0 commit comments

Comments
 (0)