X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/593cd7d8ca6e8e0ab654accfd7e3c9d2ee01b001..3c40b11:/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java diff --git a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java index b9f5ae11..226402dd 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java @@ -1,6 +1,7 @@ package org.asamk.signal.dbus; import org.asamk.Signal; +import org.asamk.signal.DbusConfig; import org.asamk.signal.manager.AttachmentInvalidException; import org.asamk.signal.manager.Manager; import org.asamk.signal.manager.NotMasterDeviceException; @@ -25,6 +26,10 @@ import org.asamk.signal.manager.groups.NotAGroupMemberException; import org.asamk.signal.manager.storage.recipients.Contact; import org.asamk.signal.manager.storage.recipients.Profile; import org.asamk.signal.manager.storage.recipients.RecipientAddress; +import org.freedesktop.dbus.DBusPath; +import org.freedesktop.dbus.connections.impl.DBusConnection; +import org.freedesktop.dbus.exceptions.DBusException; +import org.freedesktop.dbus.interfaces.DBusInterface; import org.whispersystems.libsignal.IdentityKey; import org.whispersystems.libsignal.InvalidKeyException; import org.whispersystems.libsignal.util.Pair; @@ -58,9 +63,11 @@ import java.util.stream.Collectors; public class DbusManagerImpl implements Manager { private final Signal signal; + private final DBusConnection connection; - public DbusManagerImpl(final Signal signal) { + public DbusManagerImpl(final Signal signal, DBusConnection connection) { this.signal = signal; + this.connection = connection; } @Override @@ -89,10 +96,31 @@ public class DbusManagerImpl implements Manager { @Override public void updateAccountAttributes(final String deviceName) throws IOException { if (deviceName != null) { - signal.updateDeviceName(deviceName); + final var devicePath = signal.getThisDevice(); + getRemoteObject(devicePath, Signal.Device.class).Set("org.asamk.Signal.Device", "Name", deviceName); } } + @Override + public void updateConfiguration( + final Boolean readReceipts, + final Boolean unidentifiedDeliveryIndicators, + final Boolean typingIndicators, + final Boolean linkPreviews + ) throws IOException { + signal.setConfiguration( + readReceipts, + unidentifiedDeliveryIndicators, + typingIndicators, + linkPreviews + ); + } + + @Override + public List getConfiguration() { + return signal.getConfiguration(); + } + @Override public void setProfile( final String givenName, @@ -126,15 +154,22 @@ public class DbusManagerImpl implements Manager { @Override public List getLinkedDevices() throws IOException { - return signal.listDevices() - .stream() - .map(name -> new Device(-1, name, 0, 0, false)) - .collect(Collectors.toList()); + final var thisDevice = signal.getThisDevice(); + return signal.listDevices().stream().map(d -> { + final var device = getRemoteObject(d.getObjectPath(), + Signal.Device.class).GetAll("org.asamk.Signal.Device"); + return new Device((long) device.get("Id").getValue(), + (String) device.get("Name").getValue(), + (long) device.get("Created").getValue(), + (long) device.get("LastSeen").getValue(), + thisDevice.equals(d.getObjectPath())); + }).collect(Collectors.toList()); } @Override - public void removeLinkedDevices(final int deviceId) throws IOException { - signal.removeDevice(deviceId); + public void removeLinkedDevices(final long deviceId) throws IOException { + final var devicePath = signal.getDevice(deviceId); + getRemoteObject(devicePath, Signal.Device.class).removeDevice(); } @Override @@ -484,4 +519,12 @@ public class DbusManagerImpl implements Manager { private String emptyIfNull(final String string) { return string == null ? "" : string; } + + private T getRemoteObject(final DBusPath devicePath, final Class type) { + try { + return connection.getRemoteObject(DbusConfig.getBusname(), devicePath.getPath(), type); + } catch (DBusException e) { + throw new AssertionError(e); + } + } }