]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/manager/Manager.java
Store number/uuid in recipient store after receiving a message
[signal-cli] / src / main / java / org / asamk / signal / manager / Manager.java
index 01275cec526c0136cf13e84f86ae370ea676e178..81f870cd635af1d300f7fabf49ca1129632eaf82 100644 (file)
@@ -758,10 +758,23 @@ public class Manager implements Closeable {
     /**
      * Change the expiration timer for a contact
      */
-    public void setExpirationTimer(SignalServiceAddress address, int messageExpirationTimer) {
-        ContactInfo c = account.getContactStore().getContact(address);
-        c.messageExpirationTime = messageExpirationTimer;
-        account.getContactStore().updateContact(c);
+    public void setExpirationTimer(SignalServiceAddress address, int messageExpirationTimer) throws IOException {
+        final SignalServiceDataMessage.Builder messageBuilder = SignalServiceDataMessage.newBuilder();
+        ContactInfo contact = account.getContactStore().getContact(address);
+        contact.messageExpirationTime = messageExpirationTimer;
+        account.getContactStore().updateContact(contact);
+        account.save();
+        messageBuilder.withExpiration(messageExpirationTimer);
+        messageBuilder.asExpirationUpdate();
+        sendMessage(messageBuilder, Collections.singleton(address));
+    }
+
+    /**
+     * Change the expiration timer for a contact
+     */
+    public void setExpirationTimer(String number, int messageExpirationTimer) throws IOException, InvalidNumberException {
+        SignalServiceAddress address = canonicalizeAndResolveSignalServiceAddress(number);
+        setExpirationTimer(address, messageExpirationTimer);
     }
 
     /**
@@ -1398,6 +1411,11 @@ public class Manager implements Closeable {
                 System.err.println("Ignoring error: " + e.getMessage());
                 continue;
             }
+            if (envelope.hasSource()) {
+                // Store uuid if we don't have it already
+                SignalServiceAddress source = envelope.getSourceAddress();
+                resolveSignalServiceAddress(source);
+            }
             if (!envelope.isReceipt()) {
                 try {
                     content = decryptMessage(envelope);
@@ -1459,6 +1477,9 @@ public class Manager implements Closeable {
             } else {
                 sender = content.getSender();
             }
+            // Store uuid if we don't have it already
+            resolveSignalServiceAddress(sender);
+
             if (content.getDataMessage().isPresent()) {
                 SignalServiceDataMessage message = content.getDataMessage().get();