]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/commands/DaemonCommand.java
Refactor output writers
[signal-cli] / src / main / java / org / asamk / signal / commands / DaemonCommand.java
index f54f3bf67b03488427926a08a3a006fe844aa415..f7d8b12e2e088a4e476c1348fb45e5ea51e81c85 100644 (file)
@@ -7,7 +7,10 @@ import net.sourceforge.argparse4j.inf.Subparser;
 import org.asamk.signal.DbusConfig;
 import org.asamk.signal.DbusReceiveMessageHandler;
 import org.asamk.signal.JsonDbusReceiveMessageHandler;
+import org.asamk.signal.JsonWriter;
 import org.asamk.signal.OutputType;
+import org.asamk.signal.OutputWriter;
+import org.asamk.signal.PlainTextWriter;
 import org.asamk.signal.commands.exceptions.CommandException;
 import org.asamk.signal.commands.exceptions.UnexpectedErrorException;
 import org.asamk.signal.dbus.DbusSignalImpl;
@@ -26,18 +29,20 @@ import java.util.concurrent.TimeUnit;
 public class DaemonCommand implements MultiLocalCommand {
 
     private final static Logger logger = LoggerFactory.getLogger(DaemonCommand.class);
+    private final OutputWriter outputWriter;
 
-    @Override
-    public void attachToSubparser(final Subparser subparser) {
+    public static void attachToSubparser(final Subparser subparser) {
+        subparser.help("Run in daemon mode and provide an experimental dbus interface.");
         subparser.addArgument("--system")
                 .action(Arguments.storeTrue())
                 .help("Use DBus system bus instead of user bus.");
         subparser.addArgument("--ignore-attachments")
                 .help("Don’t download attachments of received messages.")
                 .action(Arguments.storeTrue());
-        subparser.addArgument("--json")
-                .help("WARNING: This parameter is now deprecated! Please use the global \"--output=json\" option instead.\n\nOutput received messages in json format, one json object per line.")
-                .action(Arguments.storeTrue());
+    }
+
+    public DaemonCommand(final OutputWriter outputWriter) {
+        this.outputWriter = outputWriter;
     }
 
     @Override
@@ -47,13 +52,6 @@ public class DaemonCommand implements MultiLocalCommand {
 
     @Override
     public void handleCommand(final Namespace ns, final Manager m) throws CommandException {
-        var inJson = ns.get("output") == OutputType.JSON || ns.getBoolean("json");
-
-        // TODO delete later when "json" variable is removed
-        if (ns.getBoolean("json")) {
-            logger.warn("\"--json\" option has been deprecated, please use the global \"--output=json\" instead.");
-        }
-
         boolean ignoreAttachments = ns.getBoolean("ignore-attachments");
 
         DBusConnection.DBusBusType busType;
@@ -65,7 +63,7 @@ public class DaemonCommand implements MultiLocalCommand {
 
         try (var conn = DBusConnection.getConnection(busType)) {
             var objectPath = DbusConfig.getObjectPath();
-            var t = run(conn, objectPath, m, ignoreAttachments, inJson);
+            var t = run(conn, objectPath, m, ignoreAttachments);
 
             conn.requestBusName(DbusConfig.getBusname());
 
@@ -81,13 +79,6 @@ public class DaemonCommand implements MultiLocalCommand {
 
     @Override
     public void handleCommand(final Namespace ns, final List<Manager> managers) throws CommandException {
-        var inJson = ns.get("output") == OutputType.JSON || ns.getBoolean("json");
-
-        // TODO delete later when "json" variable is removed
-        if (ns.getBoolean("json")) {
-            logger.warn("\"--json\" option has been deprecated, please use the global \"--output=json\" instead.");
-        }
-
         boolean ignoreAttachments = ns.getBoolean("ignore-attachments");
 
         DBusConnection.DBusBusType busType;
@@ -101,7 +92,7 @@ public class DaemonCommand implements MultiLocalCommand {
             var receiveThreads = new ArrayList<Thread>();
             for (var m : managers) {
                 var objectPath = DbusConfig.getObjectPath(m.getUsername());
-                var thread = run(conn, objectPath, m, ignoreAttachments, inJson);
+                var thread = run(conn, objectPath, m, ignoreAttachments);
                 receiveThreads.add(thread);
             }
 
@@ -120,20 +111,17 @@ public class DaemonCommand implements MultiLocalCommand {
     }
 
     private Thread run(
-            DBusConnection conn, String objectPath, Manager m, boolean ignoreAttachments, boolean inJson
+            DBusConnection conn, String objectPath, Manager m, boolean ignoreAttachments
     ) throws DBusException {
         conn.exportObject(objectPath, new DbusSignalImpl(m));
 
         final var thread = new Thread(() -> {
             while (true) {
                 try {
-                    m.receiveMessages(1,
-                            TimeUnit.HOURS,
-                            false,
-                            ignoreAttachments,
-                            inJson
-                                    ? new JsonDbusReceiveMessageHandler(m, conn, objectPath)
-                                    : new DbusReceiveMessageHandler(m, conn, objectPath));
+                    final var receiveMessageHandler = outputWriter instanceof JsonWriter
+                            ? new JsonDbusReceiveMessageHandler(m, (JsonWriter) outputWriter, conn, objectPath)
+                            : new DbusReceiveMessageHandler(m, (PlainTextWriter) outputWriter, conn, objectPath);
+                    m.receiveMessages(1, TimeUnit.HOURS, false, ignoreAttachments, receiveMessageHandler);
                 } catch (IOException e) {
                     logger.warn("Receiving messages failed, retrying", e);
                 }