From d14b8ac71ffd3f47d68f8b4a6cb707ffd1d0e154 Mon Sep 17 00:00:00 2001 From: AsamK Date: Thu, 4 Jun 2020 18:44:13 +0200 Subject: [PATCH] Detect when receive has caught up with old messages --- src/main/java/org/asamk/signal/manager/Manager.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) 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; -- 2.50.1