1 package org
.asamk
.signal
.commands
;
3 import net
.sourceforge
.argparse4j
.impl
.Arguments
;
4 import net
.sourceforge
.argparse4j
.inf
.Namespace
;
5 import net
.sourceforge
.argparse4j
.inf
.Subparser
;
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
;
16 import java
.io
.BufferedReader
;
17 import java
.io
.IOException
;
18 import java
.io
.InputStreamReader
;
19 import java
.io
.Reader
;
20 import java
.util
.List
;
21 import java
.util
.function
.Supplier
;
23 public class JsonRpcDispatcherCommand
implements LocalCommand
{
25 private final static Logger logger
= LoggerFactory
.getLogger(JsonRpcDispatcherCommand
.class);
28 public String
getName() {
33 public void attachToSubparser(final Subparser subparser
) {
34 subparser
.help("Take commands from standard input as line-delimited JSON RPC while receiving messages.");
35 subparser
.addArgument("--ignore-attachments")
36 .help("Don’t download attachments of received messages.")
37 .action(Arguments
.storeTrue());
41 public List
<OutputType
> getSupportedOutputTypes() {
42 return List
.of(OutputType
.JSON
);
46 public void handleCommand(
47 final Namespace ns
, final Manager m
, final OutputWriter outputWriter
48 ) throws CommandException
{
49 final boolean ignoreAttachments
= Boolean
.TRUE
.equals(ns
.getBoolean("ignore-attachments"));
50 m
.setIgnoreAttachments(ignoreAttachments
);
52 final var jsonOutputWriter
= (JsonWriter
) outputWriter
;
53 final Supplier
<String
> lineSupplier
= getLineSupplier(new InputStreamReader(System
.in));
55 final var handler
= new SignalJsonRpcDispatcherHandler(m
, jsonOutputWriter
, lineSupplier
);
56 handler
.handleConnection();
59 private Supplier
<String
> getLineSupplier(final Reader reader
) {
60 final var bufferedReader
= new BufferedReader(reader
);
63 return bufferedReader
.readLine();
64 } catch (IOException e
) {
65 logger
.error("Error occurred while reading line", e
);