]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java
Add option to send read receipts for all received data messages
[signal-cli] / src / main / java / org / asamk / signal / commands / JsonRpcDispatcherCommand.java
1 package org.asamk.signal.commands;
2
3 import net.sourceforge.argparse4j.impl.Arguments;
4 import net.sourceforge.argparse4j.inf.Namespace;
5 import net.sourceforge.argparse4j.inf.Subparser;
6
7 import org.asamk.signal.OutputType;
8 import org.asamk.signal.commands.exceptions.CommandException;
9 import org.asamk.signal.jsonrpc.SignalJsonRpcDispatcherHandler;
10 import org.asamk.signal.manager.Manager;
11 import org.asamk.signal.manager.api.ReceiveConfig;
12 import org.asamk.signal.output.JsonWriter;
13 import org.asamk.signal.output.OutputWriter;
14 import org.asamk.signal.util.IOUtils;
15 import org.slf4j.Logger;
16 import org.slf4j.LoggerFactory;
17
18 import java.io.InputStreamReader;
19 import java.util.List;
20 import java.util.function.Supplier;
21
22 public class JsonRpcDispatcherCommand implements LocalCommand {
23
24 private final static Logger logger = LoggerFactory.getLogger(JsonRpcDispatcherCommand.class);
25
26 @Override
27 public String getName() {
28 return "jsonRpc";
29 }
30
31 @Override
32 public void attachToSubparser(final Subparser subparser) {
33 subparser.help("Take commands from standard input as line-delimited JSON RPC while receiving messages.");
34 subparser.addArgument("--ignore-attachments")
35 .help("Don’t download attachments of received messages.")
36 .action(Arguments.storeTrue());
37 subparser.addArgument("--send-read-receipts")
38 .help("Send read receipts for all incoming data messages (in addition to the default delivery receipts)")
39 .action(Arguments.storeTrue());
40 }
41
42 @Override
43 public List<OutputType> getSupportedOutputTypes() {
44 return List.of(OutputType.JSON);
45 }
46
47 @Override
48 public void handleCommand(
49 final Namespace ns, final Manager m, final OutputWriter outputWriter
50 ) throws CommandException {
51 final boolean ignoreAttachments = Boolean.TRUE.equals(ns.getBoolean("ignore-attachments"));
52 final boolean sendReadReceipts = Boolean.TRUE.equals(ns.getBoolean("send-read-receipts"));
53 m.setReceiveConfig(new ReceiveConfig(ignoreAttachments, sendReadReceipts));
54
55 final var jsonOutputWriter = (JsonWriter) outputWriter;
56 final Supplier<String> lineSupplier = IOUtils.getLineSupplier(new InputStreamReader(System.in,
57 IOUtils.getConsoleCharset()));
58
59 final var handler = new SignalJsonRpcDispatcherHandler(jsonOutputWriter, lineSupplier, false);
60 handler.handleConnection(m);
61 }
62 }