]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/cli/Main.java
Always call save() after modifying something
[signal-cli] / src / main / java / cli / Main.java
index 49975daa284025aceb6bb63d58b3eaef1aafedbb..28854846d3b16cedbf7f8dfd2d1f55835a15d3fe 100644 (file)
@@ -20,6 +20,8 @@ import net.sourceforge.argparse4j.ArgumentParsers;
 import net.sourceforge.argparse4j.impl.Arguments;
 import net.sourceforge.argparse4j.inf.*;
 import org.apache.commons.io.IOUtils;
+import org.freedesktop.dbus.DBusConnection;
+import org.freedesktop.dbus.exceptions.DBusException;
 import org.whispersystems.textsecure.api.crypto.UntrustedIdentityException;
 import org.whispersystems.textsecure.api.messages.*;
 import org.whispersystems.textsecure.api.messages.multidevice.TextSecureSyncMessage;
@@ -95,7 +97,7 @@ public class Main {
                         System.exit(1);
                     }
                     try {
-                        m.sendEndSessionMessage(ns.getList("recipient"));
+                        m.sendEndSessionMessage(ns.<String>getList("recipient"));
                     } catch (IOException e) {
                         handleIOException(e);
                     } catch (EncapsulatedExceptions e) {
@@ -120,7 +122,7 @@ public class Main {
                             byte[] groupId = decodeGroupId(ns.getString("group"));
                             m.sendGroupMessage(messageText, ns.<String>getList("attachment"), groupId);
                         } else {
-                            m.sendMessage(messageText, ns.<String>getList("attachment"), ns.getList("recipient"));
+                            m.sendMessage(messageText, ns.<String>getList("attachment"), ns.<String>getList("recipient"));
                         }
                     } catch (IOException e) {
                         handleIOException(e);
@@ -155,13 +157,10 @@ public class Main {
                 try {
                     m.receiveMessages(timeout, returnOnTimeout, new ReceiveMessageHandler(m));
                 } catch (IOException e) {
-                    System.err.println("Error while receiving message: " + e.getMessage());
+                    System.err.println("Error while receiving messages: " + e.getMessage());
                     System.exit(3);
                 } catch (AssertionError e) {
-                    System.err.println("Failed to receive message (Assertion): " + e.getMessage());
-                    System.err.println(e.getStackTrace());
-                    System.err.println("If you use an Oracle JRE please check if you have unlimited strength crypto enabled, see README");
-                    System.exit(1);
+                    handleAssertionError(e);
                 }
                 break;
             case "quitGroup":
@@ -194,7 +193,7 @@ public class Main {
                     if (ns.getString("group") != null) {
                         groupId = decodeGroupId(ns.getString("group"));
                     }
-                    byte[] newGroupId = m.sendUpdateGroupMessage(groupId, ns.getString("name"), ns.getList("member"), ns.getString("avatar"));
+                    byte[] newGroupId = m.sendUpdateGroupMessage(groupId, ns.getString("name"), ns.<String>getList("member"), ns.getString("avatar"));
                     if (groupId == null) {
                         System.out.println("Creating new group \"" + Base64.encodeBytes(newGroupId) + "\" …");
                     }
@@ -210,9 +209,37 @@ public class Main {
                     handleEncapsulatedExceptions(e);
                 }
 
+                break;
+            case "daemon":
+                if (!m.isRegistered()) {
+                    System.err.println("User is not registered.");
+                    System.exit(1);
+                }
+                try {
+                    int busType;
+                    if (ns.getBoolean("system")) {
+                        busType = DBusConnection.SYSTEM;
+                    } else {
+                        busType = DBusConnection.SESSION;
+                    }
+                    DBusConnection conn = DBusConnection.getConnection(busType);
+                    conn.requestBusName("org.asamk.TextSecure");
+                    conn.exportObject("/org/asamk/TextSecure", m);
+                } catch (DBusException e) {
+                    e.printStackTrace();
+                    System.exit(3);
+                }
+                try {
+                    m.receiveMessages(3600, false, new ReceiveMessageHandler(m));
+                } catch (IOException e) {
+                    System.err.println("Error while receiving messages: " + e.getMessage());
+                    System.exit(3);
+                } catch (AssertionError e) {
+                    handleAssertionError(e);
+                }
+
                 break;
         }
-        m.save();
         System.exit(0);
     }
 
@@ -296,6 +323,11 @@ public class Main {
                 .type(int.class)
                 .help("Number of seconds to wait for new messages (negative values disable timeout)");
 
+        Subparser parserDaemon = subparsers.addParser("daemon");
+        parserDaemon.addArgument("--system")
+                .action(Arguments.storeTrue())
+                .help("Use DBus system bus instead of user bus.");
+
         try {
             Namespace ns = parser.parseArgs(args);
             if (ns.getString("username") == null) {
@@ -319,7 +351,7 @@ public class Main {
     }
 
     private static void handleAssertionError(AssertionError e) {
-        System.err.println("Failed to send message (Assertion): " + e.getMessage());
+        System.err.println("Failed to send/receive message (Assertion): " + e.getMessage());
         System.err.println(e.getStackTrace());
         System.err.println("If you use an Oracle JRE please check if you have unlimited strength crypto enabled, see README");
         System.exit(1);