Update rules for expiring messages in backupsV2.

This commit is contained in:
Greyson Parrelli
2025-03-21 16:31:56 -04:00
committed by Cody Henthorne
parent 41783368bd
commit fbcf6e11ef
2 changed files with 18 additions and 12 deletions

View File

@@ -13,8 +13,13 @@ import org.thoughtcrime.securesms.backup.v2.exporters.ChatItemArchiveExporter
import org.thoughtcrime.securesms.backup.v2.importer.ChatItemArchiveImporter import org.thoughtcrime.securesms.backup.v2.importer.ChatItemArchiveImporter
import org.thoughtcrime.securesms.database.GroupTable import org.thoughtcrime.securesms.database.GroupTable
import org.thoughtcrime.securesms.database.MessageTable import org.thoughtcrime.securesms.database.MessageTable
import org.thoughtcrime.securesms.database.MessageTable.Companion.DATE_RECEIVED
import org.thoughtcrime.securesms.database.MessageTable.Companion.EXPIRES_IN
import org.thoughtcrime.securesms.database.MessageTable.Companion.PARENT_STORY_ID
import org.thoughtcrime.securesms.database.MessageTable.Companion.STORY_TYPE
import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.SignalDatabase
import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.recipients.RecipientId
import kotlin.time.Duration.Companion.days
private val TAG = "MessageTableArchiveExtensions" private val TAG = "MessageTableArchiveExtensions"
@@ -25,9 +30,10 @@ fun MessageTable.getMessagesForBackup(db: SignalDatabase, backupTime: Long, medi
val dateReceivedIndex = "message_date_received" val dateReceivedIndex = "message_date_received"
writableDatabase.execSQL( writableDatabase.execSQL(
"""CREATE INDEX $dateReceivedIndex ON ${MessageTable.TABLE_NAME} ( """CREATE INDEX $dateReceivedIndex ON ${MessageTable.TABLE_NAME} (
${MessageTable.DATE_RECEIVED} ASC, $DATE_RECEIVED ASC,
${MessageTable.STORY_TYPE}, $STORY_TYPE,
${MessageTable.PARENT_STORY_ID}, $PARENT_STORY_ID,
$EXPIRES_IN,
${MessageTable.DATE_SENT}, ${MessageTable.DATE_SENT},
${MessageTable.DATE_SERVER}, ${MessageTable.DATE_SERVER},
${MessageTable.TYPE}, ${MessageTable.TYPE},
@@ -36,7 +42,6 @@ fun MessageTable.getMessagesForBackup(db: SignalDatabase, backupTime: Long, medi
${MessageTable.MESSAGE_RANGES}, ${MessageTable.MESSAGE_RANGES},
${MessageTable.FROM_RECIPIENT_ID}, ${MessageTable.FROM_RECIPIENT_ID},
${MessageTable.TO_RECIPIENT_ID}, ${MessageTable.TO_RECIPIENT_ID},
${MessageTable.EXPIRES_IN},
${MessageTable.EXPIRE_STARTED}, ${MessageTable.EXPIRE_STARTED},
${MessageTable.REMOTE_DELETED}, ${MessageTable.REMOTE_DELETED},
${MessageTable.UNIDENTIFIED}, ${MessageTable.UNIDENTIFIED},
@@ -61,7 +66,7 @@ fun MessageTable.getMessagesForBackup(db: SignalDatabase, backupTime: Long, medi
${MessageTable.MESSAGE_EXTRAS}, ${MessageTable.MESSAGE_EXTRAS},
${MessageTable.VIEW_ONCE} ${MessageTable.VIEW_ONCE}
) )
WHERE ${MessageTable.STORY_TYPE} = 0 AND ${MessageTable.PARENT_STORY_ID} <= 0 WHERE $STORY_TYPE = 0 AND $PARENT_STORY_ID <= 0
""".trimMargin() """.trimMargin()
) )
Log.d(TAG, "Creating index took ${System.currentTimeMillis() - startTime} ms") Log.d(TAG, "Creating index took ${System.currentTimeMillis() - startTime} ms")
@@ -94,7 +99,7 @@ fun MessageTable.getMessagesForBackup(db: SignalDatabase, backupTime: Long, medi
.select( .select(
MessageTable.ID, MessageTable.ID,
MessageTable.DATE_SENT, MessageTable.DATE_SENT,
MessageTable.DATE_RECEIVED, DATE_RECEIVED,
MessageTable.DATE_SERVER, MessageTable.DATE_SERVER,
MessageTable.TYPE, MessageTable.TYPE,
MessageTable.THREAD_ID, MessageTable.THREAD_ID,
@@ -102,7 +107,7 @@ fun MessageTable.getMessagesForBackup(db: SignalDatabase, backupTime: Long, medi
MessageTable.MESSAGE_RANGES, MessageTable.MESSAGE_RANGES,
MessageTable.FROM_RECIPIENT_ID, MessageTable.FROM_RECIPIENT_ID,
MessageTable.TO_RECIPIENT_ID, MessageTable.TO_RECIPIENT_ID,
MessageTable.EXPIRES_IN, EXPIRES_IN,
MessageTable.EXPIRE_STARTED, MessageTable.EXPIRE_STARTED,
MessageTable.REMOTE_DELETED, MessageTable.REMOTE_DELETED,
MessageTable.UNIDENTIFIED, MessageTable.UNIDENTIFIED,
@@ -126,12 +131,12 @@ fun MessageTable.getMessagesForBackup(db: SignalDatabase, backupTime: Long, medi
MessageTable.TYPE, MessageTable.TYPE,
MessageTable.MESSAGE_EXTRAS, MessageTable.MESSAGE_EXTRAS,
MessageTable.VIEW_ONCE, MessageTable.VIEW_ONCE,
MessageTable.PARENT_STORY_ID PARENT_STORY_ID
) )
.from("${MessageTable.TABLE_NAME} INDEXED BY $dateReceivedIndex") .from("${MessageTable.TABLE_NAME} INDEXED BY $dateReceivedIndex")
.where("${MessageTable.STORY_TYPE} = 0 AND ${MessageTable.PARENT_STORY_ID} <= 0 AND ${MessageTable.DATE_RECEIVED} >= $lastSeenReceivedTime") .where("$STORY_TYPE = 0 AND $PARENT_STORY_ID <= 0 AND ($EXPIRES_IN == 0 OR $EXPIRES_IN > ${1.days.inWholeMilliseconds}) AND $DATE_RECEIVED >= $lastSeenReceivedTime")
.limit(count) .limit(count)
.orderBy("${MessageTable.DATE_RECEIVED} ASC") .orderBy("$DATE_RECEIVED ASC")
.run() .run()
} }
) )

View File

@@ -563,10 +563,11 @@ private fun BackupMessageRecord.toBasicChatItemBuilder(selfRecipientId: Recipien
} }
if (!MessageTypes.isExpirationTimerUpdate(record.type) && builder.expiresInMs != null && builder.expireStartDate != null) { if (!MessageTypes.isExpirationTimerUpdate(record.type) && builder.expiresInMs != null && builder.expireStartDate != null) {
val cutoffDuration = 1.days.inWholeMilliseconds
val expiresAt = builder.expireStartDate!! + builder.expiresInMs!! val expiresAt = builder.expireStartDate!! + builder.expiresInMs!!
val threshold = if (exportState.forTransfer) backupStartTime else backupStartTime + 1.days.inWholeMilliseconds val threshold = if (exportState.forTransfer) backupStartTime else backupStartTime + cutoffDuration
if (expiresAt < threshold) { if (expiresAt < threshold || builder.expiresInMs!! <= cutoffDuration) {
Log.w(TAG, ExportSkips.messageExpiresTooSoon(record.dateSent)) Log.w(TAG, ExportSkips.messageExpiresTooSoon(record.dateSent))
return null return null
} }