From: AsamK Date: Sun, 12 Sep 2021 10:04:28 +0000 (+0200) Subject: Refresh prekeys after receiving a pre key message, if necessary X-Git-Tag: v0.9.0~5 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/e3d5ebaa9e062a7d04091797111ba2afade61473?ds=sidebyside Refresh prekeys after receiving a pre key message, if necessary --- diff --git a/lib/src/main/java/org/asamk/signal/manager/Manager.java b/lib/src/main/java/org/asamk/signal/manager/Manager.java index d0deaaed..b74e8660 100644 --- a/lib/src/main/java/org/asamk/signal/manager/Manager.java +++ b/lib/src/main/java/org/asamk/signal/manager/Manager.java @@ -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 index 00000000..82d0d290 --- /dev/null +++ b/lib/src/main/java/org/asamk/signal/manager/actions/RefreshPreKeysAction.java @@ -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(); + } +} diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java b/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java index e46effc0..81aaf0a8 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java @@ -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 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); } diff --git a/lib/src/main/java/org/asamk/signal/manager/jobs/Context.java b/lib/src/main/java/org/asamk/signal/manager/jobs/Context.java index beb41969..7dd99779 100644 --- a/lib/src/main/java/org/asamk/signal/manager/jobs/Context.java +++ b/lib/src/main/java/org/asamk/signal/manager/jobs/Context.java @@ -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; + } }