X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/2ae5297f7db07cae8c708cceac33481b7b13ddab..76fe6ad7999dee19ddbe80f518c62c4685ef95b4:/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 fdd88e7c..d9ffa622 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; @@ -165,20 +160,7 @@ public class App { return; } - Set accounts; - try { - accounts = signalAccountFiles.getAllLocalAccountNumbers(); - } catch (IOException e) { - throw new IOErrorException("Failed to load local accounts file", e); - } - if (accounts.size() == 0) { - throw new UserErrorException("No local users found, you first need to register or link an account"); - } else if (accounts.size() > 1) { - throw new UserErrorException( - "Multiple users found, you need to specify an account (phone number) with -a"); - } - - account = accounts.stream().findFirst().get(); + account = getAccountIfOnlyOne(signalAccountFiles); } else if (!Manager.isValidNumber(account, null)) { throw new UserErrorException("Invalid account (phone number), make sure you include the country code."); } @@ -190,11 +172,27 @@ public class App { if (command instanceof LocalCommand localCommand) { handleLocalCommand(localCommand, account, signalAccountFiles, commandHandler); + return; } throw new UserErrorException("Command only works in multi-account mode"); } + private static String getAccountIfOnlyOne(final SignalAccountFiles signalAccountFiles) throws IOErrorException, UserErrorException { + Set accounts; + try { + accounts = signalAccountFiles.getAllLocalAccountNumbers(); + } catch (IOException e) { + throw new IOErrorException("Failed to load local accounts file", e); + } + if (accounts.isEmpty()) { + throw new UserErrorException("No local users found, you first need to register or link an account"); + } else if (accounts.size() > 1) { + throw new UserErrorException("Multiple users found, you need to specify an account (phone number) with -a"); + } + return accounts.stream().findFirst().get(); + } + private OutputWriter getOutputWriter(final Command command) throws UserErrorException { final var outputTypeInput = ns.get("output"); final var outputType = outputTypeInput == null ? command.getSupportedOutputTypes() @@ -273,8 +271,6 @@ public class App { ) throws CommandException { try (var m = loadManager(account, signalAccountFiles)) { commandHandler.handleLocalCommand(command, m); - } catch (IOException e) { - logger.warn("Cleanup failed", e); } } @@ -330,24 +326,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. */