From: AsamK Date: Thu, 26 May 2022 16:00:23 +0000 (+0200) Subject: Add option to send read receipts for all received data messages X-Git-Tag: v0.10.7~2 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/27dbc671e09c3efbaaf4d0f16d3ccdfb640ae603 Add option to send read receipts for all received data messages Fixes #850 --- diff --git a/lib/src/main/java/org/asamk/signal/manager/api/ReceiveConfig.java b/lib/src/main/java/org/asamk/signal/manager/api/ReceiveConfig.java index 0210c430..bf5f1d99 100644 --- a/lib/src/main/java/org/asamk/signal/manager/api/ReceiveConfig.java +++ b/lib/src/main/java/org/asamk/signal/manager/api/ReceiveConfig.java @@ -1,3 +1,3 @@ package org.asamk.signal.manager.api; -public record ReceiveConfig(boolean ignoreAttachments) {} +public record ReceiveConfig(boolean ignoreAttachments, boolean sendReadReceipts) {} 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 2ee2e14e..b6e3d8cb 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 @@ -260,6 +260,11 @@ public final class IncomingMessageHandler { actions.add(new SendProfileKeyAction(sender)); } } + if (receiveConfig.sendReadReceipts()) { + actions.add(new SendReceiptAction(sender, + SignalServiceReceiptMessage.Type.READ, + message.getTimestamp())); + } actions.addAll(handleSignalServiceDataMessage(message, false, diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/ReceiveHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/ReceiveHelper.java index d27fe121..d3c1ef56 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/ReceiveHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/ReceiveHelper.java @@ -35,7 +35,7 @@ public class ReceiveHelper { private final SignalDependencies dependencies; private final Context context; - private ReceiveConfig receiveConfig = new ReceiveConfig(false); + private ReceiveConfig receiveConfig = new ReceiveConfig(false, false); private boolean needsToRetryFailedMessages = false; private boolean hasCaughtUpWithOldMessages = false; private boolean isWaitingForMessage = false; diff --git a/man/signal-cli.1.adoc b/man/signal-cli.1.adoc index 1ccb067c..4d32ea5f 100644 --- a/man/signal-cli.1.adoc +++ b/man/signal-cli.1.adoc @@ -357,6 +357,9 @@ Default is 5 seconds. *--ignore-attachments*:: Don’t download attachments of received messages. +*--send-read-receipts*:: +Send read receipts for all incoming data messages (in addition to the default delivery receipts) + === joinGroup Join a group via an invitation link. @@ -628,6 +631,9 @@ See signal-cli-jsonrpc (5) for info on the JSON-RPC interface. *--ignore-attachments*:: Don’t download attachments of received messages. +*--send-read-receipts*:: +Send read receipts for all incoming data messages (in addition to the default delivery receipts) + *--no-receive-stdout*:: Don’t print received messages to stdout. diff --git a/src/main/java/org/asamk/signal/commands/DaemonCommand.java b/src/main/java/org/asamk/signal/commands/DaemonCommand.java index c65d576d..cec7cd03 100644 --- a/src/main/java/org/asamk/signal/commands/DaemonCommand.java +++ b/src/main/java/org/asamk/signal/commands/DaemonCommand.java @@ -79,6 +79,9 @@ public class DaemonCommand implements MultiLocalCommand, LocalCommand { subparser.addArgument("--ignore-attachments") .help("Don’t download attachments of received messages.") .action(Arguments.storeTrue()); + subparser.addArgument("--send-read-receipts") + .help("Send read receipts for all incoming data messages (in addition to the default delivery receipts)") + .action(Arguments.storeTrue()); } @Override @@ -94,8 +97,9 @@ public class DaemonCommand implements MultiLocalCommand, LocalCommand { final var noReceiveStdOut = Boolean.TRUE.equals(ns.getBoolean("no-receive-stdout")); final var receiveMode = ns.get("receive-mode"); final var ignoreAttachments = Boolean.TRUE.equals(ns.getBoolean("ignore-attachments")); + final boolean sendReadReceipts = Boolean.TRUE.equals(ns.getBoolean("send-read-receipts")); - m.setReceiveConfig(new ReceiveConfig(ignoreAttachments)); + m.setReceiveConfig(new ReceiveConfig(ignoreAttachments, sendReadReceipts)); addDefaultReceiveHandler(m, noReceiveStdOut ? null : outputWriter, receiveMode != ReceiveMode.ON_START); final Channel inheritedChannel; @@ -156,8 +160,9 @@ public class DaemonCommand implements MultiLocalCommand, LocalCommand { final var noReceiveStdOut = Boolean.TRUE.equals(ns.getBoolean("no-receive-stdout")); final var receiveMode = ns.get("receive-mode"); final var ignoreAttachments = Boolean.TRUE.equals(ns.getBoolean("ignore-attachments")); + final boolean sendReadReceipts = Boolean.TRUE.equals(ns.getBoolean("send-read-receipts")); - final var receiveConfig = new ReceiveConfig(ignoreAttachments); + final var receiveConfig = new ReceiveConfig(ignoreAttachments, sendReadReceipts); c.getManagers().forEach(m -> { m.setReceiveConfig(receiveConfig); addDefaultReceiveHandler(m, noReceiveStdOut ? null : outputWriter, receiveMode != ReceiveMode.ON_START); diff --git a/src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java b/src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java index ca5b8939..ef33a6e8 100644 --- a/src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java +++ b/src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java @@ -34,6 +34,9 @@ public class JsonRpcDispatcherCommand implements LocalCommand { subparser.addArgument("--ignore-attachments") .help("Don’t download attachments of received messages.") .action(Arguments.storeTrue()); + subparser.addArgument("--send-read-receipts") + .help("Send read receipts for all incoming data messages (in addition to the default delivery receipts)") + .action(Arguments.storeTrue()); } @Override @@ -46,7 +49,8 @@ public class JsonRpcDispatcherCommand implements LocalCommand { final Namespace ns, final Manager m, final OutputWriter outputWriter ) throws CommandException { final boolean ignoreAttachments = Boolean.TRUE.equals(ns.getBoolean("ignore-attachments")); - m.setReceiveConfig(new ReceiveConfig(ignoreAttachments)); + final boolean sendReadReceipts = Boolean.TRUE.equals(ns.getBoolean("send-read-receipts")); + m.setReceiveConfig(new ReceiveConfig(ignoreAttachments, sendReadReceipts)); final var jsonOutputWriter = (JsonWriter) outputWriter; final Supplier lineSupplier = IOUtils.getLineSupplier(new InputStreamReader(System.in, diff --git a/src/main/java/org/asamk/signal/commands/ReceiveCommand.java b/src/main/java/org/asamk/signal/commands/ReceiveCommand.java index bb7e9b73..68292557 100644 --- a/src/main/java/org/asamk/signal/commands/ReceiveCommand.java +++ b/src/main/java/org/asamk/signal/commands/ReceiveCommand.java @@ -40,6 +40,9 @@ public class ReceiveCommand implements LocalCommand { subparser.addArgument("--ignore-attachments") .help("Don’t download attachments of received messages.") .action(Arguments.storeTrue()); + subparser.addArgument("--send-read-receipts") + .help("Send read receipts for all incoming data messages (in addition to the default delivery receipts)") + .action(Arguments.storeTrue()); } @Override @@ -53,7 +56,8 @@ public class ReceiveCommand implements LocalCommand { ) throws CommandException { double timeout = ns.getDouble("timeout"); boolean ignoreAttachments = Boolean.TRUE.equals(ns.getBoolean("ignore-attachments")); - m.setReceiveConfig(new ReceiveConfig(ignoreAttachments)); + boolean sendReadReceipts = Boolean.TRUE.equals(ns.getBoolean("send-read-receipts")); + m.setReceiveConfig(new ReceiveConfig(ignoreAttachments, sendReadReceipts)); try { final var handler = outputWriter instanceof JsonWriter ? new JsonReceiveMessageHandler(m, (JsonWriter) outputWriter) : new ReceiveMessageHandler(m, (PlainTextWriter) outputWriter);