]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java
Extract SignalJsonRpcDispatcherHandler
[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.JsonWriter;
8 import org.asamk.signal.OutputType;
9 import org.asamk.signal.OutputWriter;
10 import org.asamk.signal.commands.exceptions.CommandException;
11 import org.asamk.signal.jsonrpc.SignalJsonRpcDispatcherHandler;
12 import org.asamk.signal.manager.Manager;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
15
16 import java.io.BufferedReader;
17 import java.io.IOException;
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.setIgnoreAttachments(ignoreAttachments);
50
51 final var jsonOutputWriter = (JsonWriter) outputWriter;
52 final var reader = new BufferedReader(new InputStreamReader(System.in));
53 final Supplier<String> lineSupplier = () -> {
54 try {
55 return reader.readLine();
56 } catch (IOException e) {
57 throw new AssertionError(e);
58 }
59 };
60
61 final var handler = new SignalJsonRpcDispatcherHandler(m, jsonOutputWriter, lineSupplier);
62 handler.handleConnection();
63 }
64 }