From 53f47d42fc30a86a9bb6cd08f4678a756f4a4aaf Mon Sep 17 00:00:00 2001 From: AsamK Date: Wed, 18 May 2022 11:09:05 +0200 Subject: [PATCH] Refactor set blocked methods to accept multiple recipientIds/groupIds --- .../org/asamk/signal/manager/Manager.java | 9 +++-- .../org/asamk/signal/manager/ManagerImpl.java | 24 ++++++++--- .../asamk/signal/commands/BlockCommand.java | 40 +++++++++---------- .../asamk/signal/commands/UnblockCommand.java | 40 +++++++++---------- .../asamk/signal/dbus/DbusManagerImpl.java | 17 +++++--- .../org/asamk/signal/dbus/DbusSignalImpl.java | 6 +-- 6 files changed, 74 insertions(+), 62 deletions(-) diff --git a/lib/src/main/java/org/asamk/signal/manager/Manager.java b/lib/src/main/java/org/asamk/signal/manager/Manager.java index d14b0f44..8f49126f 100644 --- a/lib/src/main/java/org/asamk/signal/manager/Manager.java +++ b/lib/src/main/java/org/asamk/signal/manager/Manager.java @@ -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 recipient, boolean blocked ) throws NotMasterDeviceException, IOException, UnregisteredRecipientException; - void setGroupBlocked( - GroupId groupId, boolean blocked + void setGroupsBlocked( + Collection groupId, boolean blocked ) throws GroupNotFoundException, IOException, NotMasterDeviceException; /** diff --git a/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java index db8744cd..f6205dba 100644 --- a/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java @@ -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 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 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(); } diff --git a/src/main/java/org/asamk/signal/commands/BlockCommand.java b/src/main/java/org/asamk/signal/commands/BlockCommand.java index 7d72b1c5..8d7f1a8b 100644 --- a/src/main/java/org/asamk/signal/commands/BlockCommand.java +++ b/src/main/java/org/asamk/signal/commands/BlockCommand.java @@ -38,31 +38,27 @@ public class BlockCommand implements JsonRpcLocalCommand { final Namespace ns, final Manager m, final OutputWriter outputWriter ) throws CommandException { final var contacts = ns.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.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); } } } diff --git a/src/main/java/org/asamk/signal/commands/UnblockCommand.java b/src/main/java/org/asamk/signal/commands/UnblockCommand.java index af49236c..4cfe4647 100644 --- a/src/main/java/org/asamk/signal/commands/UnblockCommand.java +++ b/src/main/java/org/asamk/signal/commands/UnblockCommand.java @@ -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.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.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); } } } diff --git a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java index 05ba6b99..29889c3d 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java @@ -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 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 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) { diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java index 746f8f52..b4485e32 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java @@ -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) { -- 2.50.1