]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/cli/Main.java
Add -v and --version command line arguments
[signal-cli] / src / main / java / cli / Main.java
index 319ca42ae1cf4c9512440ac01b460b1c0683fe41..059fb46b7ec5c97f3e1647432f7b21ea53e01805 100644 (file)
@@ -57,7 +57,7 @@ public class Main {
             try {
                 m.load();
             } catch (Exception e) {
             try {
                 m.load();
             } catch (Exception e) {
-                System.out.println("Error loading state file \"" + m.getFileName() + "\": " + e.getMessage());
+                System.err.println("Error loading state file \"" + m.getFileName() + "\": " + e.getMessage());
                 System.exit(2);
             }
         }
                 System.exit(2);
             }
         }
@@ -70,29 +70,29 @@ public class Main {
                 try {
                     m.register(ns.getBoolean("voice"));
                 } catch (IOException e) {
                 try {
                     m.register(ns.getBoolean("voice"));
                 } catch (IOException e) {
-                    System.out.println("Request verify error: " + e.getMessage());
+                    System.err.println("Request verify error: " + e.getMessage());
                     System.exit(3);
                 }
                 break;
             case "verify":
                 if (!m.userHasKeys()) {
                     System.exit(3);
                 }
                 break;
             case "verify":
                 if (!m.userHasKeys()) {
-                    System.out.println("User has no keys, first call register.");
+                    System.err.println("User has no keys, first call register.");
                     System.exit(1);
                 }
                 if (m.isRegistered()) {
                     System.exit(1);
                 }
                 if (m.isRegistered()) {
-                    System.out.println("User registration is already verified");
+                    System.err.println("User registration is already verified");
                     System.exit(1);
                 }
                 try {
                     m.verifyAccount(ns.getString("verificationCode"));
                 } catch (IOException e) {
                     System.exit(1);
                 }
                 try {
                     m.verifyAccount(ns.getString("verificationCode"));
                 } catch (IOException e) {
-                    System.out.println("Verify error: " + e.getMessage());
+                    System.err.println("Verify error: " + e.getMessage());
                     System.exit(3);
                 }
                 break;
             case "send":
                 if (!m.isRegistered()) {
                     System.exit(3);
                 }
                 break;
             case "send":
                 if (!m.isRegistered()) {
-                    System.out.println("User is not registered.");
+                    System.err.println("User is not registered.");
                     System.exit(1);
                 }
                 String messageText = ns.getString("message");
                     System.exit(1);
                 }
                 String messageText = ns.getString("message");
@@ -100,15 +100,15 @@ public class Main {
                     try {
                         messageText = IOUtils.toString(System.in);
                     } catch (IOException e) {
                     try {
                         messageText = IOUtils.toString(System.in);
                     } catch (IOException e) {
-                        System.out.println("Failed to read message from stdin: " + e.getMessage());
+                        System.err.println("Failed to read message from stdin: " + e.getMessage());
                         System.exit(1);
                     }
                 }
 
                         System.exit(1);
                     }
                 }
 
-                final List<String> attachments = ns.<String>getList("attachment");
+                final List<String> attachments = ns.getList("attachment");
                 List<TextSecureAttachment> textSecureAttachments = null;
                 if (attachments != null) {
                 List<TextSecureAttachment> textSecureAttachments = null;
                 if (attachments != null) {
-                    textSecureAttachments = new ArrayList<TextSecureAttachment>(attachments.size());
+                    textSecureAttachments = new ArrayList<>(attachments.size());
                     for (String attachment : attachments) {
                         try {
                             File attachmentFile = new File(attachment);
                     for (String attachment : attachments) {
                         try {
                             File attachmentFile = new File(attachment);
@@ -117,8 +117,8 @@ public class Main {
                             String mime = Files.probeContentType(Paths.get(attachment));
                             textSecureAttachments.add(new TextSecureAttachmentStream(attachmentStream, mime, attachmentSize, null));
                         } catch (IOException e) {
                             String mime = Files.probeContentType(Paths.get(attachment));
                             textSecureAttachments.add(new TextSecureAttachmentStream(attachmentStream, mime, attachmentSize, null));
                         } catch (IOException e) {
-                            System.out.println("Failed to add attachment \"" + attachment + "\": " + e.getMessage());
-                            System.out.println("Aborting sending.");
+                            System.err.println("Failed to add attachment \"" + attachment + "\": " + e.getMessage());
+                            System.err.println("Aborting sending.");
                             System.exit(1);
                         }
                     }
                             System.exit(1);
                         }
                     }
@@ -129,8 +129,8 @@ public class Main {
                     try {
                         recipients.add(m.getPushAddress(recipient));
                     } catch (InvalidNumberException e) {
                     try {
                         recipients.add(m.getPushAddress(recipient));
                     } catch (InvalidNumberException e) {
-                        System.out.println("Failed to add recipient \"" + recipient + "\": " + e.getMessage());
-                        System.out.println("Aborting sending.");
+                        System.err.println("Failed to add recipient \"" + recipient + "\": " + e.getMessage());
+                        System.err.println("Aborting sending.");
                         System.exit(1);
                     }
                 }
                         System.exit(1);
                     }
                 }
@@ -138,18 +138,18 @@ public class Main {
                 break;
             case "receive":
                 if (!m.isRegistered()) {
                 break;
             case "receive":
                 if (!m.isRegistered()) {
-                    System.out.println("User is not registered.");
+                    System.err.println("User is not registered.");
                     System.exit(1);
                 }
                 try {
                     m.receiveMessages(5, true, new ReceiveMessageHandler(m));
                 } catch (IOException e) {
                     System.exit(1);
                 }
                 try {
                     m.receiveMessages(5, true, new ReceiveMessageHandler(m));
                 } catch (IOException e) {
-                    System.out.println("Error while receiving message: " + e.getMessage());
+                    System.err.println("Error while receiving message: " + e.getMessage());
                     System.exit(3);
                 } catch (AssertionError e) {
                     System.exit(3);
                 } catch (AssertionError e) {
-                    System.out.println("Failed to receive message (Assertion): " + e.getMessage());
-                    System.out.println(e.getStackTrace());
-                    System.out.println("If you use an Oracle JRE please check if you have unlimited strength crypto enabled, see README");
+                    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);
                 }
                 break;
                     System.exit(1);
                 }
                 break;
@@ -161,7 +161,15 @@ public class Main {
     private static Namespace parseArgs(String[] args) {
         ArgumentParser parser = ArgumentParsers.newArgumentParser("textsecure-cli")
                 .defaultHelp(true)
     private static Namespace parseArgs(String[] args) {
         ArgumentParser parser = ArgumentParsers.newArgumentParser("textsecure-cli")
                 .defaultHelp(true)
-                .description("Commandline interface for TextSecure.");
+                .description("Commandline interface for TextSecure.")
+                .version(Manager.PROJECT_NAME + " " + Manager.PROJECT_VERSION);
+
+        parser.addArgument("-u", "--username")
+                .help("Specify your phone number, that will be used for verification.");
+        parser.addArgument("-v", "--version")
+                .help("Show package version.")
+                .action(Arguments.version());
+
         Subparsers subparsers = parser.addSubparsers()
                 .title("subcommands")
                 .dest("command")
         Subparsers subparsers = parser.addSubparsers()
                 .title("subcommands")
                 .dest("command")
@@ -188,12 +196,15 @@ public class Main {
                 .help("Add file as attachment");
 
         Subparser parserReceive = subparsers.addParser("receive");
                 .help("Add file as attachment");
 
         Subparser parserReceive = subparsers.addParser("receive");
-        parser.addArgument("-u", "--username")
-                .required(true)
-                .help("Specify your phone number, that will be used for verification.");
 
         try {
 
         try {
-            return parser.parseArgs(args);
+            Namespace ns = parser.parseArgs(args);
+            if (ns.getString("username") == null) {
+                parser.printUsage();
+                System.err.println("You need to specify a username (phone number)");
+                System.exit(2);
+            }
+            return ns;
         } catch (ArgumentParserException e) {
             parser.handleError(e);
             return null;
         } catch (ArgumentParserException e) {
             parser.handleError(e);
             return null;
@@ -211,22 +222,22 @@ public class Main {
         try {
             m.sendMessage(recipients, message);
         } catch (IOException e) {
         try {
             m.sendMessage(recipients, message);
         } catch (IOException e) {
-            System.out.println("Failed to send message: " + e.getMessage());
+            System.err.println("Failed to send message: " + e.getMessage());
         } catch (EncapsulatedExceptions e) {
         } catch (EncapsulatedExceptions e) {
-            System.out.println("Failed to send (some) messages:");
+            System.err.println("Failed to send (some) messages:");
             for (NetworkFailureException n : e.getNetworkExceptions()) {
             for (NetworkFailureException n : e.getNetworkExceptions()) {
-                System.out.println("Network failure for \"" + n.getE164number() + "\": " + n.getMessage());
+                System.err.println("Network failure for \"" + n.getE164number() + "\": " + n.getMessage());
             }
             for (UnregisteredUserException n : e.getUnregisteredUserExceptions()) {
             }
             for (UnregisteredUserException n : e.getUnregisteredUserExceptions()) {
-                System.out.println("Unregistered user \"" + n.getE164Number() + "\": " + n.getMessage());
+                System.err.println("Unregistered user \"" + n.getE164Number() + "\": " + n.getMessage());
             }
             for (UntrustedIdentityException n : e.getUntrustedIdentityExceptions()) {
             }
             for (UntrustedIdentityException n : e.getUntrustedIdentityExceptions()) {
-                System.out.println("Untrusted Identity for \"" + n.getE164Number() + "\": " + n.getMessage());
+                System.err.println("Untrusted Identity for \"" + n.getE164Number() + "\": " + n.getMessage());
             }
         } catch (AssertionError e) {
             }
         } catch (AssertionError e) {
-            System.out.println("Failed to send message (Assertion): " + e.getMessage());
-            System.out.println(e.getStackTrace());
-            System.out.println("If you use an Oracle JRE please check if you have unlimited strength crypto enabled, see README");
+            System.err.println("Failed to send 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);
         }
     }
             System.exit(1);
         }
     }
@@ -262,9 +273,11 @@ public class Main {
                             for (TextSecureAttachment attachment : message.getAttachments().get()) {
                                 System.out.println("- " + attachment.getContentType() + " (" + (attachment.isPointer() ? "Pointer" : "") + (attachment.isStream() ? "Stream" : "") + ")");
                                 if (attachment.isPointer()) {
                             for (TextSecureAttachment attachment : message.getAttachments().get()) {
                                 System.out.println("- " + attachment.getContentType() + " (" + (attachment.isPointer() ? "Pointer" : "") + (attachment.isStream() ? "Stream" : "") + ")");
                                 if (attachment.isPointer()) {
-                                    System.out.println("  Id: " + attachment.asPointer().getId() + " Key length: " + attachment.asPointer().getKey().length + (attachment.asPointer().getRelay().isPresent() ? " Relay: " + attachment.asPointer().getRelay().get() : ""));
+                                    final TextSecureAttachmentPointer pointer = attachment.asPointer();
+                                    System.out.println("  Id: " + pointer.getId() + " Key length: " + pointer.getKey().length + (pointer.getRelay().isPresent() ? " Relay: " + pointer.getRelay().get() : ""));
+                                    System.out.println((pointer.getSize().isPresent() ? " Size: " + pointer.getSize().get() : " bytes") + (pointer.getPreview().isPresent() ? " (Preview is available: " + pointer.getPreview().get().length + " bytes)" : ""));
                                     try {
                                     try {
-                                        File file = m.retrieveAttachment(attachment.asPointer());
+                                        File file = m.retrieveAttachment(pointer);
                                         System.out.println("  Stored plaintext in: " + file);
                                     } catch (IOException | InvalidMessageException e) {
                                         System.out.println("Failed to retrieve attachment: " + e.getMessage());
                                         System.out.println("  Stored plaintext in: " + file);
                                     } catch (IOException | InvalidMessageException e) {
                                         System.out.println("Failed to retrieve attachment: " + e.getMessage());