+ public List<Recipient> getRecipients(
+ final boolean onlyContacts,
+ final Optional<Boolean> blocked,
+ final Collection<RecipientIdentifier.Single> addresses,
+ final Optional<String> name
+ ) {
+ final var numbers = addresses.stream()
+ .filter(s -> s instanceof RecipientIdentifier.Number)
+ .map(s -> ((RecipientIdentifier.Number) s).number())
+ .collect(Collectors.toSet());
+ return signal.listNumbers().stream().filter(n -> addresses.isEmpty() || numbers.contains(n)).map(n -> {
+ final var contactBlocked = signal.isContactBlocked(n);
+ if (blocked.isPresent() && blocked.get() != contactBlocked) {
+ return null;
+ }
+ final var contactName = signal.getContactName(n);
+ if (onlyContacts && contactName.length() == 0) {
+ return null;
+ }
+ if (name.isPresent() && !name.get().equals(contactName)) {
+ return null;
+ }
+ return Recipient.newBuilder()
+ .withAddress(new RecipientAddress(null, n))
+ .withContact(new Contact(contactName, null, null, 0, contactBlocked, false, false))
+ .build();
+ }).filter(Objects::nonNull).toList();