mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-24 11:45:28 +00:00
Fix remote delete for edit messages.
This commit is contained in:
@@ -1941,6 +1941,18 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
|
||||
return mmsReaderFor(cursor)
|
||||
}
|
||||
|
||||
private fun getPreviousEditIds(id: Long): List<Long> {
|
||||
return readableDatabase
|
||||
.select(ID)
|
||||
.from(TABLE_NAME)
|
||||
.where("$LATEST_REVISION_ID = ?", id)
|
||||
.orderBy("$DATE_SENT ASC")
|
||||
.run()
|
||||
.readToList {
|
||||
it.requireLong(ID)
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateMailboxBitmask(id: Long, maskOff: Long, maskOn: Long, threadId: Optional<Long>) {
|
||||
writableDatabase.withinTransaction { db ->
|
||||
db.execSQL(
|
||||
@@ -2011,7 +2023,33 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
|
||||
ApplicationDependencies.getDatabaseObserver().notifyConversationListListeners()
|
||||
}
|
||||
|
||||
fun markAsRemoteDelete(targetMessage: MessageRecord) {
|
||||
writableDatabase.withinTransaction { db ->
|
||||
if (targetMessage.isEditMessage) {
|
||||
val latestRevisionId = (targetMessage as? MediaMmsMessageRecord)?.latestRevisionId?.id ?: targetMessage.id
|
||||
markAsRemoteDeleteInternal(latestRevisionId)
|
||||
getPreviousEditIds(latestRevisionId).map { id ->
|
||||
db.update(TABLE_NAME)
|
||||
.values(
|
||||
ORIGINAL_MESSAGE_ID to null,
|
||||
LATEST_REVISION_ID to null
|
||||
)
|
||||
.where("$ID = ?", id)
|
||||
.run()
|
||||
deleteMessage(id)
|
||||
}
|
||||
} else {
|
||||
markAsRemoteDeleteInternal(targetMessage.id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun markAsRemoteDelete(messageId: Long) {
|
||||
val targetMessage: MessageRecord = getMessageRecord(messageId)
|
||||
markAsRemoteDelete(targetMessage)
|
||||
}
|
||||
|
||||
private fun markAsRemoteDeleteInternal(messageId: Long) {
|
||||
var deletedAttachments = false
|
||||
writableDatabase.withinTransaction { db ->
|
||||
db.update(TABLE_NAME)
|
||||
@@ -2023,7 +2061,9 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
|
||||
QUOTE_TYPE to null,
|
||||
QUOTE_ID to null,
|
||||
LINK_PREVIEWS to null,
|
||||
SHARED_CONTACTS to null
|
||||
SHARED_CONTACTS to null,
|
||||
ORIGINAL_MESSAGE_ID to null,
|
||||
LATEST_REVISION_ID to null
|
||||
)
|
||||
.where("$ID = ?", messageId)
|
||||
.run()
|
||||
|
||||
@@ -522,7 +522,7 @@ object DataMessageProcessor {
|
||||
val targetMessage: MessageRecord? = SignalDatabase.messages.getMessageFor(targetSentTimestamp, senderRecipientId)
|
||||
|
||||
return if (targetMessage != null && MessageConstraintsUtil.isValidRemoteDeleteReceive(targetMessage, senderRecipientId, envelope.serverTimestamp)) {
|
||||
SignalDatabase.messages.markAsRemoteDelete(targetMessage.id)
|
||||
SignalDatabase.messages.markAsRemoteDelete(targetMessage)
|
||||
if (targetMessage.isStory()) {
|
||||
SignalDatabase.messages.deleteRemotelyDeletedStory(targetMessage.id)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user