mirror of
https://github.com/oxen-io/session-android.git
synced 2025-06-08 19:08:44 +00:00
Ensure direct add members to a group removes any matching pending.
This commit is contained in:
parent
599e89b1f9
commit
99ff0c1e3c
@ -55,6 +55,16 @@ public final class DecryptedGroupUtil {
|
|||||||
return uuidList;
|
return uuidList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Set<ByteString> membersToUuidByteStringSet(Collection<DecryptedMember> membersList) {
|
||||||
|
Set<ByteString> uuidList = new HashSet<>(membersList.size());
|
||||||
|
|
||||||
|
for (DecryptedMember member : membersList) {
|
||||||
|
uuidList.add(member.getUuid());
|
||||||
|
}
|
||||||
|
|
||||||
|
return uuidList;
|
||||||
|
}
|
||||||
|
|
||||||
public static ArrayList<UUID> pendingToUuidList(Collection<DecryptedPendingMember> membersList) {
|
public static ArrayList<UUID> pendingToUuidList(Collection<DecryptedPendingMember> membersList) {
|
||||||
ArrayList<UUID> uuidList = new ArrayList<>(membersList.size());
|
ArrayList<UUID> uuidList = new ArrayList<>(membersList.size());
|
||||||
|
|
||||||
@ -268,9 +278,22 @@ public final class DecryptedGroupUtil {
|
|||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
removePendingMembersNowInGroup(builder);
|
||||||
|
|
||||||
return builder.setRevision(change.getRevision()).build();
|
return builder.setRevision(change.getRevision()).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void removePendingMembersNowInGroup(DecryptedGroup.Builder builder) {
|
||||||
|
Set<ByteString> allMembers = membersToUuidByteStringSet(builder.getMembersList());
|
||||||
|
|
||||||
|
for (int i = builder.getPendingMembersCount() - 1; i >= 0; i--) {
|
||||||
|
DecryptedPendingMember pendingMember = builder.getPendingMembers(i);
|
||||||
|
if (allMembers.contains(pendingMember.getUuid())) {
|
||||||
|
builder.removePendingMembers(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static int indexOfUuid(List<DecryptedMember> memberList, ByteString uuid) {
|
private static int indexOfUuid(List<DecryptedMember> memberList, ByteString uuid) {
|
||||||
for (int i = 0; i < memberList.size(); i++) {
|
for (int i = 0; i < memberList.size(); i++) {
|
||||||
if(uuid.equals(memberList.get(i).getUuid())) return i;
|
if(uuid.equals(memberList.get(i).getUuid())) return i;
|
||||||
|
@ -269,6 +269,43 @@ public final class DecryptedGroupUtil_apply_Test {
|
|||||||
newGroup);
|
newGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void skip_promote_pending_member_by_direct_add() throws DecryptedGroupUtil.NotAbleToApplyChangeException {
|
||||||
|
ProfileKey profileKey2 = randomProfileKey();
|
||||||
|
ProfileKey profileKey3 = randomProfileKey();
|
||||||
|
DecryptedMember member1 = member(UUID.randomUUID());
|
||||||
|
UUID pending2Uuid = UUID.randomUUID();
|
||||||
|
UUID pending3Uuid = UUID.randomUUID();
|
||||||
|
UUID pending4Uuid = UUID.randomUUID();
|
||||||
|
DecryptedPendingMember pending2 = pendingMember(pending2Uuid);
|
||||||
|
DecryptedPendingMember pending3 = pendingMember(pending3Uuid);
|
||||||
|
DecryptedPendingMember pending4 = pendingMember(pending4Uuid);
|
||||||
|
DecryptedMember member2 = member(pending2Uuid, profileKey2);
|
||||||
|
DecryptedMember member3 = member(pending3Uuid, profileKey3);
|
||||||
|
|
||||||
|
DecryptedGroup newGroup = DecryptedGroupUtil.apply(DecryptedGroup.newBuilder()
|
||||||
|
.setRevision(10)
|
||||||
|
.addMembers(member1)
|
||||||
|
.addPendingMembers(pending2)
|
||||||
|
.addPendingMembers(pending3)
|
||||||
|
.addPendingMembers(pending4)
|
||||||
|
.build(),
|
||||||
|
DecryptedGroupChange.newBuilder()
|
||||||
|
.setRevision(11)
|
||||||
|
.addNewMembers(member2)
|
||||||
|
.addNewMembers(member3)
|
||||||
|
.build());
|
||||||
|
|
||||||
|
assertEquals(DecryptedGroup.newBuilder()
|
||||||
|
.setRevision(11)
|
||||||
|
.addMembers(member1)
|
||||||
|
.addMembers(member2)
|
||||||
|
.addMembers(member3)
|
||||||
|
.addPendingMembers(pending4)
|
||||||
|
.build(),
|
||||||
|
newGroup);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void title() throws DecryptedGroupUtil.NotAbleToApplyChangeException {
|
public void title() throws DecryptedGroupUtil.NotAbleToApplyChangeException {
|
||||||
DecryptedGroup newGroup = DecryptedGroupUtil.apply(DecryptedGroup.newBuilder()
|
DecryptedGroup newGroup = DecryptedGroupUtil.apply(DecryptedGroup.newBuilder()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user