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;
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);
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.")
.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;
}
}
public void init() throws CommandException {
+ var outputType = ns.<OutputType>get("output");
+ var outputWriter = outputType == OutputType.JSON
+ ? new JsonWriter(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.<OutputType>get("output");
if (!command.getSupportedOutputTypes().contains(outputType)) {
throw new UserErrorException("Command doesn't support output type " + outputType.toString());
}
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);
dataPath = getDefaultDataPath();
}
- final var serviceEnvironmentCli = ns.<ServiceEnvironmentCli>get("service_environment");
+ final var serviceEnvironmentCli = ns.<ServiceEnvironmentCli>get("service-environment");
final var serviceEnvironment = serviceEnvironmentCli == ServiceEnvironmentCli.LIVE
? ServiceEnvironment.LIVE
: ServiceEnvironment.SANDBOX;
}
}
- 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 {
}
/**
- * 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");
}
}