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

View file

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