diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ArchiveErrorCases.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ArchiveErrorCases.kt index 303d70aae7..9a7f11e8f0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ArchiveErrorCases.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ArchiveErrorCases.kt @@ -147,6 +147,10 @@ object ExportSkips { return log(sentTimestamp, "An incoming message author did not have an aci or e164.") } + fun outgoingMessageToReleaseNotesChat(sentTimestamp: Long): String { + return log(sentTimestamp, "An outgoing message was sent to the release notes chat.") + } + fun callWithMissingRecipient(sentTimestamp: Long): String { return log(sentTimestamp, "A call had a ringer with no matching exported Recipient.") } 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 480db64fc3..50de29da7e 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 @@ -2437,6 +2437,7 @@ class ExportState( val aciToRecipientId: MutableMap = hashMapOf() val recipientIdToE164: MutableMap = hashMapOf() val customChatColorIds: MutableSet = hashSetOf() + var releaseNoteRecipientId: Long? = null } class ImportState(val mediaRootBackupKey: MediaRootBackupKey) { 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 2812e78b15..ecb72b89fa 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 @@ -1390,6 +1390,10 @@ private fun BackupMessageRecord.toRemoteSendStatus(isGroupThread: Boolean, group return emptyList() } + if (this.toRecipientId == exportState.releaseNoteRecipientId) { + return emptyList() + } + val statusBuilder = SendStatus.Builder() .recipientId(this.toRecipientId) .timestamp(max(this.receiptTimestamp, 0)) @@ -1448,6 +1452,7 @@ private fun List?.toRemoteSendStatus(message return this .filter { exportState.recipientIds.contains(it.recipientId.toLong()) } + .filterNot { it.recipientId.toLong() == exportState.releaseNoteRecipientId } .map { val statusBuilder = SendStatus.Builder() .recipientId(it.recipientId.toLong()) @@ -1634,6 +1639,11 @@ private fun ChatItem.validateChatItem(exportState: ExportState, selfRecipientId: return null } + if (this.outgoing != null && exportState.releaseNoteRecipientId != null && exportState.threadIdToRecipientId[this.chatId] == exportState.releaseNoteRecipientId) { + Log.w(TAG, ExportSkips.outgoingMessageToReleaseNotesChat(this.dateSent)) + return null + } + return this } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/RecipientArchiveProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/RecipientArchiveProcessor.kt index 6f68a1c092..ea21488b2a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/RecipientArchiveProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/RecipientArchiveProcessor.kt @@ -44,6 +44,7 @@ object RecipientArchiveProcessor { if (releaseChannelId != null) { exportState.recipientIds.add(releaseChannelId.toLong()) exportState.contactRecipientIds.add(releaseChannelId.toLong()) + exportState.releaseNoteRecipientId = releaseChannelId.toLong() emitter.emit( Frame( recipient = ArchiveRecipient(