From 5c0fbdc8b5eadebfdd56329cf0e65ad44e959f9d Mon Sep 17 00:00:00 2001 From: Michelle Tang Date: Tue, 28 Jul 2026 11:54:51 -0400 Subject: [PATCH] Fix expiring issues. --- .../thoughtcrime/securesms/database/MessageTable.kt | 5 +++-- .../securesms/messages/SyncMessageProcessor.kt | 12 ++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) 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 2451f73988..4bbbf0488b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt @@ -5705,12 +5705,13 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat val threads: MutableList = LinkedList() readableDatabase - .select(ID, THREAD_ID, EXPIRES_IN, EXPIRE_STARTED, LATEST_REVISION_ID) + .select(ID, TYPE, THREAD_ID, EXPIRES_IN, EXPIRE_STARTED, LATEST_REVISION_ID) .from(TABLE_NAME) .where("$DATE_SENT = ? AND ($FROM_RECIPIENT_ID = ? OR ($FROM_RECIPIENT_ID = ? AND $outgoingTypeClause))", messageId.timetamp, messageId.recipientId, Recipient.self().id) .run() .forEach { cursor -> val id = cursor.requireLong(ID) + val type = cursor.requireLong(TYPE) val threadId = cursor.requireLong(THREAD_ID) val expiresIn = cursor.requireLong(EXPIRES_IN) val expireStarted = cursor.requireLong(EXPIRE_STARTED).let { @@ -5731,7 +5732,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat VOTES_LAST_SEEN to System.currentTimeMillis() ) - if (expiresIn > 0) { + if (expiresIn > 0 && !MessageTypes.isExpirationTimerUpdate(type)) { values.put(EXPIRE_STARTED, expireStarted) expiring += Pair(id, expiresIn) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt index 1157aea557..e6ceea570b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt @@ -2027,8 +2027,8 @@ object SyncMessageProcessor { SignalDatabase.messages.markAsSent(messageId) if (expiresInMillis > 0) { - SignalDatabase.messages.markExpireStarted(messageId, sent.expirationStartTimestamp ?: 0) - AppDependencies.expiringMessageManager.scheduleDeletion(messageId, recipient.isGroup, sent.expirationStartTimestamp ?: 0, expiresInMillis) + SignalDatabase.messages.markExpireStarted(messageId, sent.expirationStartTimestamp ?: sent.timestamp!!) + AppDependencies.expiringMessageManager.scheduleDeletion(messageId, recipient.isGroup, sent.expirationStartTimestamp ?: sent.timestamp!!, expiresInMillis) } return threadId @@ -2094,8 +2094,8 @@ object SyncMessageProcessor { log(envelope.clientTimestamp!!, "Inserted sync poll end message as messageId $messageId") if (expiresInMillis > 0) { - SignalDatabase.messages.markExpireStarted(messageId, sent.expirationStartTimestamp ?: 0) - AppDependencies.expiringMessageManager.scheduleDeletion(messageId, recipient.isGroup, sent.expirationStartTimestamp ?: 0, expiresInMillis) + SignalDatabase.messages.markExpireStarted(messageId, sent.expirationStartTimestamp ?: sent.timestamp!!) + AppDependencies.expiringMessageManager.scheduleDeletion(messageId, recipient.isGroup, sent.expirationStartTimestamp ?: sent.timestamp!!, expiresInMillis) } return threadId @@ -2161,8 +2161,8 @@ object SyncMessageProcessor { log(envelope.clientTimestamp!!, "Inserted sync pin message as messageId $messageId") if (expiresInMillis > 0) { - SignalDatabase.messages.markExpireStarted(messageId, sent.expirationStartTimestamp ?: 0) - AppDependencies.expiringMessageManager.scheduleDeletion(messageId, recipient.isGroup, sent.expirationStartTimestamp ?: 0, expiresInMillis) + SignalDatabase.messages.markExpireStarted(messageId, sent.expirationStartTimestamp ?: sent.timestamp!!) + AppDependencies.expiringMessageManager.scheduleDeletion(messageId, recipient.isGroup, sent.expirationStartTimestamp ?: sent.timestamp!!, expiresInMillis) } return threadId