]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/manager/Manager.java
Extract JsonWriter for json output
[signal-cli] / src / main / java / org / asamk / signal / manager / Manager.java
index 38c4375313da3536b59bfc8bb2af005faf91966e..7d2681ae6afdc862a91068453ec58dbfa518ade8 100644 (file)
@@ -325,11 +325,9 @@ public class Manager implements Closeable {
      */
     public Map<String, Boolean> areUsersRegistered(Set<String> numbers) throws IOException {
         // Note "contactDetails" has no optionals. It only gives us info on users who are registered
-        List<ContactTokenDetails> contactDetails = this.accountManager.getContacts(numbers);
+        Map<String, UUID> contactDetails = getRegisteredUsers(numbers);
 
-        Set<String> registeredUsers = contactDetails.stream()
-                .map(ContactTokenDetails::getNumber)
-                .collect(Collectors.toSet());
+        Set<String> registeredUsers = contactDetails.keySet();
 
         return numbers.stream().collect(Collectors.toMap(x -> x, registeredUsers::contains));
     }
@@ -953,7 +951,7 @@ public class Manager implements Closeable {
         return sendMessage(messageBuilder, getSignalServiceAddresses(recipients));
     }
 
-    public Pair<Long, List<SendMessageResult>> sendSelfMessage(
+    public Pair<Long, SendMessageResult> sendSelfMessage(
             String messageText, List<String> attachments
     ) throws IOException, AttachmentInvalidException {
         final SignalServiceDataMessage.Builder messageBuilder = SignalServiceDataMessage.newBuilder()
@@ -1184,28 +1182,29 @@ public class Manager implements Closeable {
 
     private Collection<SignalServiceAddress> getSignalServiceAddresses(Collection<String> numbers) throws InvalidNumberException {
         final Set<SignalServiceAddress> signalServiceAddresses = new HashSet<>(numbers.size());
-        final Set<SignalServiceAddress> missingUuids = new HashSet<>();
+        final Set<SignalServiceAddress> addressesMissingUuid = new HashSet<>();
 
         for (String number : numbers) {
             final SignalServiceAddress resolvedAddress = canonicalizeAndResolveSignalServiceAddress(number);
             if (resolvedAddress.getUuid().isPresent()) {
                 signalServiceAddresses.add(resolvedAddress);
             } else {
-                missingUuids.add(resolvedAddress);
+                addressesMissingUuid.add(resolvedAddress);
             }
         }
 
+        final Set<String> numbersMissingUuid = addressesMissingUuid.stream()
+                .map(a -> a.getNumber().get())
+                .collect(Collectors.toSet());
         Map<String, UUID> registeredUsers;
         try {
-            registeredUsers = accountManager.getRegisteredUsers(getIasKeyStore(),
-                    missingUuids.stream().map(a -> a.getNumber().get()).collect(Collectors.toSet()),
-                    CDS_MRENCLAVE);
-        } catch (IOException | Quote.InvalidQuoteFormatException | UnauthenticatedQuoteException | SignatureException | UnauthenticatedResponseException e) {
+            registeredUsers = getRegisteredUsers(numbersMissingUuid);
+        } catch (IOException e) {
             logger.warn("Failed to resolve uuids from server, ignoring: {}", e.getMessage());
-            registeredUsers = new HashMap<>();
+            registeredUsers = Map.of();
         }
 
-        for (SignalServiceAddress address : missingUuids) {
+        for (SignalServiceAddress address : addressesMissingUuid) {
             final String number = address.getNumber().get();
             if (registeredUsers.containsKey(number)) {
                 final SignalServiceAddress newAddress = resolveSignalServiceAddress(new SignalServiceAddress(
@@ -1220,6 +1219,14 @@ public class Manager implements Closeable {
         return signalServiceAddresses;
     }
 
+    private Map<String, UUID> getRegisteredUsers(final Set<String> numbersMissingUuid) throws IOException {
+        try {
+            return accountManager.getRegisteredUsers(getIasKeyStore(), numbersMissingUuid, CDS_MRENCLAVE);
+        } catch (Quote.InvalidQuoteFormatException | UnauthenticatedQuoteException | SignatureException | UnauthenticatedResponseException e) {
+            throw new IOException(e);
+        }
+    }
+
     private Pair<Long, List<SendMessageResult>> sendMessage(
             SignalServiceDataMessage.Builder messageBuilder, Collection<SignalServiceAddress> recipients
     ) throws IOException {
@@ -1278,7 +1285,7 @@ public class Manager implements Closeable {
         }
     }
 
-    private Pair<Long, List<SendMessageResult>> sendSelfMessage(
+    private Pair<Long, SendMessageResult> sendSelfMessage(
             SignalServiceDataMessage.Builder messageBuilder
     ) throws IOException {
         final long timestamp = System.currentTimeMillis();
@@ -1294,7 +1301,7 @@ public class Manager implements Closeable {
 
             SignalServiceDataMessage message = messageBuilder.build();
             final SendMessageResult result = sendSelfMessage(message);
-            return new Pair<>(timestamp, List.of(result));
+            return new Pair<>(timestamp, result);
         } finally {
             account.save();
         }