+ static ArgumentParser buildArgumentParser() {
+ ArgumentParser parser = ArgumentParsers.newFor("signal-cli")
+ .build()
+ .defaultHelp(true)
+ .description("Commandline interface for Signal.")
+ .version(BaseConfig.PROJECT_NAME + " " + BaseConfig.PROJECT_VERSION);
+
+ parser.addArgument("-v", "--version").help("Show package version.").action(Arguments.version());
+ parser.addArgument("--verbose")
+ .help("Raise log level and include lib signal logs.")
+ .action(Arguments.storeTrue());
+ parser.addArgument("--config")
+ .help("Set the path, where to store the config (Default: $XDG_DATA_HOME/signal-cli , $HOME/.local/share/signal-cli).");
+
+ parser.addArgument("-u", "--username").help("Specify your phone number, that will be used for verification.");
+
+ MutuallyExclusiveGroup mut = parser.addMutuallyExclusiveGroup();
+ mut.addArgument("--dbus").help("Make request via user dbus.").action(Arguments.storeTrue());
+ mut.addArgument("--dbus-system").help("Make request via system dbus.").action(Arguments.storeTrue());
+
+ parser.addArgument("-o", "--output")
+ .help("Choose to output in plain text or JSON")
+ .choices("plain-text", "json")
+ .setDefault("plain-text");
+
+ Subparsers subparsers = parser.addSubparsers().title("subcommands").dest("command");
+
+ final Map<String, Command> commands = Commands.getCommands();
+ for (Map.Entry<String, Command> entry : commands.entrySet()) {
+ Subparser subparser = subparsers.addParser(entry.getKey());
+ entry.getValue().attachToSubparser(subparser);
+ }
+
+ return parser;
+ }
+