Restore group profile pictures after restore.

This commit is contained in:
Michelle Tang 2025-01-22 13:40:26 -05:00 committed by GitHub
parent f1782d06a4
commit 2f381863ed
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 20 additions and 8 deletions

View file

@ -66,6 +66,8 @@ import org.thoughtcrime.securesms.database.SignalDatabase
import org.thoughtcrime.securesms.database.model.InAppPaymentSubscriberRecord
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.groups.GroupId
import org.thoughtcrime.securesms.jobmanager.Job
import org.thoughtcrime.securesms.jobs.AvatarGroupsV2DownloadJob
import org.thoughtcrime.securesms.jobs.RequestGroupV2InfoJob
import org.thoughtcrime.securesms.jobs.RestoreAttachmentJob
import org.thoughtcrime.securesms.keyvalue.KeyValueStore
@ -890,16 +892,18 @@ object BackupRepository {
AppDependencies.recipientCache.warmUp()
val groupJobs = SignalDatabase.groups.getGroups().use { groups ->
val jobs = mutableListOf<Job>()
groups
.asSequence()
.mapNotNull { group ->
if (group.id.isV2) {
RequestGroupV2InfoJob(group.id as GroupId.V2)
} else {
null
.filter { it.id.isV2 }
.forEach { group ->
jobs.add(RequestGroupV2InfoJob(group.id as GroupId.V2))
val avatarKey = group.requireV2GroupProperties().avatarKey
if (avatarKey.isNotEmpty()) {
jobs.add(AvatarGroupsV2DownloadJob(group.id.requireV2(), avatarKey))
}
}
.toList()
jobs
}
AppDependencies.jobManager.addAll(groupJobs)
stopwatch.split("group-jobs")

View file

@ -78,7 +78,9 @@ import java.util.stream.Collectors
import javax.annotation.CheckReturnValue
import kotlin.math.abs
class GroupTable(context: Context?, databaseHelper: SignalDatabase?) : DatabaseTable(context, databaseHelper), RecipientIdDatabaseReference {
class GroupTable(context: Context?, databaseHelper: SignalDatabase?) :
DatabaseTable(context, databaseHelper),
RecipientIdDatabaseReference {
companion object {
private val TAG = Log.tag(GroupTable::class.java)
@ -1097,7 +1099,9 @@ class GroupTable(context: Context?, databaseHelper: SignalDatabase?) : DatabaseT
}
}
class Reader(val cursor: Cursor?) : Closeable, ContactSearchIterator<GroupRecord> {
class Reader(val cursor: Cursor?) :
Closeable,
ContactSearchIterator<GroupRecord> {
fun getNext(): GroupRecord? {
return if (cursor == null || !cursor.moveToNext()) {
@ -1163,6 +1167,10 @@ class GroupTable(context: Context?, databaseHelper: SignalDatabase?) : DatabaseT
DecryptedGroupUtil.bannedMembersToServiceIdSet(decryptedGroup.bannedMembers)
}
val avatarKey: String by lazy {
decryptedGroup.avatar
}
fun isAdmin(recipient: Recipient): Boolean {
val aci = recipient.aci