Support member labels in backups.

This commit is contained in:
jeffrey-signal
2026-02-11 18:06:18 -05:00
committed by Michelle Tang
parent 28d8d62cbd
commit 59bb505a3e
17 changed files with 24 additions and 6 deletions

View File

@@ -17,11 +17,13 @@ import kotlin.random.Random
* Helper methods for creating groups for message processing tests et al.
*/
object GroupTestingUtils {
fun member(aci: ACI, revision: Int = 0, role: Member.Role = Member.Role.ADMINISTRATOR): DecryptedMember {
fun member(aci: ACI, revision: Int = 0, role: Member.Role = Member.Role.ADMINISTRATOR, labelEmoji: String = "", labelString: String = ""): DecryptedMember {
return DecryptedMember.Builder()
.aciBytes(aci.toByteString())
.joinedAtRevision(revision)
.role(role)
.labelEmoji(labelEmoji)
.labelString(labelString)
.build()
}

View File

@@ -123,7 +123,13 @@ private fun Member.Role.toRemote(): Group.Member.Role {
}
private fun DecryptedMember.toRemote(): Group.Member {
return Group.Member(userId = aciBytes, role = role.toRemote(), joinedAtVersion = joinedAtRevision)
return Group.Member(
userId = aciBytes,
role = role.toRemote(),
joinedAtVersion = joinedAtRevision,
labelEmoji = labelEmoji,
labelString = labelString
)
}
private fun DecryptedPendingMember.toRemote(): Group.MemberPendingProfileKey {

View File

@@ -116,7 +116,13 @@ private fun Group.Member.Role.toLocal(): Member.Role {
}
private fun Group.Member.toLocal(): DecryptedMember {
return DecryptedMember(aciBytes = userId, role = role.toLocal(), joinedAtRevision = joinedAtVersion)
return DecryptedMember(
aciBytes = userId,
role = role.toLocal(),
joinedAtRevision = joinedAtVersion,
labelEmoji = labelEmoji,
labelString = labelString
)
}
private fun Group.MemberPendingAdminApproval.toLocal(): DecryptedRequestingMember {

View File

@@ -331,6 +331,8 @@ message Group {
reserved /*profileKey*/ 3; // This field is ignored in Backups, in favor of Contact frames for members
reserved /*presentation*/ 4; // This field is deprecated in the context of static group state
uint32 joinedAtVersion = 5;
string labelEmoji = 6;
string labelString = 7;
}
message MemberPendingProfileKey {

View File

@@ -42,15 +42,17 @@ fun DecryptedGroupChange.Builder.addMember(aci: ACI) {
newMembers += member(aci)
}
fun member(serviceId: UUID, role: Member.Role = Member.Role.DEFAULT, joinedAt: Int = 0): DecryptedMember {
return member(ACI.from(serviceId), role, joinedAt)
fun member(serviceId: UUID, role: Member.Role = Member.Role.DEFAULT, joinedAt: Int = 0, labelEmoji: String = "", labelString: String = ""): DecryptedMember {
return member(ACI.from(serviceId), role, joinedAt, labelEmoji, labelString)
}
fun member(aci: ACI, role: Member.Role = Member.Role.DEFAULT, joinedAt: Int = 0): DecryptedMember {
fun member(aci: ACI, role: Member.Role = Member.Role.DEFAULT, joinedAt: Int = 0, labelEmoji: String = "", labelString: String = ""): DecryptedMember {
return DecryptedMember.Builder()
.role(role)
.aciBytes(aci.toByteString())
.joinedAtRevision(joinedAt)
.labelEmoji(labelEmoji)
.labelString(labelString)
.build()
}