mirror of
https://github.com/AsamK/signal-cli.git
synced 2026-08-21 04:46:06 +00:00
parent
9bc4c0ecd8
commit
4709cfacc7
@ -768,12 +768,8 @@ public class GroupHelper {
|
||||
newAdmins.retainAll(group.getMemberRecipientIds());
|
||||
newAdmins.removeAll(group.getAdminMemberRecipientIds());
|
||||
if (!newAdmins.isEmpty()) {
|
||||
for (var admin : newAdmins) {
|
||||
var groupGroupChangePair = groupV2Helper.setMemberAdmin(group, admin, true);
|
||||
result = sendUpdateGroupV2Message(group,
|
||||
groupGroupChangePair.first(),
|
||||
groupGroupChangePair.second());
|
||||
}
|
||||
var groupGroupChangePair = groupV2Helper.setMemberAdmin(group, newAdmins, true);
|
||||
result = sendUpdateGroupV2Message(group, groupGroupChangePair.first(), groupGroupChangePair.second());
|
||||
}
|
||||
}
|
||||
|
||||
@ -781,12 +777,8 @@ public class GroupHelper {
|
||||
final var existingRemoveAdmins = new HashSet<>(removeAdmins);
|
||||
existingRemoveAdmins.retainAll(group.getAdminMemberRecipientIds());
|
||||
if (!existingRemoveAdmins.isEmpty()) {
|
||||
for (var admin : existingRemoveAdmins) {
|
||||
var groupGroupChangePair = groupV2Helper.setMemberAdmin(group, admin, false);
|
||||
result = sendUpdateGroupV2Message(group,
|
||||
groupGroupChangePair.first(),
|
||||
groupGroupChangePair.second());
|
||||
}
|
||||
var groupGroupChangePair = groupV2Helper.setMemberAdmin(group, existingRemoveAdmins, false);
|
||||
result = sendUpdateGroupV2Message(group, groupGroupChangePair.first(), groupGroupChangePair.second());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -501,18 +501,25 @@ class GroupV2Helper {
|
||||
|
||||
Pair<DecryptedGroup, GroupChangeResponse> setMemberAdmin(
|
||||
GroupInfoV2 groupInfoV2,
|
||||
RecipientId recipientId,
|
||||
Set<RecipientId> recipientIds,
|
||||
boolean admin
|
||||
) throws IOException {
|
||||
final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
|
||||
final var address = context.getRecipientHelper().resolveSignalServiceAddress(recipientId);
|
||||
final var newRole = admin ? Member.Role.ADMINISTRATOR : Member.Role.DEFAULT;
|
||||
if (address.getServiceId() instanceof ACI aci) {
|
||||
final var change = groupOperations.createChangeMemberRole(aci, newRole);
|
||||
return commitChange(groupInfoV2, change);
|
||||
} else {
|
||||
final var change = new GroupChange.Actions.Builder();
|
||||
final var memberRoles = recipientIds.stream()
|
||||
.map(context.getRecipientHelper()::resolveSignalServiceAddress)
|
||||
.map(SignalServiceAddress::getServiceId)
|
||||
.filter(m -> m instanceof ACI)
|
||||
.map(m -> (ACI) m)
|
||||
.map(aci -> new GroupChange.Actions.ModifyMemberRoleAction.Builder().userId(groupOperations.encryptServiceId(
|
||||
aci)).role(newRole).build())
|
||||
.toList();
|
||||
if (memberRoles.size() < recipientIds.size()) {
|
||||
throw new IllegalArgumentException("Can't make a PNI a group admin.");
|
||||
}
|
||||
change.modifyMemberRoles(memberRoles);
|
||||
return commitChange(groupInfoV2, change);
|
||||
}
|
||||
|
||||
Pair<DecryptedGroup, GroupChangeResponse> setMessageExpirationTimer(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user