]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java
Implement getConfiguration method in Manager
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / ManagerImpl.java
index 9994ad6540578e0bf2bf7e7d77b0efb0aa647cd4..5ee2e7d3b62ed01cd6f42181be41c8cabc4a4b09 100644 (file)
@@ -17,6 +17,7 @@
 package org.asamk.signal.manager;
 
 import org.asamk.signal.manager.actions.HandleAction;
+import org.asamk.signal.manager.api.Configuration;
 import org.asamk.signal.manager.api.Device;
 import org.asamk.signal.manager.api.Group;
 import org.asamk.signal.manager.api.Identity;
@@ -26,6 +27,7 @@ import org.asamk.signal.manager.api.Message;
 import org.asamk.signal.manager.api.Pair;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.api.SendGroupMessageResults;
+import org.asamk.signal.manager.api.SendMessageResult;
 import org.asamk.signal.manager.api.SendMessageResults;
 import org.asamk.signal.manager.api.TypingAction;
 import org.asamk.signal.manager.api.UpdateGroup;
@@ -69,11 +71,11 @@ import org.whispersystems.libsignal.InvalidKeyException;
 import org.whispersystems.libsignal.ecc.ECPublicKey;
 import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.SignalSessionLock;
-import org.whispersystems.signalservice.api.messages.SendMessageResult;
 import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
 import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
 import org.whispersystems.signalservice.api.messages.SignalServiceReceiptMessage;
 import org.whispersystems.signalservice.api.messages.SignalServiceTypingMessage;
+import org.whispersystems.signalservice.api.push.ACI;
 import org.whispersystems.signalservice.api.push.SignalServiceAddress;
 import org.whispersystems.signalservice.api.util.DeviceNameUtil;
 import org.whispersystems.signalservice.api.util.InvalidNumberException;
@@ -149,7 +151,7 @@ public class ManagerImpl implements Manager {
         this.account = account;
         this.serviceEnvironmentConfig = serviceEnvironmentConfig;
 
-        final var credentialsProvider = new DynamicCredentialsProvider(account.getUuid(),
+        final var credentialsProvider = new DynamicCredentialsProvider(account.getAci(),
                 account.getUsername(),
                 account.getPassword(),
                 account.getDeviceId());
@@ -262,8 +264,8 @@ public class ManagerImpl implements Manager {
             }
         }
         preKeyHelper.refreshPreKeysIfNecessary();
-        if (account.getUuid() == null) {
-            account.setUuid(dependencies.getAccountManager().getOwnUuid());
+        if (account.getAci() == null) {
+            account.setAci(dependencies.getAccountManager().getOwnAci());
         }
         updateAccountAttributes(null);
     }
@@ -293,8 +295,8 @@ public class ManagerImpl implements Manager {
 
         return numbers.stream().collect(Collectors.toMap(n -> n, n -> {
             final var number = canonicalizedNumbers.get(n);
-            final var uuid = registeredUsers.get(number);
-            return new Pair<>(number.isEmpty() ? null : number, uuid);
+            final var aci = registeredUsers.get(number);
+            return new Pair<>(number.isEmpty() ? null : number, aci == null ? null : aci.uuid());
         }));
     }
 
@@ -321,29 +323,35 @@ public class ManagerImpl implements Manager {
                         account.isDiscoverableByPhoneNumber());
     }
 
