From 48901f64c7a664bfb16a1fc07bd15d74f9a1dc6c Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Mon, 22 Jun 2026 12:46:46 -0400 Subject: [PATCH] Update plaintext export rules. --- .../securesms/backup/v2/BackupRepository.kt | 3 +++ .../database/MessageTableArchiveExtensions.kt | 6 +++++- .../v2/exporters/ChatItemArchiveExporter.kt | 19 +++++++++++++------ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt index 67f4174512..e7b4c4101f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt @@ -2558,6 +2558,9 @@ enum class BackupMode { val isLocalBackup: Boolean get() = this == LOCAL + + val isPlaintextExport: Boolean + get() = this == PLAINTEXT_EXPORT } /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/MessageTableArchiveExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/MessageTableArchiveExtensions.kt index c8403c5881..ab5a62edc7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/MessageTableArchiveExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/MessageTableArchiveExtensions.kt @@ -167,7 +167,11 @@ fun MessageTable.getMessagesForBackup(db: SignalDatabase, backupTime: Long, self .where( buildString { append("$STORY_TYPE = 0 AND $PARENT_STORY_ID <= 0 AND $SCHEDULED_DATE = -1 AND ") - append("($EXPIRES_IN == 0 OR $EXPIRES_IN > ${1.days.inWholeMilliseconds})") + if (exportState.backupMode.isPlaintextExport) { + append("$EXPIRES_IN == 0") + } else { + append("($EXPIRES_IN == 0 OR $EXPIRES_IN > ${1.days.inWholeMilliseconds})") + } append(" AND $DATE_RECEIVED >= $lastSeenReceivedTime $cutoffQuery") } ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt index b36b66f65f..9bd292bc6e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt @@ -647,15 +647,22 @@ private fun BackupMessageRecord.toBasicChatItemBuilder(selfRecipientId: Recipien } } - if (!MessageTypes.isExpirationTimerUpdate(record.type) && builder.expiresInMs != null && builder.expireStartDate != null) { - val cutoffDuration = ChatItemArchiveExporter.EXPIRATION_CUTOFF.inWholeMilliseconds - val expiresAt = builder.expireStartDate!! + builder.expiresInMs!! - val threshold = if (exportState.backupMode.isLinkAndSync) backupStartTime else backupStartTime + cutoffDuration - - if (expiresAt < threshold || (builder.expiresInMs!! <= cutoffDuration && !exportState.backupMode.isLinkAndSync)) { + if (!MessageTypes.isExpirationTimerUpdate(record.type) && builder.expiresInMs != null) { + if (exportState.backupMode.isPlaintextExport) { Log.w(TAG, ExportSkips.messageExpiresTooSoon(record.dateSent)) return null } + + if (builder.expireStartDate != null) { + val cutoffDuration = ChatItemArchiveExporter.EXPIRATION_CUTOFF.inWholeMilliseconds + val expiresAt = builder.expireStartDate!! + builder.expiresInMs!! + val threshold = if (exportState.backupMode.isLinkAndSync) backupStartTime else backupStartTime + cutoffDuration + + if (expiresAt < threshold || (builder.expiresInMs!! <= cutoffDuration && !exportState.backupMode.isLinkAndSync)) { + Log.w(TAG, ExportSkips.messageExpiresTooSoon(record.dateSent)) + return null + } + } } if (builder.expireStartDate != null && builder.expiresInMs == null) {