Filter out invalid dlist members on backup export.
This commit is contained in:
parent
ab88018f36
commit
401cd72af0
4 changed files with 20 additions and 6 deletions
|
@ -106,6 +106,10 @@ object ExportOddities {
|
|||
return log(0, "Distribution list had a privacy mode of ALL_EXCEPT with no members. Exporting at ALL.")
|
||||
}
|
||||
|
||||
fun distributionListHadSelfAsMember(): String {
|
||||
return log(0, "Distribution list had self as a member. Removing it.")
|
||||
}
|
||||
|
||||
private fun log(sentTimestamp: Long, message: String): String {
|
||||
return "[ODDITY][$sentTimestamp] $message"
|
||||
}
|
||||
|
|
|
@ -13,13 +13,13 @@ import org.thoughtcrime.securesms.database.model.DistributionListId
|
|||
import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
|
||||
fun DistributionListTables.getAllForBackup(): DistributionListArchiveExporter {
|
||||
fun DistributionListTables.getAllForBackup(selfRecipientId: RecipientId): DistributionListArchiveExporter {
|
||||
val cursor = readableDatabase
|
||||
.select()
|
||||
.from(DistributionListTables.ListTable.TABLE_NAME)
|
||||
.run()
|
||||
|
||||
return DistributionListArchiveExporter(cursor, this)
|
||||
return DistributionListArchiveExporter(cursor, this, selfRecipientId)
|
||||
}
|
||||
|
||||
fun DistributionListTables.getMembersForBackup(id: DistributionListId): List<RecipientId> {
|
||||
|
|
|
@ -31,7 +31,8 @@ private val TAG = Log.tag(DistributionListArchiveExporter::class)
|
|||
|
||||
class DistributionListArchiveExporter(
|
||||
private val cursor: Cursor,
|
||||
private val distributionListTables: DistributionListTables
|
||||
private val distributionListTables: DistributionListTables,
|
||||
private val selfRecipientId: RecipientId
|
||||
) : Iterator<ArchiveRecipient>, Closeable {
|
||||
|
||||
override fun hasNext(): Boolean {
|
||||
|
@ -65,13 +66,14 @@ class DistributionListArchiveExporter(
|
|||
deletionTimestamp = record.deletedAtTimestamp
|
||||
)
|
||||
} else {
|
||||
val members = record.members.toRemoteMemberList(selfRecipientId)
|
||||
DistributionListItem(
|
||||
distributionId = record.distributionId.asUuid().toByteArray().toByteString(),
|
||||
distributionList = DistributionList(
|
||||
name = record.name,
|
||||
allowReplies = record.allowsReplies,
|
||||
privacyMode = record.privacyMode.toBackupPrivacyMode(record.members.size),
|
||||
memberRecipientIds = record.members.map { it.toLong() }
|
||||
privacyMode = record.privacyMode.toBackupPrivacyMode(members.size),
|
||||
memberRecipientIds = members
|
||||
)
|
||||
)
|
||||
}
|
||||
|
@ -101,3 +103,11 @@ private fun DistributionListPrivacyMode.toBackupPrivacyMode(memberCount: Int): D
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun List<RecipientId>.toRemoteMemberList(selfRecipientId: RecipientId): List<Long> {
|
||||
val filtered = this.filter { it != selfRecipientId }.map { it.toLong() }
|
||||
if (filtered.size != this.size) {
|
||||
Log.w(TAG, ExportOddities.distributionListHadSelfAsMember())
|
||||
}
|
||||
return filtered
|
||||
}
|
||||
|
|
|
@ -66,7 +66,7 @@ object RecipientArchiveProcessor {
|
|||
}
|
||||
}
|
||||
|
||||
db.distributionListTables.getAllForBackup().use { reader ->
|
||||
db.distributionListTables.getAllForBackup(selfRecipientId).use { reader ->
|
||||
for (recipient in reader) {
|
||||
exportState.recipientIds.add(recipient.id)
|
||||
emitter.emit(Frame(recipient = recipient))
|
||||
|
|
Loading…
Add table
Reference in a new issue