]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java
Add --receive-mode parameter to jsonRpc command
[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("--ignore-stories")
38 .help("Don’t receive story messages from the server.")
39 .action(Arguments.storeTrue());
40 subparser.addArgument("--send-read-receipts")
41 .help("Send read receipts for all incoming data messages (in addition to the default delivery receipts)")
42 .action(Arguments.storeTrue());
43 subparser.addArgument("--receive-mode")
44 .help("Specify when to start receiving messages.")
45 .type(Arguments.enumStringType(ReceiveMode.class))
46 .setDefault(ReceiveMode.ON_START);
47 }
48
49 @Override
50 public List<OutputType> getSupportedOutputTypes() {
51 return List.of(OutputType.JSON);
52 }
53
54 @Override
55 public void handleCommand(
56 final Namespace ns, final Manager m, final OutputWriter outputWriter
57 ) throws CommandException {
58 final var receiveMode = ns.<ReceiveMode>get("receive-mode");
59 final var receiveConfig = getReceiveConfig(ns);
60 m.setReceiveConfig(receiveConfig);
61
62 final var jsonOutputWriter = (JsonWriter) outputWriter;
63 final var lineSupplier = getLineSupplier();
64
65 final var handler = new SignalJsonRpcDispatcherHandler(jsonOutputWriter,
66 lineSupplier,
67 receiveMode == ReceiveMode.MANUAL);
68 handler.handleConnection(m);
69 }
70
71 private static ReceiveConfig getReceiveConfig(final Namespace ns) {
72 final var ignoreAttachments = Boolean.TRUE.equals(ns.getBoolean("ignore-attachments"));
73 final var ignoreStories = Boolean.TRUE.equals(ns.getBoolean("ignore-stories"));
74 final var sendReadReceipts = Boolean.TRUE.equals(ns.getBoolean("send-read-receipts"));
75 return new ReceiveConfig(ignoreAttachments, ignoreStories, sendReadReceipts);
76 }
77
78 private static Supplier<String> getLineSupplier() {
79 return IOUtils.getLineSupplier(new InputStreamReader(System.in, IOUtils.getConsoleCharset()));
80 }
81 }