]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java
Use console charset for reading/writing to stdin/out
[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.output.JsonWriter;
12 import org.asamk.signal.output.OutputWriter;
13 import org.asamk.signal.util.IOUtils;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
16
17 import java.io.InputStreamReader;
18 import java.util.List;
19 import java.util.function.Supplier;
20
21 public class JsonRpcDispatcherCommand implements LocalCommand {
22
23 private final static Logger logger = LoggerFactory.getLogger(JsonRpcDispatcherCommand.class);
24
25 @Override
26 public String getName() {
27 return "jsonRpc";
28 }
29
30 @Override
31 public void attachToSubparser(final Subparser subparser) {
32 subparser.help("Take commands from standard input as line-delimited JSON RPC while receiving messages.");
33 subparser.addArgument("--ignore-attachments")
34 .help("Don’t download attachments of received messages.")
35 .action(Arguments.storeTrue());
36 }
37
38 @Override
39 public List<OutputType> getSupportedOutputTypes() {
40 return List.of(OutputType.JSON);
41 }
42
43 @Override
44 public void handleCommand(
45 final Namespace ns, final Manager m, final OutputWriter outputWriter
46 ) throws CommandException {
47 final boolean ignoreAttachments = Boolean.TRUE.equals(ns.getBoolean("ignore-attachments"));
48 m.setIgnoreAttachments(ignoreAttachments);
49
50 final var jsonOutputWriter = (JsonWriter) outputWriter;
51 final Supplier<String> lineSupplier = IOUtils.getLineSupplier(new InputStreamReader(System.in,
52 IOUtils.getConsoleCharset()));
53
54 final var handler = new SignalJsonRpcDispatcherHandler(jsonOutputWriter, lineSupplier, false);
55 handler.handleConnection(m);
56 }
57 }