diff --git a/src/main/java/org/asamk/Signal.java b/src/main/java/org/asamk/Signal.java index 0d74848d..9e81c788 100644 --- a/src/main/java/org/asamk/Signal.java +++ b/src/main/java/org/asamk/Signal.java @@ -59,9 +59,9 @@ public interface Signal extends DBusInterface { public List listNumbers(); - public String getContactNumber(final String name); + public List getContactNumber(final String name) throws Error.Failure; - public void quitGroup(final byte[] groupId); + public void quitGroup(final byte[] groupId) throws Error.GroupNotFound,Error.Failure; public boolean isContactBlocked(final String number); @@ -69,7 +69,7 @@ public interface Signal extends DBusInterface { public boolean isMember(final byte[] groupId); - public void joinGroup(final String groupLink); + public void joinGroup(final String groupLink) throws Error.Failure; class MessageReceived extends DBusSignal { diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java index 96f5d0fc..8dd37b3a 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java @@ -22,6 +22,8 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Objects; +import java.util.stream.Stream; import java.util.stream.Collectors; public class DbusSignalImpl implements Signal { @@ -145,11 +147,9 @@ public class DbusSignalImpl implements Signal { // Since contact names might be empty if not defined, also potentially return // the profile name - // Profile names separate firstname/lastname by a \0 - replace by space - // otherwise the interface will hickup @Override public String getContactName(final String number) { - String name = m.getContactOrProfileName(number).replace("\0", " "); + String name = m.getContactOrProfileName(number); return name; } @@ -272,34 +272,21 @@ public class DbusSignalImpl implements Signal { // all numbers the system knows @Override public List listNumbers() { - List numbers = new ArrayList<>(); - - for (IdentityInfo identity : m.getIdentities()) { - String number = identity.getAddress().getNumber().orNull(); - if (number != null) { - if (numbers.indexOf(number) == -1) { - numbers.add(number); - } - } - } - - var contacts = m.getContacts(); - for (var c : contacts) { - if (numbers.indexOf(c.number) == -1) { - numbers.add(c.number); - } - } - - return numbers; + return Stream.concat(m.getIdentities().stream().map(i -> i.getAddress().getNumber().orNull()), + m.getContacts().stream().map(c -> c.number)) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); } @Override - public String getContactNumber(final String name) { + public List getContactNumber(final String name) { // Contact names have precendence. + List numbers=new ArrayList<>(); var contacts = m.getContacts(); for (var c : contacts) { - if (!c.name.isEmpty() && c.name.equals(name)) { - return c.number; + if (c.name!=null && c.name.equals(name)) { + numbers.add(c.number); } } // Try profiles if no contact name was found @@ -308,15 +295,16 @@ public class DbusSignalImpl implements Signal { if (number != null) { var address = Utils.getSignalServiceAddressFromIdentifier(number); var profile = m.getRecipientProfile(address); - String profileName = profile.getName().replace("\0", " "); + String profileName = profile.getDisplayName(); if (profileName.equals(name)) { - return number; + numbers.add(number); } } } - - return ""; - + if (numbers.size()==0) { + throw new Error.Failure("Contact name not found"); + } + return numbers; } @Override @@ -354,7 +342,7 @@ public class DbusSignalImpl implements Signal { return c.blocked; } } - throw new Error.InvalidNumber("Contact not found"); + return false; } @Override