Fix exporting of story lists with empty members.

This commit is contained in:
Greyson Parrelli 2025-01-21 10:33:12 -05:00
parent 28c280947f
commit e6368982c9
2 changed files with 18 additions and 3 deletions

View file

@ -86,6 +86,10 @@ object ExportOddities {
return log(sentTimestamp, "Failed to parse link preview. Ignoring it.") 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 { private fun log(sentTimestamp: Long, message: String): String {
return "[ODDITY][$sentTimestamp] $message" return "[ODDITY][$sentTimestamp] $message"
} }

View file

@ -7,11 +7,13 @@ package org.thoughtcrime.securesms.backup.v2.exporters
import android.database.Cursor import android.database.Cursor
import okio.ByteString.Companion.toByteString import okio.ByteString.Companion.toByteString
import org.signal.core.util.logging.Log
import org.signal.core.util.requireBoolean import org.signal.core.util.requireBoolean
import org.signal.core.util.requireLong import org.signal.core.util.requireLong
import org.signal.core.util.requireNonNullString import org.signal.core.util.requireNonNullString
import org.signal.core.util.requireObject import org.signal.core.util.requireObject
import org.thoughtcrime.securesms.backup.v2.ArchiveRecipient 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.database.getMembersForBackup
import org.thoughtcrime.securesms.backup.v2.proto.DistributionList import org.thoughtcrime.securesms.backup.v2.proto.DistributionList
import org.thoughtcrime.securesms.backup.v2.proto.DistributionListItem 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 org.whispersystems.signalservice.api.util.toByteArray
import java.io.Closeable import java.io.Closeable
private val TAG = Log.tag(DistributionListArchiveExporter::class)
class DistributionListArchiveExporter( class DistributionListArchiveExporter(
private val cursor: Cursor, private val cursor: Cursor,
private val distributionListTables: DistributionListTables private val distributionListTables: DistributionListTables
@ -66,7 +70,7 @@ class DistributionListArchiveExporter(
distributionList = DistributionList( distributionList = DistributionList(
name = record.name, name = record.name,
allowReplies = record.allowsReplies, allowReplies = record.allowsReplies,
privacyMode = record.privacyMode.toBackupPrivacyMode(), privacyMode = record.privacyMode.toBackupPrivacyMode(record.members.size),
memberRecipientIds = record.members.map { it.toLong() } 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) { return when (this) {
DistributionListPrivacyMode.ONLY_WITH -> DistributionList.PrivacyMode.ONLY_WITH DistributionListPrivacyMode.ONLY_WITH -> DistributionList.PrivacyMode.ONLY_WITH
DistributionListPrivacyMode.ALL -> DistributionList.PrivacyMode.ALL 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
}
}
} }
} }