]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/DaemonCommand.java
Remove unnecessary isRegistered checks
[signal-cli] / src / main / java / org / asamk / signal / commands / DaemonCommand.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.DbusReceiveMessageHandler;
8 import org.asamk.signal.JsonDbusReceiveMessageHandler;
9 import org.asamk.signal.dbus.DbusSignalImpl;
10 import org.asamk.signal.manager.Manager;
11 import org.freedesktop.dbus.connections.impl.DBusConnection;
12 import org.freedesktop.dbus.exceptions.DBusException;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
15
16 import java.io.IOException;
17 import java.util.concurrent.TimeUnit;
18
19 import static org.asamk.signal.DbusConfig.SIGNAL_BUSNAME;
20 import static org.asamk.signal.DbusConfig.SIGNAL_OBJECTPATH;
21 import static org.asamk.signal.util.ErrorUtils.handleAssertionError;
22
23 public class DaemonCommand implements LocalCommand {
24
25 private final static Logger logger = LoggerFactory.getLogger(ReceiveCommand.class);
26
27 @Override
28 public void attachToSubparser(final Subparser subparser) {
29 subparser.addArgument("--system")
30 .action(Arguments.storeTrue())
31 .help("Use DBus system bus instead of user bus.");
32 subparser.addArgument("--ignore-attachments")
33 .help("Don’t download attachments of received messages.")
34 .action(Arguments.storeTrue());
35 subparser.addArgument("--json")
36 .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.")
37 .action(Arguments.storeTrue());
38 }
39
40 @Override
41 public int handleCommand(final Namespace ns, final Manager m) {
42 boolean inJson = ns.getString("output").equals("json") || ns.getBoolean("json");
43
44 // TODO delete later when "json" variable is removed
45 if (ns.getBoolean("json")) {
46 logger.warn("\"--json\" option has been deprecated, please use the global \"--output=json\" instead.");
47 }
48
49 DBusConnection conn = null;
50 try {
51 try {
52 DBusConnection.DBusBusType busType;
53 if (ns.getBoolean("system")) {
54 busType = DBusConnection.DBusBusType.SYSTEM;
55 } else {
56 busType = DBusConnection.DBusBusType.SESSION;
57 }
58 conn = DBusConnection.getConnection(busType);
59 conn.exportObject(SIGNAL_OBJECTPATH, new DbusSignalImpl(m));
60 conn.requestBusName(SIGNAL_BUSNAME);
61 } catch (UnsatisfiedLinkError e) {
62 System.err.println("Missing native library dependency for dbus service: " + e.getMessage());
63 return 1;
64 } catch (DBusException e) {
65 e.printStackTrace();
66 return 2;
67 }
68 boolean ignoreAttachments = ns.getBoolean("ignore_attachments");
69 try {
70 m.receiveMessages(1,
71 TimeUnit.HOURS,
72 false,
73 ignoreAttachments,
74 inJson
75 ? new JsonDbusReceiveMessageHandler(m, conn, SIGNAL_OBJECTPATH)
76 : new DbusReceiveMessageHandler(m, conn, SIGNAL_OBJECTPATH));
77 return 0;
78 } catch (IOException e) {
79 System.err.println("Error while receiving messages: " + e.getMessage());
80 return 3;
81 } catch (AssertionError e) {
82 handleAssertionError(e);
83 return 1;
84 }
85 } finally {
86 if (conn != null) {
87 conn.disconnect();
88 }
89 }
90 }
91 }