X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/db756bfe10ab302d9991e68ec4b5ed34230d39e2..a8bbdb54d006f157a009ece0cae5bf72fb636ced:/src/main/java/org/asamk/signal/App.java diff --git a/src/main/java/org/asamk/signal/App.java b/src/main/java/org/asamk/signal/App.java index 521e453a..49172f80 100644 --- a/src/main/java/org/asamk/signal/App.java +++ b/src/main/java/org/asamk/signal/App.java @@ -14,6 +14,7 @@ import org.asamk.signal.commands.LocalCommand; import org.asamk.signal.commands.MultiLocalCommand; import org.asamk.signal.commands.ProvisioningCommand; import org.asamk.signal.commands.RegistrationCommand; +import org.asamk.signal.commands.SignalCreator; import org.asamk.signal.commands.exceptions.CommandException; import org.asamk.signal.commands.exceptions.UnexpectedErrorException; import org.asamk.signal.commands.exceptions.UserErrorException; @@ -35,6 +36,8 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import static net.sourceforge.argparse4j.DefaultSettings.VERSION_0_9_0_DEFAULT_SETTINGS; + public class App { private final static Logger logger = LoggerFactory.getLogger(App.class); @@ -42,7 +45,8 @@ public class App { private final Namespace ns; static ArgumentParser buildArgumentParser() { - var parser = ArgumentParsers.newFor("signal-cli") + var parser = ArgumentParsers.newFor("signal-cli", VERSION_0_9_0_DEFAULT_SETTINGS) + .includeArgumentNamesAsKeysInResult(true) .build() .defaultHelp(true) .description("Commandline interface for Signal.") @@ -67,17 +71,16 @@ public class App { .setDefault(OutputType.PLAIN_TEXT); parser.addArgument("--service-environment") - .help("Choose the server environment to use, SANDBOX or LIVE.") + .help("Choose the server environment to use.") .type(Arguments.enumStringType(ServiceEnvironmentCli.class)) .setDefault(ServiceEnvironmentCli.LIVE); var subparsers = parser.addSubparsers().title("subcommands").dest("command"); - final var commands = Commands.getCommands(); - for (var entry : commands.entrySet()) { - var subparser = subparsers.addParser(entry.getKey()); - entry.getValue().attachToSubparser(subparser); - } + Commands.getCommandSubparserAttachers().forEach((key, value) -> { + var subparser = subparsers.addParser(key); + value.attachToSubparser(subparser); + }); return parser; } @@ -87,13 +90,17 @@ public class App { } public void init() throws CommandException { + var outputType = ns.get("output"); + var outputWriter = outputType == OutputType.JSON + ? new JsonWriterImpl(System.out) + : new PlainTextWriterImpl(System.out); + var commandKey = ns.getString("command"); - var command = Commands.getCommand(commandKey); + var command = Commands.getCommand(commandKey, outputWriter); if (command == null) { throw new UserErrorException("Command not implemented!"); } - var outputType = ns.get("output"); if (!command.getSupportedOutputTypes().contains(outputType)) { throw new UserErrorException("Command doesn't support output type " + outputType.toString()); } @@ -101,7 +108,7 @@ public class App { var username = ns.getString("username"); final var useDbus = ns.getBoolean("dbus"); - final var useDbusSystem = ns.getBoolean("dbus_system"); + final var useDbusSystem = ns.getBoolean("dbus-system"); if (useDbus || useDbusSystem) { // If username is null, it will connect to the default object path initDbusClient(command, username, useDbusSystem); @@ -116,7 +123,7 @@ public class App { dataPath = getDefaultDataPath(); } - final var serviceEnvironmentCli = ns.get("service_environment"); + final var serviceEnvironmentCli = ns.get("service-environment"); final var serviceEnvironment = serviceEnvironmentCli == ServiceEnvironmentCli.LIVE ? ServiceEnvironment.LIVE : ServiceEnvironment.SANDBOX; @@ -229,7 +236,17 @@ public class App { } } - command.handleCommand(ns, managers); + command.handleCommand(ns, managers, new SignalCreator() { + @Override + public ProvisioningManager getNewProvisioningManager() { + return ProvisioningManager.init(dataPath, serviceEnvironment, BaseConfig.USER_AGENT); + } + + @Override + public RegistrationManager getNewRegistrationManager(String username) throws IOException { + return RegistrationManager.init(username, dataPath, serviceEnvironment, BaseConfig.USER_AGENT); + } + }); for (var m : managers) { try { @@ -302,32 +319,9 @@ public class App { } /** - * Uses $XDG_DATA_HOME/signal-cli if it exists, or if none of the legacy directories exist: - * - $HOME/.config/signal - * - $HOME/.config/textsecure - * - * @return the data directory to be used by signal-cli. + * @return the default data directory to be used by signal-cli. */ private static File getDefaultDataPath() { - var dataPath = new File(IOUtils.getDataHomeDir(), "signal-cli"); - if (dataPath.exists()) { - return dataPath; - } - - var configPath = new File(System.getProperty("user.home"), ".config"); - - var legacySettingsPath = new File(configPath, "signal"); - if (legacySettingsPath.exists()) { - logger.warn("Using legacy data path \"{}\", please move it to \"{}\".", legacySettingsPath, dataPath); - return legacySettingsPath; - } - - legacySettingsPath = new File(configPath, "textsecure"); - if (legacySettingsPath.exists()) { - logger.warn("Using legacy data path \"{}\", please move it to \"{}\".", legacySettingsPath, dataPath); - return legacySettingsPath; - } - - return dataPath; + return new File(IOUtils.getDataHomeDir(), "signal-cli"); } }