Stop checking very old capabilities.

This commit is contained in:
Greyson Parrelli
2022-09-30 10:49:29 -04:00
parent afe36b982f
commit 52965da8a5
14 changed files with 129 additions and 211 deletions

View File

@@ -3431,6 +3431,21 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) :
updateExtras(recipientId) { b: RecipientExtras.Builder -> b.setManuallyShownAvatar(true) }
}
fun getCapabilities(id: RecipientId): RecipientRecord.Capabilities? {
readableDatabase
.select(CAPABILITIES)
.from(TABLE_NAME)
.where("$ID = ?", id)
.run()
.use { cursor ->
return if (cursor.moveToFirst()) {
readCapabilities(cursor)
} else {
null
}
}
}
private fun updateExtras(recipientId: RecipientId, updater: java.util.function.Function<RecipientExtras.Builder, RecipientExtras.Builder>) {
val db = writableDatabase
db.beginTransaction()
@@ -3626,7 +3641,7 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) :
SYSTEM_PHONE_LABEL to secondaryRecord.systemPhoneLabel,
SYSTEM_CONTACT_URI to secondaryRecord.systemContactUri,
PROFILE_SHARING to (primaryRecord.profileSharing || secondaryRecord.profileSharing),
CAPABILITIES to max(primaryRecord.rawCapabilities, secondaryRecord.rawCapabilities),
CAPABILITIES to max(primaryRecord.capabilities.rawBits, secondaryRecord.capabilities.rawBits),
MENTION_SETTING to if (primaryRecord.mentionSetting != MentionSetting.ALWAYS_NOTIFY) primaryRecord.mentionSetting.id else secondaryRecord.mentionSetting.id
)
@@ -3901,7 +3916,6 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) :
}
val recipientId = RecipientId.from(cursor.requireLong(idColumnName))
val capabilities = cursor.requireLong(CAPABILITIES)
val distributionListId: DistributionListId? = DistributionListId.fromNullable(cursor.requireLong(DISTRIBUTION_LIST_ID))
val avatarColor: AvatarColor = if (distributionListId != null) AvatarColor.UNKNOWN else AvatarColor.deserialize(cursor.requireString(AVATAR_COLOR))
@@ -3939,14 +3953,7 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) :
notificationChannel = cursor.requireString(NOTIFICATION_CHANNEL),
unidentifiedAccessMode = UnidentifiedAccessMode.fromMode(cursor.requireInt(UNIDENTIFIED_ACCESS_MODE)),
forceSmsSelection = cursor.requireBoolean(FORCE_SMS_SELECTION),
rawCapabilities = capabilities,
groupsV1MigrationCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.GROUPS_V1_MIGRATION, Capabilities.BIT_LENGTH).toInt()),
senderKeyCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.SENDER_KEY, Capabilities.BIT_LENGTH).toInt()),
announcementGroupCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.ANNOUNCEMENT_GROUPS, Capabilities.BIT_LENGTH).toInt()),
changeNumberCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.CHANGE_NUMBER, Capabilities.BIT_LENGTH).toInt()),
storiesCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.STORIES, Capabilities.BIT_LENGTH).toInt()),
giftBadgesCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.GIFT_BADGES, Capabilities.BIT_LENGTH).toInt()),
pnpCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.PNP, Capabilities.BIT_LENGTH).toInt()),
capabilities = readCapabilities(cursor),
insightsBannerTier = InsightsBannerTier.fromId(cursor.requireInt(SEEN_INVITE_REMINDER)),
storageId = Base64.decodeNullableOrThrow(cursor.requireString(STORAGE_SERVICE_ID)),
mentionSetting = MentionSetting.fromId(cursor.requireInt(MENTION_SETTING)),
@@ -3964,6 +3971,20 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) :
)
}
private fun readCapabilities(cursor: Cursor): RecipientRecord.Capabilities {
val capabilities = cursor.requireLong(CAPABILITIES)
return RecipientRecord.Capabilities(
rawBits = capabilities,
groupsV1MigrationCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.GROUPS_V1_MIGRATION, Capabilities.BIT_LENGTH).toInt()),
senderKeyCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.SENDER_KEY, Capabilities.BIT_LENGTH).toInt()),
announcementGroupCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.ANNOUNCEMENT_GROUPS, Capabilities.BIT_LENGTH).toInt()),
changeNumberCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.CHANGE_NUMBER, Capabilities.BIT_LENGTH).toInt()),
storiesCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.STORIES, Capabilities.BIT_LENGTH).toInt()),
giftBadgesCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.GIFT_BADGES, Capabilities.BIT_LENGTH).toInt()),
pnpCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.PNP, Capabilities.BIT_LENGTH).toInt()),
)
}
private fun parseBadgeList(serializedBadgeList: ByteArray?): List<Badge> {
var badgeList: BadgeList? = null
if (serializedBadgeList != null) {

View File

@@ -63,14 +63,7 @@ data class RecipientRecord(
val unidentifiedAccessMode: UnidentifiedAccessMode,
@get:JvmName("isForceSmsSelection")
val forceSmsSelection: Boolean,
val rawCapabilities: Long,
val groupsV1MigrationCapability: Recipient.Capability,
val senderKeyCapability: Recipient.Capability,
val announcementGroupCapability: Recipient.Capability,
val changeNumberCapability: Recipient.Capability,
val storiesCapability: Recipient.Capability,
val giftBadgesCapability: Recipient.Capability,
val pnpCapability: Recipient.Capability,
val capabilities: Capabilities,
val insightsBannerTier: InsightsBannerTier,
val storageId: ByteArray?,
val mentionSetting: MentionSetting,
@@ -122,4 +115,29 @@ data class RecipientRecord(
val isForcedUnread: Boolean,
val unregisteredTimestamp: Long
)
data class Capabilities(
val rawBits: Long,
val groupsV1MigrationCapability: Recipient.Capability,
val senderKeyCapability: Recipient.Capability,
val announcementGroupCapability: Recipient.Capability,
val changeNumberCapability: Recipient.Capability,
val storiesCapability: Recipient.Capability,
val giftBadgesCapability: Recipient.Capability,
val pnpCapability: Recipient.Capability,
) {
companion object {
@JvmField
val UNKNOWN = Capabilities(
0,
Recipient.Capability.UNKNOWN,
Recipient.Capability.UNKNOWN,
Recipient.Capability.UNKNOWN,
Recipient.Capability.UNKNOWN,
Recipient.Capability.UNKNOWN,
Recipient.Capability.UNKNOWN,
Recipient.Capability.UNKNOWN
)
}
}
}