+    @Override
+    public Configuration getConfiguration() {
+        final var configurationStore = account.getConfigurationStore();
+        return new Configuration(java.util.Optional.ofNullable(configurationStore.getReadReceipts()),
+                java.util.Optional.ofNullable(configurationStore.getUnidentifiedDeliveryIndicators()),
+                java.util.Optional.ofNullable(configurationStore.getTypingIndicators()),
+                java.util.Optional.ofNullable(configurationStore.getLinkPreviews()));
+    }
+
     @Override
     public void updateConfiguration(
-            final Boolean readReceipts,
-            final Boolean unidentifiedDeliveryIndicators,
-            final Boolean typingIndicators,
-            final Boolean linkPreviews
+            Configuration configuration
     ) throws IOException, NotMasterDeviceException {
         if (!account.isMasterDevice()) {
             throw new NotMasterDeviceException();
         }
 
         final var configurationStore = account.getConfigurationStore();
-        if (readReceipts != null) {
-            configurationStore.setReadReceipts(readReceipts);
+        if (configuration.readReceipts().isPresent()) {
+            configurationStore.setReadReceipts(configuration.readReceipts().get());
         }
-        if (unidentifiedDeliveryIndicators != null) {
-            configurationStore.setUnidentifiedDeliveryIndicators(unidentifiedDeliveryIndicators);
+        if (configuration.unidentifiedDeliveryIndicators().isPresent()) {
+            configurationStore.setUnidentifiedDeliveryIndicators(configuration.unidentifiedDeliveryIndicators().get());
         }
-        if (typingIndicators != null) {
-            configurationStore.setTypingIndicators(typingIndicators);
+        if (configuration.typingIndicators().isPresent()) {
+            configurationStore.setTypingIndicators(configuration.typingIndicators().get());
         }
-        if (linkPreviews != null) {
-            configurationStore.setLinkPreviews(linkPreviews);
+        if (configuration.linkPreviews().isPresent()) {
+            configurationStore.setLinkPreviews(configuration.linkPreviews().get());
         }
         syncHelper.sendConfigurationMessage();
     }
@@ -581,13 +589,24 @@ public class ManagerImpl implements Manager {
             if (recipient instanceof RecipientIdentifier.Single single) {
                 final var recipientId = resolveRecipient(single);
                 final var result = sendHelper.sendMessage(messageBuilder, recipientId);
-                results.put(recipient, List.of(result));
+                results.put(recipient,
+                        List.of(SendMessageResult.from(result,
+                                account.getRecipientStore(),
+                                account.getRecipientStore()::resolveRecipientAddress)));
             } else if (recipient instanceof RecipientIdentifier.NoteToSelf) {
                 final var result = sendHelper.sendSelfMessage(messageBuilder);
-                results.put(recipient, List.of(result));
+                results.put(recipient,
+                        List.of(SendMessageResult.from(result,
+                                account.getRecipientStore(),
+                                account.getRecipientStore()::resolveRecipientAddress)));
             } else if (recipient instanceof RecipientIdentifier.Group group) {
                 final var result = sendHelper.sendAsGroupMessage(messageBuilder, group.groupId());
-                results.put(recipient, result);
+                results.put(recipient,
+                        result.stream()
+                                .map(sendMessageResult -> SendMessageResult.from(sendMessageResult,
+                                        account.getRecipientStore(),
+                                        account.getRecipientStore()::resolveRecipientAddress))
+                                .collect(Collectors.toList()));
             }
         }
         return new SendMessageResults(timestamp, results);
@@ -806,22 +825,22 @@ public class ManagerImpl implements Manager {
         return resolveRecipientTrusted(new SignalServiceAddress(uuid, number));
     }
 
-    private UUID getRegisteredUser(final String number) throws IOException {
-        final Map<String, UUID> uuidMap;
+    private ACI getRegisteredUser(final String number) throws IOException {
+        final Map<String, ACI> aciMap;
         try {
-            uuidMap = getRegisteredUsers(Set.of(number));
+            aciMap = getRegisteredUsers(Set.of(number));
         } catch (NumberFormatException e) {
             throw new IOException(number, e);
         }
-        final var uuid = uuidMap.get(number);
+        final var uuid = aciMap.get(number);
         if (uuid == null) {
             throw new IOException(number, null);
         }
         return uuid;
     }
 
-    private Map<String, UUID> getRegisteredUsers(final Set<String> numbers) throws IOException {
-        final Map<String, UUID> registeredUsers;
+    private Map<String, ACI> getRegisteredUsers(final Set<String> numbers) throws IOException {
+        final Map<String, ACI> registeredUsers;
         try {
             registeredUsers = dependencies.getAccountManager()
                     .getRegisteredUsers(ServiceConfig.getIasKeyStore(),
@@ -831,8 +850,8 @@ public class ManagerImpl implements Manager {
             throw new IOException(e);
         }
 
-        // Store numbers as recipients so we have the number/uuid association
-        registeredUsers.forEach((number, uuid) -> resolveRecipientTrusted(new SignalServiceAddress(uuid, number)));
+        // Store numbers as recipients, so we have the number/uuid association
+        registeredUsers.forEach((number, aci) -> resolveRecipientTrusted(new SignalServiceAddress(aci, number)));
 
         return registeredUsers;
     }
@@ -1138,11 +1157,6 @@ public class ManagerImpl implements Manager {
         return contactHelper.isContactBlocked(recipientId);
     }
 
-    @Override
-    public File getAttachmentFile(String attachmentId) {
-        return attachmentHelper.getAttachmentFile(attachmentId);
-    }
-
     @Override
     public void sendContacts() throws IOException {
         syncHelper.sendContacts();
@@ -1292,7 +1306,8 @@ public class ManagerImpl implements Manager {
     }
 
     private void handleIdentityFailure(
-            final RecipientId recipientId, final SendMessageResult.IdentityFailure identityFailure
+            final RecipientId recipientId,
+            final org.whispersystems.signalservice.api.messages.SendMessageResult.IdentityFailure identityFailure
     ) {
         this.identityHelper.handleIdentityFailure(recipientId, identityFailure);
     }
@@ -1306,15 +1321,15 @@ public class ManagerImpl implements Manager {
         // Address in recipient store doesn't have a uuid, this shouldn't happen
         // Try to retrieve the uuid from the server
         final var number = address.getNumber().get();
-        final UUID uuid;
+        final ACI aci;
         try {
-            uuid = getRegisteredUser(number);
+            aci = getRegisteredUser(number);
         } catch (IOException e) {
             logger.warn("Failed to get uuid for e164 number: {}", number, e);
             // Return SignalServiceAddress with unknown UUID
             return address.toSignalServiceAddress();
         }
-        return resolveSignalServiceAddress(account.getRecipientStore().resolveRecipient(uuid));
+        return resolveSignalServiceAddress(account.getRecipientStore().resolveRecipient(aci));
     }
 
     private Set<RecipientId> resolveRecipients(Collection<RecipientIdentifier.Single> recipients) throws IOException {
@@ -1327,8 +1342,8 @@ public class ManagerImpl implements Manager {
     }
 
     private RecipientId resolveRecipient(final RecipientIdentifier.Single recipient) throws IOException {
-        if (recipient instanceof RecipientIdentifier.Uuid) {
-            return account.getRecipientStore().resolveRecipient(((RecipientIdentifier.Uuid) recipient).uuid());
+        if (recipient instanceof RecipientIdentifier.Uuid uuidRecipient) {
+            return account.getRecipientStore().resolveRecipient(ACI.from(uuidRecipient.uuid()));
         } else {
             final var number = ((RecipientIdentifier.Number) recipient).number();
             return account.getRecipientStore().resolveRecipient(number, () -> {