]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java
ca5b8939419eadf4cedee7527c01c85ca01e87c0
[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 }
38
39 @Override
40 public List<OutputType> getSupportedOutputTypes() {
41 return List.of(OutputType.JSON);
42 }
43
44 @Override
45 public void handleCommand(
46 final Namespace ns, final Manager m, final OutputWriter outputWriter
47 ) throws CommandException {
48 final boolean ignoreAttachments = Boolean.TRUE.equals(ns.getBoolean("ignore-attachments"));
49 m.setReceiveConfig(new ReceiveConfig(ignoreAttachments));
50
51 final var jsonOutputWriter = (JsonWriter) outputWriter;
52 final Supplier<String> lineSupplier = IOUtils.getLineSupplier(new InputStreamReader(System.in,
53 IOUtils.getConsoleCharset()));
54
55 final var handler = new SignalJsonRpcDispatcherHandler(jsonOutputWriter, lineSupplier, false);
56 handler.handleConnection(m);
57 }
58 }