From 2f381863ed6bdcb80135b00378ba94c0866cc320 Mon Sep 17 00:00:00 2001 From: Michelle Tang Date: Wed, 22 Jan 2025 13:40:26 -0500 Subject: [PATCH] Restore group profile pictures after restore. --- .../securesms/backup/v2/BackupRepository.kt | 16 ++++++++++------ .../securesms/database/GroupTable.kt | 12 ++++++++++-- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt index 2c1b96df0f..7f9e1c6552 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt @@ -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() 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") diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/GroupTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/GroupTable.kt index 8374633a15..19682b1999 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/GroupTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/GroupTable.kt @@ -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 { + class Reader(val cursor: Cursor?) : + Closeable, + ContactSearchIterator { 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