From: AsamK Date: Thu, 4 Jun 2020 16:44:13 +0000 (+0200) Subject: Detect when receive has caught up with old messages X-Git-Tag: v0.6.9~26 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/d14b8ac71ffd3f47d68f8b4a6cb707ffd1d0e154?ds=sidebyside Detect when receive has caught up with old messages --- diff --git a/src/main/java/org/asamk/signal/manager/Manager.java b/src/main/java/org/asamk/signal/manager/Manager.java index 324c4045..243d8857 100644 --- a/src/main/java/org/asamk/signal/manager/Manager.java +++ b/src/main/java/org/asamk/signal/manager/Manager.java @@ -1402,13 +1402,15 @@ public class Manager implements Closeable { messagePipe = messageReceiver.createMessagePipe(); } + boolean hasCaughtUpWithOldMessages = false; + while (true) { SignalServiceEnvelope envelope; SignalServiceContent content = null; Exception exception = null; final long now = new Date().getTime(); try { - envelope = messagePipe.read(timeout, unit, envelope1 -> { + Optional result = messagePipe.readOrEmpty(timeout, unit, envelope1 -> { // store message on disk, before acknowledging receipt to the server try { String source = envelope1.getSourceE164().isPresent() ? envelope1.getSourceE164().get() : ""; @@ -1418,6 +1420,15 @@ public class Manager implements Closeable { System.err.println("Failed to store encrypted message in disk cache, ignoring: " + e.getMessage()); } }); + if (result.isPresent()) { + envelope = result.get(); + } else { + // Received indicator that server queue is empty + hasCaughtUpWithOldMessages = true; + + // Continue to wait another timeout for new messages + continue; + } } catch (TimeoutException e) { if (returnOnTimeout) return;