X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/d51dd7ae575222b0baea7265c18ebc79f4a7b001..e2f308a57a5d5162c4820fbc4daa06f72e16a1ab:/src/main/java/org/asamk/signal/dbus/DbusCommandHandler.java diff --git a/src/main/java/org/asamk/signal/dbus/DbusCommandHandler.java b/src/main/java/org/asamk/signal/dbus/DbusCommandHandler.java index 6e7a6ee1..4f320ad8 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusCommandHandler.java +++ b/src/main/java/org/asamk/signal/dbus/DbusCommandHandler.java @@ -13,12 +13,34 @@ import org.asamk.signal.commands.exceptions.CommandException; import org.asamk.signal.commands.exceptions.UnexpectedErrorException; import org.asamk.signal.commands.exceptions.UserErrorException; import org.freedesktop.dbus.connections.impl.DBusConnection; +import org.freedesktop.dbus.connections.impl.DBusConnectionBuilder; +import org.freedesktop.dbus.errors.ServiceUnknown; import org.freedesktop.dbus.errors.UnknownMethod; import org.freedesktop.dbus.exceptions.DBusException; import org.freedesktop.dbus.exceptions.DBusExecutionException; +import java.io.IOException; + public class DbusCommandHandler { + public static 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()) { + 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); + } + } + public static void handleCommand( final Command command, final String account, @@ -72,7 +94,7 @@ public class DbusCommandHandler { "Multiple users found, you need to specify an account (phone number) with -a"); } - return accounts.get(0).getPath(); + return accounts.getFirst().getPath(); } catch (UnknownMethod e) { // dbus daemon not running in multi-account mode return null;