]> nmode's Git Repositories - signal-cli/commitdiff
Refresh prekeys after receiving a pre key message, if necessary
authorAsamK <asamk@gmx.de>
Sun, 12 Sep 2021 10:04:28 +0000 (12:04 +0200)
committerAsamK <asamk@gmx.de>
Sun, 12 Sep 2021 10:04:28 +0000 (12:04 +0200)
lib/src/main/java/org/asamk/signal/manager/Manager.java
lib/src/main/java/org/asamk/signal/manager/actions/RefreshPreKeysAction.java [new file with mode: 0644]
lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java
lib/src/main/java/org/asamk/signal/manager/jobs/Context.java

index d0deaaedd61982863b82b08e02d5115b42214875..b74e866008b5ca09950f0421d0a2f15b406b0bf9 100644 (file)
@@ -227,7 +227,8 @@ public class Manager implements Closeable {
                 groupHelper,
                 syncHelper,
                 profileHelper,
-                storageHelper);
+                storageHelper,
+                preKeyHelper);
         var jobExecutor = new JobExecutor(context);
 
         this.incomingMessageHandler = new IncomingMessageHandler(account,
diff --git a/lib/src/main/java/org/asamk/signal/manager/actions/RefreshPreKeysAction.java b/lib/src/main/java/org/asamk/signal/manager/actions/RefreshPreKeysAction.java
new file mode 100644 (file)
index 0000000..82d0d29
--- /dev/null
@@ -0,0 +1,20 @@
+package org.asamk.signal.manager.actions;
+
+import org.asamk.signal.manager.jobs.Context;
+
+public class RefreshPreKeysAction implements HandleAction {
+
+    private static final RefreshPreKeysAction INSTANCE = new RefreshPreKeysAction();
+
+    private RefreshPreKeysAction() {
+    }
+
+    public static RefreshPreKeysAction create() {
+        return INSTANCE;
+    }
+
+    @Override
+    public void execute(Context context) throws Throwable {
+        context.getPreKeyHelper().refreshPreKeysIfNecessary();
+    }
+}
index e46effc03522fbb3e810efdc1c2956f943f34700..81aaf0a83048f98645a4bfb987324d92e6b8c45b 100644 (file)
@@ -6,6 +6,7 @@ import org.asamk.signal.manager.SignalDependencies;
 import org.asamk.signal.manager.TrustLevel;
 import org.asamk.signal.manager.UntrustedIdentityException;
 import org.asamk.signal.manager.actions.HandleAction;
+import org.asamk.signal.manager.actions.RefreshPreKeysAction;
 import org.asamk.signal.manager.actions.RenewSessionAction;
 import org.asamk.signal.manager.actions.RetrieveProfileAction;
 import org.asamk.signal.manager.actions.RetrieveStorageDataAction;
@@ -87,6 +88,11 @@ public final class IncomingMessageHandler {
             final boolean ignoreAttachments,
             final Manager.ReceiveMessageHandler handler
     ) {
+        final List<HandleAction> actions = new ArrayList<>();
+        if (envelope.isPreKeySignalMessage()) {
+            actions.add(RefreshPreKeysAction.create());
+        }
+
         SignalServiceContent content = null;
         if (!envelope.isReceipt()) {
             try {
@@ -100,7 +106,7 @@ public final class IncomingMessageHandler {
                 return new Pair<>(List.of(), e);
             }
         }
-        final var actions = checkAndHandleMessage(envelope, content, ignoreAttachments, handler, null);
+        actions.addAll(checkAndHandleMessage(envelope, content, ignoreAttachments, handler, null));
         return new Pair<>(actions, null);
     }
 
index beb419698599f50622dc264f61839e5106e61f7b..7dd9977971a7f19a1336b0b650510de3440da516 100644 (file)
@@ -3,6 +3,7 @@ package org.asamk.signal.manager.jobs;
 import org.asamk.signal.manager.SignalDependencies;
 import org.asamk.signal.manager.StickerPackStore;
 import org.asamk.signal.manager.helper.GroupHelper;
+import org.asamk.signal.manager.helper.PreKeyHelper;
 import org.asamk.signal.manager.helper.ProfileHelper;
 import org.asamk.signal.manager.helper.SendHelper;
 import org.asamk.signal.manager.helper.StorageHelper;
@@ -19,6 +20,7 @@ public class Context {
     private final SyncHelper syncHelper;
     private final ProfileHelper profileHelper;
     private final StorageHelper storageHelper;
+    private final PreKeyHelper preKeyHelper;
 
     public Context(
             final SignalAccount account,
@@ -28,7 +30,8 @@ public class Context {
             final GroupHelper groupHelper,
             final SyncHelper syncHelper,
             final ProfileHelper profileHelper,
-            final StorageHelper storageHelper
+            final StorageHelper storageHelper,
+            final PreKeyHelper preKeyHelper
     ) {
         this.account = account;
         this.dependencies = dependencies;
@@ -38,6 +41,7 @@ public class Context {
         this.syncHelper = syncHelper;
         this.profileHelper = profileHelper;
         this.storageHelper = storageHelper;
+        this.preKeyHelper = preKeyHelper;
     }
 
     public SignalAccount getAccount() {
@@ -71,4 +75,8 @@ public class Context {
     public StorageHelper getStorageHelper() {
         return storageHelper;
     }
+
+    public PreKeyHelper getPreKeyHelper() {
+        return preKeyHelper;
+    }
 }