mirror of
https://github.com/AsamK/signal-cli
synced 2025-08-29 10:30:38 +00:00
Refactor set blocked methods to accept multiple recipientIds/groupIds
This commit is contained in:
parent
2d60f98e93
commit
53f47d42fc
6 changed files with 74 additions and 62 deletions
|
@ -38,6 +38,7 @@ import java.io.File;
|
|||
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;
|
||||
|
@ -151,12 +152,12 @@ public interface Manager extends Closeable {
|
|||
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;
|
||||
|
||||
/**
|
||||
|
|
|
@ -79,6 +79,7 @@ import java.io.IOException;
|
|||
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;
|
||||
|
@ -683,25 +684,36 @@ class ManagerImpl implements Manager {
|
|||
}
|
||||
|
||||
@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();
|
||||
}
|
||||
|
|
|
@ -38,31 +38,27 @@ public class BlockCommand implements JsonRpcLocalCommand {
|
|||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,30 +37,28 @@ public class UnblockCommand implements JsonRpcLocalCommand {
|
|||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,6 +47,7 @@ import java.net.URI;
|
|||
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;
|
||||
|
@ -410,17 +411,21 @@ public class DbusManagerImpl implements Manager {
|
|||
}
|
||||
|
||||
@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) {
|
||||
|
|
|
@ -516,7 +516,7 @@ public class DbusSignalImpl implements Signal {
|
|||
@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) {
|
||||
|
@ -529,7 +529,7 @@ public class DbusSignalImpl implements Signal {
|
|||
@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) {
|
||||
|
@ -1287,7 +1287,7 @@ public class DbusSignalImpl implements Signal {
|
|||
|
||||
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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue