var groupGroupChangePair = groupV2Helper.revokeInvitedMembers(group, pendingRemoveMembers);
result = sendUpdateGroupV2Message(group, groupGroupChangePair.first(), groupGroupChangePair.second());
}
+ var requestingRemoveMembers = new HashSet<>(removeMembers);
+ requestingRemoveMembers.retainAll(group.getRequestingMembers());
+ if (requestingRemoveMembers.size() > 0) {
+ var groupGroupChangePair = groupV2Helper.refuseJoinRequestMembers(group, requestingRemoveMembers);
+ result = sendUpdateGroupV2Message(group, groupGroupChangePair.first(), groupGroupChangePair.second());
+ }
}
if (admins != null) {
return ejectMembers(groupInfoV2, memberUuids);
}
+ Pair<DecryptedGroup, GroupChange> refuseJoinRequestMembers(
+ GroupInfoV2 groupInfoV2, Set<RecipientId> members
+ ) throws IOException {
+ final var memberUuids = members.stream()
+ .map(context.getRecipientHelper()::resolveSignalServiceAddress)
+ .map(SignalServiceAddress::getServiceId)
+ .map(ServiceId::uuid)
+ .collect(Collectors.toSet());
+ return refuseJoinRequest(groupInfoV2, memberUuids);
+ }
+
Pair<DecryptedGroup, GroupChange> revokeInvitedMembers(
GroupInfoV2 groupInfoV2, Set<RecipientId> members
) throws IOException {
return commitChange(groupInfoV2, groupOperations.createRemoveInvitationChange(uuidCipherTexts));
}
+ private Pair<DecryptedGroup, GroupChange> refuseJoinRequest(
+ GroupInfoV2 groupInfoV2, Set<UUID> uuids
+ ) throws IOException {
+ final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
+ return commitChange(groupInfoV2, groupOperations.createRefuseGroupJoinRequest(uuids, false, List.of()));
+ }
+
private Pair<DecryptedGroup, GroupChange> ejectMembers(
GroupInfoV2 groupInfoV2, Set<UUID> uuids
) throws IOException {