X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/5c389c875d91bacba127d0e9cbdc1746b022e5aa..1fae09433d79ede67febe3257abf1f1dbd2146e6:/src/main/java/org/asamk/signal/commands/ReceiveCommand.java diff --git a/src/main/java/org/asamk/signal/commands/ReceiveCommand.java b/src/main/java/org/asamk/signal/commands/ReceiveCommand.java index e72d8090..fe062ffc 100644 --- a/src/main/java/org/asamk/signal/commands/ReceiveCommand.java +++ b/src/main/java/org/asamk/signal/commands/ReceiveCommand.java @@ -58,23 +58,22 @@ public class ReceiveCommand implements ExtendedDbusCommand, LocalCommand { final Namespace ns, final Signal signal, DBusConnection dbusconnection, final OutputWriter outputWriter ) throws CommandException { try { - if (outputWriter instanceof JsonWriter) { - final var jsonWriter = (JsonWriter) outputWriter; + if (outputWriter instanceof JsonWriter jsonWriter) { dbusconnection.addSigHandler(Signal.MessageReceived.class, signal, messageReceived -> { - var envelope = new JsonMessageEnvelope(messageReceived); + var envelope = JsonMessageEnvelope.from(messageReceived); final var object = Map.of("envelope", envelope); jsonWriter.write(object); }); dbusconnection.addSigHandler(Signal.ReceiptReceived.class, signal, receiptReceived -> { - var envelope = new JsonMessageEnvelope(receiptReceived); + var envelope = JsonMessageEnvelope.from(receiptReceived); final var object = Map.of("envelope", envelope); jsonWriter.write(object); }); dbusconnection.addSigHandler(Signal.SyncMessageReceived.class, signal, syncReceived -> { - var envelope = new JsonMessageEnvelope(syncReceived); + var envelope = JsonMessageEnvelope.from(syncReceived); final var object = Map.of("envelope", envelope); jsonWriter.write(object); }); @@ -128,11 +127,18 @@ public class ReceiveCommand implements ExtendedDbusCommand, LocalCommand { logger.error("Dbus client failed", e); throw new UnexpectedErrorException("Dbus client failed", e); } + + double timeout = ns.getDouble("timeout"); + long timeoutMilliseconds = timeout < 0 ? 10000 : (long) (timeout * 1000); + while (true) { try { - Thread.sleep(10000); + Thread.sleep(timeoutMilliseconds); } catch (InterruptedException ignored) { - return; + break; + } + if (timeout >= 0) { + break; } } }