Ensure all group recipients have group records.

This commit is contained in:
Greyson Parrelli
2023-08-10 13:52:11 -04:00
committed by Alex Hart
parent ec51268439
commit c7dabe1b6f
5 changed files with 346 additions and 332 deletions

View File

@@ -17,7 +17,6 @@ import org.thoughtcrime.securesms.recipients.RecipientDetails
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.wallpaper.ChatWallpaper
import org.whispersystems.signalservice.api.push.ServiceId.ACI
import java.util.Optional
import java.util.UUID
import kotlin.random.Random
@@ -29,8 +28,6 @@ object RecipientDatabaseTestUtils {
fun createRecipient(
resolved: Boolean = false,
groupName: String? = null,
groupAvatarId: Optional<Long> = Optional.empty(),
systemContact: Boolean = false,
isSelf: Boolean = false,
participants: List<RecipientId> = listOf(),
recipientId: RecipientId = RecipientId.from(Random.nextLong()),
@@ -89,75 +86,72 @@ object RecipientDatabaseTestUtils {
): Recipient = Recipient(
recipientId,
RecipientDetails(
groupName,
systemDisplayName,
groupAvatarId,
systemContact,
isSelf,
registered,
RecipientRecord(
recipientId,
serviceId,
null,
username,
e164,
email,
groupId,
null,
groupType,
blocked,
muteUntil,
messageVibrateState,
callVibrateState,
messageRingtone,
callRingtone,
expireMessages,
registered,
profileKey,
expiringProfileKeyCredential,
systemProfileName,
systemDisplayName,
systemContactPhoto,
systemPhoneLabel,
systemContactUri,
signalProfileName,
signalProfileAvatar,
profileAvatarFileDetails,
profileSharing,
lastProfileFetch,
notificationChannel,
unidentifiedAccessMode,
RecipientRecord.Capabilities(
capabilities,
Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.GROUPS_V1_MIGRATION, RecipientTable.Capabilities.BIT_LENGTH).toInt()),
Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.SENDER_KEY, RecipientTable.Capabilities.BIT_LENGTH).toInt()),
Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.ANNOUNCEMENT_GROUPS, RecipientTable.Capabilities.BIT_LENGTH).toInt()),
Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.CHANGE_NUMBER, RecipientTable.Capabilities.BIT_LENGTH).toInt()),
Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.STORIES, RecipientTable.Capabilities.BIT_LENGTH).toInt()),
Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.GIFT_BADGES, RecipientTable.Capabilities.BIT_LENGTH).toInt()),
Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.PNP, RecipientTable.Capabilities.BIT_LENGTH).toInt()),
Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.PAYMENT_ACTIVATION, RecipientTable.Capabilities.BIT_LENGTH).toInt())
groupName = groupName,
systemContactName = systemDisplayName,
isSelf = isSelf,
registeredState = registered,
record = RecipientRecord(
id = recipientId,
aci = serviceId,
pni = null,
username = username,
e164 = e164,
email = email,
groupId = groupId,
distributionListId = null,
recipientType = groupType,
isBlocked = blocked,
muteUntil = muteUntil,
messageVibrateState = messageVibrateState,
callVibrateState = callVibrateState,
messageRingtone = messageRingtone,
callRingtone = callRingtone,
expireMessages = expireMessages,
registered = registered,
profileKey = profileKey,
expiringProfileKeyCredential = expiringProfileKeyCredential,
systemProfileName = systemProfileName,
systemDisplayName = systemDisplayName,
systemContactPhotoUri = systemContactPhoto,
systemPhoneLabel = systemPhoneLabel,
systemContactUri = systemContactUri,
signalProfileName = signalProfileName,
signalProfileAvatar = signalProfileAvatar,
profileAvatarFileDetails = profileAvatarFileDetails,
profileSharing = profileSharing,
lastProfileFetch = lastProfileFetch,
notificationChannel = notificationChannel,
unidentifiedAccessMode = unidentifiedAccessMode,
capabilities = RecipientRecord.Capabilities(
rawBits = capabilities,
groupsV1MigrationCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.GROUPS_V1_MIGRATION, RecipientTable.Capabilities.BIT_LENGTH).toInt()),
senderKeyCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.SENDER_KEY, RecipientTable.Capabilities.BIT_LENGTH).toInt()),
announcementGroupCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.ANNOUNCEMENT_GROUPS, RecipientTable.Capabilities.BIT_LENGTH).toInt()),
changeNumberCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.CHANGE_NUMBER, RecipientTable.Capabilities.BIT_LENGTH).toInt()),
storiesCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.STORIES, RecipientTable.Capabilities.BIT_LENGTH).toInt()),
giftBadgesCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.GIFT_BADGES, RecipientTable.Capabilities.BIT_LENGTH).toInt()),
pnpCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.PNP, RecipientTable.Capabilities.BIT_LENGTH).toInt()),
paymentActivation = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.PAYMENT_ACTIVATION, RecipientTable.Capabilities.BIT_LENGTH).toInt())
),
storageId,
mentionSetting,
wallpaper,
chatColors,
avatarColor,
about,
aboutEmoji,
syncExtras,
extras,
hasGroupsInCommon,
badges,
storageId = storageId,
mentionSetting = mentionSetting,
wallpaper = wallpaper,
chatColors = chatColors,
avatarColor = avatarColor,
about = about,
aboutEmoji = aboutEmoji,
syncExtras = syncExtras,
extras = extras,
hasGroupsInCommon = hasGroupsInCommon,
badges = badges,
needsPniSignature = false,
hiddenState = Recipient.HiddenState.NOT_HIDDEN,
null
callLinkRoomId = null
),
participants,
isReleaseChannel,
isActive,
null,
groupRecord.toOptional()
participantIds = participants,
isReleaseChannel = isReleaseChannel,
avatarColor = null,
groupRecord = groupRecord.toOptional()
),
resolved
)