import java.io.IOException;
import java.net.URI;
import java.time.Duration;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
RecipientIdentifier.Single recipient, String name
) throws NotMasterDeviceException, IOException, UnregisteredRecipientException;
- void setContactBlocked(
- RecipientIdentifier.Single recipient, boolean blocked
+ void setContactsBlocked(
+ Collection<RecipientIdentifier.Single> recipient, boolean blocked
) throws NotMasterDeviceException, IOException, UnregisteredRecipientException;
- void setGroupBlocked(
- GroupId groupId, boolean blocked
+ void setGroupsBlocked(
+ Collection<GroupId> groupId, boolean blocked
) throws GroupNotFoundException, IOException, NotMasterDeviceException;
/**
import java.net.URI;
import java.time.Duration;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
}
@Override
- public void setContactBlocked(
- RecipientIdentifier.Single recipient, boolean blocked
+ public void setContactsBlocked(
+ Collection<RecipientIdentifier.Single> recipients, boolean blocked
) throws NotMasterDeviceException, IOException, UnregisteredRecipientException {
if (!account.isMasterDevice()) {
throw new NotMasterDeviceException();
}
- context.getContactHelper().setContactBlocked(context.getRecipientHelper().resolveRecipient(recipient), blocked);
+ if (recipients.size() == 0) {
+ return;
+ }
+ final var recipientIds = context.getRecipientHelper().resolveRecipients(recipients);
+ for (final var recipientId : recipientIds) {
+ context.getContactHelper().setContactBlocked(recipientId, blocked);
+ }
// TODO cycle our profile key, if we're not together in a group with recipient
context.getSyncHelper().sendBlockedList();
}
@Override
- public void setGroupBlocked(
- final GroupId groupId, final boolean blocked
+ public void setGroupsBlocked(
+ final Collection<GroupId> groupIds, final boolean blocked
) throws GroupNotFoundException, NotMasterDeviceException {
if (!account.isMasterDevice()) {
throw new NotMasterDeviceException();
}
- context.getGroupHelper().setGroupBlocked(groupId, blocked);
+ if (groupIds.size() == 0) {
+ return;
+ }
+ for (final var groupId : groupIds) {
+ context.getGroupHelper().setGroupBlocked(groupId, blocked);
+ }
// TODO cycle our profile key
context.getSyncHelper().sendBlockedList();
}
final Namespace ns, final Manager m, final OutputWriter outputWriter
) throws CommandException {
final var contacts = ns.<String>getList("recipient");
- for (var contact : CommandUtil.getSingleRecipientIdentifiers(contacts, m.getSelfNumber())) {
- try {
- m.setContactBlocked(contact, true);
- } catch (NotMasterDeviceException e) {
- throw new UserErrorException("This command doesn't work on linked devices.");
- } catch (IOException e) {
- throw new UnexpectedErrorException("Failed to sync block to linked devices: " + e.getMessage(), e);
- } catch (UnregisteredRecipientException e) {
- throw new UserErrorException("The user " + e.getSender().getIdentifier() + " is not registered.");
- }
+ final var recipients = CommandUtil.getSingleRecipientIdentifiers(contacts, m.getSelfNumber());
+ try {
+ m.setContactsBlocked(recipients, true);
+ } catch (NotMasterDeviceException e) {
+ throw new UserErrorException("This command doesn't work on linked devices.");
+ } catch (IOException e) {
+ throw new UnexpectedErrorException("Failed to sync block to linked devices: " + e.getMessage(), e);
+ } catch (UnregisteredRecipientException e) {
+ throw new UserErrorException("The user " + e.getSender().getIdentifier() + " is not registered.");
}
final var groupIdStrings = ns.<String>getList("group-id");
- if (groupIdStrings != null) {
- for (var groupId : CommandUtil.getGroupIds(groupIdStrings)) {
- try {
- m.setGroupBlocked(groupId, true);
- } catch (NotMasterDeviceException e) {
- throw new UserErrorException("This command doesn't work on linked devices.");
- } catch (GroupNotFoundException e) {
- logger.warn("Group not found {}: {}", groupId.toBase64(), e.getMessage());
- } catch (IOException e) {
- throw new UnexpectedErrorException("Failed to sync block to linked devices: " + e.getMessage(), e);
- }
- }
+ final var groupIds = CommandUtil.getGroupIds(groupIdStrings);
+ try {
+ m.setGroupsBlocked(groupIds, true);
+ } catch (NotMasterDeviceException e) {
+ throw new UserErrorException("This command doesn't work on linked devices.");
+ } catch (GroupNotFoundException e) {
+ logger.warn("Unknown group id: {}", e.getMessage());
+ } catch (IOException e) {
+ throw new UnexpectedErrorException("Failed to sync block to linked devices: " + e.getMessage(), e);
}
}
}
public void handleCommand(
final Namespace ns, final Manager m, final OutputWriter outputWriter
) throws CommandException {
- for (var contactNumber : CommandUtil.getSingleRecipientIdentifiers(ns.getList("recipient"),
- m.getSelfNumber())) {
- try {
- m.setContactBlocked(contactNumber, false);
- } catch (NotMasterDeviceException e) {
- throw new UserErrorException("This command doesn't work on linked devices.");
- } catch (IOException e) {
- throw new UnexpectedErrorException("Failed to sync unblock to linked devices: " + e.getMessage(), e);
- } catch (UnregisteredRecipientException e) {
- throw new UserErrorException("The user " + e.getSender().getIdentifier() + " is not registered.");
- }
+ final var contacts = ns.<String>getList("recipient");
+ final var recipients = CommandUtil.getSingleRecipientIdentifiers(contacts, m.getSelfNumber());
+ try {
+ m.setContactsBlocked(recipients, false);
+ } catch (NotMasterDeviceException e) {
+ throw new UserErrorException("This command doesn't work on linked devices.");
+ } catch (IOException e) {
+ throw new UnexpectedErrorException("Failed to sync unblock to linked devices: " + e.getMessage(), e);
+ } catch (UnregisteredRecipientException e) {
+ throw new UserErrorException("The user " + e.getSender().getIdentifier() + " is not registered.");
}
final var groupIdStrings = ns.<String>getList("group-id");
- for (var groupId : CommandUtil.getGroupIds(groupIdStrings)) {
- try {
- m.setGroupBlocked(groupId, false);
- } catch (NotMasterDeviceException e) {
- throw new UserErrorException("This command doesn't work on linked devices.");
- } catch (GroupNotFoundException e) {
- logger.warn("Unknown group id: {}", groupId);
- } catch (IOException e) {
- throw new UnexpectedErrorException("Failed to sync unblock to linked devices: " + e.getMessage(), e);
- }
+ final var groupIds = CommandUtil.getGroupIds(groupIdStrings);
+ try {
+ m.setGroupsBlocked(groupIds, false);
+ } catch (NotMasterDeviceException e) {
+ throw new UserErrorException("This command doesn't work on linked devices.");
+ } catch (GroupNotFoundException e) {
+ logger.warn("Unknown group id: {}", e.getMessage());
+ } catch (IOException e) {
+ throw new UnexpectedErrorException("Failed to sync unblock to linked devices: " + e.getMessage(), e);
}
}
}
import java.net.URISyntaxException;
import java.time.Duration;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
}
@Override
- public void setContactBlocked(
- final RecipientIdentifier.Single recipient, final boolean blocked
+ public void setContactsBlocked(
+ final Collection<RecipientIdentifier.Single> recipients, final boolean blocked
) throws NotMasterDeviceException, IOException {
- signal.setContactBlocked(recipient.getIdentifier(), blocked);
+ for (final var recipient : recipients) {
+ signal.setContactBlocked(recipient.getIdentifier(), blocked);
+ }
}
@Override
- public void setGroupBlocked(
- final GroupId groupId, final boolean blocked
+ public void setGroupsBlocked(
+ final Collection<GroupId> groupIds, final boolean blocked
) throws GroupNotFoundException, IOException {
- setGroupProperty(groupId, "IsBlocked", blocked);
+ for (final var groupId : groupIds) {
+ setGroupProperty(groupId, "IsBlocked", blocked);
+ }
}
private void setGroupProperty(final GroupId groupId, final String propertyName, final boolean blocked) {
@Override
public void setContactBlocked(final String number, final boolean blocked) {
try {
- m.setContactBlocked(getSingleRecipientIdentifier(number, m.getSelfNumber()), blocked);
+ m.setContactsBlocked(List.of(getSingleRecipientIdentifier(number, m.getSelfNumber())), blocked);
} catch (NotMasterDeviceException e) {
throw new Error.Failure("This command doesn't work on linked devices.");
} catch (IOException e) {
@Override
public void setGroupBlocked(final byte[] groupId, final boolean blocked) {
try {
- m.setGroupBlocked(getGroupId(groupId), blocked);
+ m.setGroupsBlocked(List.of(getGroupId(groupId)), blocked);
} catch (NotMasterDeviceException e) {
throw new Error.Failure("This command doesn't work on linked devices.");
} catch (GroupNotFoundException e) {
private void setIsBlocked(final boolean isBlocked) {
try {
- m.setGroupBlocked(groupId, isBlocked);
+ m.setGroupsBlocked(List.of(groupId), isBlocked);
} catch (NotMasterDeviceException e) {
throw new Error.Failure("This command doesn't work on linked devices.");
} catch (GroupNotFoundException e) {