X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/fc2e9bbfaec8dbe6e317b951c0d28fa2e9421347..783201d12e7ef621554fe16640ddfd7f0534ff37:/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 f0ebbfae..6352aa13 100644 --- a/src/main/java/org/asamk/signal/App.java +++ b/src/main/java/org/asamk/signal/App.java @@ -16,7 +16,6 @@ import org.asamk.signal.commands.exceptions.CommandException; import org.asamk.signal.commands.exceptions.IOErrorException; import org.asamk.signal.commands.exceptions.UnexpectedErrorException; import org.asamk.signal.commands.exceptions.UserErrorException; -import org.asamk.signal.dbus.DbusCommandHandler; import org.asamk.signal.manager.Manager; import org.asamk.signal.manager.RegistrationManager; import org.asamk.signal.manager.Settings; @@ -29,11 +28,6 @@ import org.asamk.signal.output.JsonWriterImpl; import org.asamk.signal.output.OutputWriter; import org.asamk.signal.output.PlainTextWriterImpl; import org.asamk.signal.util.IOUtils; -import org.freedesktop.dbus.connections.impl.DBusConnection; -import org.freedesktop.dbus.connections.impl.DBusConnectionBuilder; -import org.freedesktop.dbus.errors.ServiceUnknown; -import org.freedesktop.dbus.exceptions.DBusException; -import org.freedesktop.dbus.exceptions.DBusExecutionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,10 +38,11 @@ import java.io.OutputStreamWriter; import java.util.Set; import static net.sourceforge.argparse4j.DefaultSettings.VERSION_0_9_0_DEFAULT_SETTINGS; +import static org.asamk.signal.dbus.DbusCommandHandler.initDbusClient; public class App { - private final static Logger logger = LoggerFactory.getLogger(App.class); + private static final Logger logger = LoggerFactory.getLogger(App.class); private final Namespace ns; @@ -81,6 +76,10 @@ public class App { .dest("global-dbus-system") .help("Make request via system dbus.") .action(Arguments.storeTrue()); + parser.addArgument("--bus-name") + .dest("global-bus-name") + .setDefault(DbusConfig.getBusname()) + .help("Specify the D-Bus bus name to connect to."); parser.addArgument("-o", "--output") .help("Choose to output in plain text or JSON") @@ -100,6 +99,9 @@ public class App { .help("Disable message send log (for resending messages that recipient couldn't decrypt)") .action(Arguments.storeTrue()); + parser.epilog( + "The global arguments are shown with 'signal-cli -h' and need to come before the subcommand, while the subcommand-specific arguments (shown with 'signal-cli SUBCOMMAND -h') need to be given after the subcommand."); + var subparsers = parser.addSubparsers().title("subcommands").dest("command"); Commands.getCommandSubparserAttachers().forEach((key, value) -> { @@ -130,8 +132,9 @@ public class App { final var useDbus = Boolean.TRUE.equals(ns.getBoolean("global-dbus")); final var useDbusSystem = Boolean.TRUE.equals(ns.getBoolean("global-dbus-system")); if (useDbus || useDbusSystem) { + final var busName = ns.getString("global-bus-name"); // If account is null, it will connect to the default object path - initDbusClient(command, account, useDbusSystem, commandHandler); + initDbusClient(command, account, useDbusSystem, busName, commandHandler); return; } @@ -288,11 +291,14 @@ public class App { commandHandler.handleMultiLocalCommand(command, multiAccountManager); } catch (IOException e) { throw new IOErrorException("Failed to load local accounts file", e); + } catch (AccountCheckException e) { + throw new UnexpectedErrorException("Failed to load account file", e); } } private RegistrationManager loadRegistrationManager( - final String account, final SignalAccountFiles signalAccountFiles + final String account, + final SignalAccountFiles signalAccountFiles ) throws UnexpectedErrorException { try { return signalAccountFiles.initRegistrationManager(account); @@ -306,7 +312,8 @@ public class App { } private Manager loadManager( - final String account, final SignalAccountFiles signalAccountFiles + final String account, + final SignalAccountFiles signalAccountFiles ) throws CommandException { logger.trace("Loading account file for {}", account); try { @@ -331,24 +338,6 @@ public class App { } } - private void initDbusClient( - final Command command, final String account, final boolean systemBus, final CommandHandler commandHandler - ) throws CommandException { - try { - final var busType = systemBus ? DBusConnection.DBusBusType.SYSTEM : DBusConnection.DBusBusType.SESSION; - try (var dBusConn = DBusConnectionBuilder.forType(busType).build()) { - DbusCommandHandler.handleCommand(command, account, dBusConn, commandHandler); - } - } catch (ServiceUnknown e) { - throw new UserErrorException("signal-cli DBus daemon not running on " - + (systemBus ? "system" : "session") - + " bus: " - + e.getMessage(), e); - } catch (DBusExecutionException | DBusException | IOException e) { - throw new UnexpectedErrorException("Dbus client failed: " + e.getMessage(), e); - } - } - /** * @return the default data directory to be used by signal-cli. */