Refactor set blocked methods to accept multiple recipientIds/groupIds

This commit is contained in:
AsamK 2022-05-18 11:09:05 +02:00
parent 2d60f98e93
commit 53f47d42fc
6 changed files with 74 additions and 62 deletions

View file

@ -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;
/**

View file

@ -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();
}
if (groupIds.size() == 0) {
return;
}
for (final var groupId : groupIds) {
context.getGroupHelper().setGroupBlocked(groupId, blocked);
}
// TODO cycle our profile key
context.getSyncHelper().sendBlockedList();
}

View file

@ -38,9 +38,9 @@ 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())) {
final var recipients = CommandUtil.getSingleRecipientIdentifiers(contacts, m.getSelfNumber());
try {
m.setContactBlocked(contact, true);
m.setContactsBlocked(recipients, true);
} catch (NotMasterDeviceException e) {
throw new UserErrorException("This command doesn't work on linked devices.");
} catch (IOException e) {
@ -48,21 +48,17 @@ public class BlockCommand implements JsonRpcLocalCommand {
} 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)) {
final var groupIds = CommandUtil.getGroupIds(groupIdStrings);
try {
m.setGroupBlocked(groupId, true);
m.setGroupsBlocked(groupIds, 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());
logger.warn("Unknown group id: {}", e.getMessage());
} catch (IOException e) {
throw new UnexpectedErrorException("Failed to sync block to linked devices: " + e.getMessage(), e);
}
}
}
}
}

View file

@ -37,10 +37,10 @@ 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())) {
final var contacts = ns.<String>getList("recipient");
final var recipients = CommandUtil.getSingleRecipientIdentifiers(contacts, m.getSelfNumber());
try {
m.setContactBlocked(contactNumber, false);
m.setContactsBlocked(recipients, false);
} catch (NotMasterDeviceException e) {
throw new UserErrorException("This command doesn't work on linked devices.");
} catch (IOException e) {
@ -48,19 +48,17 @@ public class UnblockCommand implements JsonRpcLocalCommand {
} 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)) {
final var groupIds = CommandUtil.getGroupIds(groupIdStrings);
try {
m.setGroupBlocked(groupId, false);
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: {}", groupId);
logger.warn("Unknown group id: {}", e.getMessage());
} catch (IOException e) {
throw new UnexpectedErrorException("Failed to sync unblock to linked devices: " + e.getMessage(), e);
}
}
}
}

View file

@ -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,18 +411,22 @@ 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 {
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 {
for (final var groupId : groupIds) {
setGroupProperty(groupId, "IsBlocked", blocked);
}
}
private void setGroupProperty(final GroupId groupId, final String propertyName, final boolean blocked) {
final var group = getRemoteObject(signal.getGroup(groupId.serialize()), Signal.Group.class);

View file

@ -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) {