From e6368982c9ffb850fd4802123bac187d3d1cf108 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 21 Jan 2025 10:33:12 -0500 Subject: [PATCH] Fix exporting of story lists with empty members. --- .../securesms/backup/v2/ArchiveErrorCases.kt | 4 ++++ .../DistributionListArchiveExporter.kt | 17 ++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) 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 07fb7777bc..b1a529179d 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 @@ -86,6 +86,10 @@ object ExportOddities { return log(sentTimestamp, "Failed to parse link preview. Ignoring it.") } + fun distributionListAllExceptWithNoMembers(): String { + return log(0, "Distribution list had a privacy mode of ALL_EXCEPT with no members. Exporting at ALL.") + } + private fun log(sentTimestamp: Long, message: String): String { return "[ODDITY][$sentTimestamp] $message" } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/DistributionListArchiveExporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/DistributionListArchiveExporter.kt index bfefa354d7..b89e87e094 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/DistributionListArchiveExporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/DistributionListArchiveExporter.kt @@ -7,11 +7,13 @@ package org.thoughtcrime.securesms.backup.v2.exporters import android.database.Cursor import okio.ByteString.Companion.toByteString +import org.signal.core.util.logging.Log import org.signal.core.util.requireBoolean import org.signal.core.util.requireLong import org.signal.core.util.requireNonNullString import org.signal.core.util.requireObject import org.thoughtcrime.securesms.backup.v2.ArchiveRecipient +import org.thoughtcrime.securesms.backup.v2.ExportOddities import org.thoughtcrime.securesms.backup.v2.database.getMembersForBackup import org.thoughtcrime.securesms.backup.v2.proto.DistributionList import org.thoughtcrime.securesms.backup.v2.proto.DistributionListItem @@ -25,6 +27,8 @@ import org.whispersystems.signalservice.api.push.DistributionId import org.whispersystems.signalservice.api.util.toByteArray import java.io.Closeable +private val TAG = Log.tag(DistributionListArchiveExporter::class) + class DistributionListArchiveExporter( private val cursor: Cursor, private val distributionListTables: DistributionListTables @@ -66,7 +70,7 @@ class DistributionListArchiveExporter( distributionList = DistributionList( name = record.name, allowReplies = record.allowsReplies, - privacyMode = record.privacyMode.toBackupPrivacyMode(), + privacyMode = record.privacyMode.toBackupPrivacyMode(record.members.size), memberRecipientIds = record.members.map { it.toLong() } ) ) @@ -83,10 +87,17 @@ class DistributionListArchiveExporter( } } -private fun DistributionListPrivacyMode.toBackupPrivacyMode(): DistributionList.PrivacyMode { +private fun DistributionListPrivacyMode.toBackupPrivacyMode(memberCount: Int): DistributionList.PrivacyMode { return when (this) { DistributionListPrivacyMode.ONLY_WITH -> DistributionList.PrivacyMode.ONLY_WITH DistributionListPrivacyMode.ALL -> DistributionList.PrivacyMode.ALL - DistributionListPrivacyMode.ALL_EXCEPT -> DistributionList.PrivacyMode.ALL_EXCEPT + DistributionListPrivacyMode.ALL_EXCEPT -> { + if (memberCount > 0) { + DistributionList.PrivacyMode.ALL_EXCEPT + } else { + Log.w(TAG, ExportOddities.distributionListAllExceptWithNoMembers()) + DistributionList.PrivacyMode.ALL + } + } } }