]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java
Wrap ignoreAttachments option in a ReceiveConfig record
[signal-cli] / src / main / java / org / asamk / signal / dbus / DbusManagerImpl.java
index a7152a525a7bc89e8bf80f898a4af452b3243e71..822bb14bf6d008510a02731d2bacaa37fa9f0c6f 100644 (file)
@@ -12,8 +12,9 @@ import org.asamk.signal.manager.api.InactiveGroupLinkException;
 import org.asamk.signal.manager.api.InvalidDeviceLinkException;
 import org.asamk.signal.manager.api.Message;
 import org.asamk.signal.manager.api.MessageEnvelope;
-import org.asamk.signal.manager.api.NotMasterDeviceException;
+import org.asamk.signal.manager.api.NotPrimaryDeviceException;
 import org.asamk.signal.manager.api.Pair;
+import org.asamk.signal.manager.api.ReceiveConfig;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.api.SendGroupMessageResults;
 import org.asamk.signal.manager.api.SendMessageResults;
@@ -22,6 +23,8 @@ import org.asamk.signal.manager.api.StickerPackInvalidException;
 import org.asamk.signal.manager.api.StickerPackUrl;
 import org.asamk.signal.manager.api.TypingAction;
 import org.asamk.signal.manager.api.UpdateGroup;
+import org.asamk.signal.manager.api.UpdateProfile;
+import org.asamk.signal.manager.api.UserStatus;
 import org.asamk.signal.manager.groups.GroupId;
 import org.asamk.signal.manager.groups.GroupInviteLinkUrl;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
@@ -31,6 +34,7 @@ import org.asamk.signal.manager.groups.LastGroupAdminException;
 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.Recipient;
 import org.asamk.signal.manager.storage.recipients.RecipientAddress;
 import org.freedesktop.dbus.DBusMap;
 import org.freedesktop.dbus.DBusPath;
@@ -46,13 +50,14 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.time.Duration;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
-import java.util.UUID;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.function.Function;
 import java.util.function.Supplier;
@@ -86,14 +91,16 @@ public class DbusManagerImpl implements Manager {
     }
 
     @Override
-    public Map<String, Pair<String, UUID>> areUsersRegistered(final Set<String> numbers) throws IOException {
+    public Map<String, UserStatus> getUserStatus(final Set<String> numbers) throws IOException {
         final var numbersList = new ArrayList<>(numbers);
         final var registered = signal.isRegistered(numbersList);
 
-        final var result = new HashMap<String, Pair<String, UUID>>();
+        final var result = new HashMap<String, UserStatus>();
         for (var i = 0; i < numbersList.size(); i++) {
             result.put(numbersList.get(i),
-                    new Pair<>(numbersList.get(i), registered.get(i) ? RecipientAddress.UNKNOWN_UUID : null));
+                    new UserStatus(numbersList.get(i),
+                            registered.get(i) ? RecipientAddress.UNKNOWN_UUID : null,
+                            false));
         }
         return result;
     }
@@ -133,19 +140,13 @@ public class DbusManagerImpl implements Manager {
     }
 
     @Override
-    public void setProfile(
-            final String givenName,
-            final String familyName,
-            final String about,
-            final String aboutEmoji,
-            final Optional<File> avatar
-    ) throws IOException {
-        signal.updateProfile(emptyIfNull(givenName),
-                emptyIfNull(familyName),
-                emptyIfNull(about),
-                emptyIfNull(aboutEmoji),
-                avatar == null ? "" : avatar.map(File::getPath).orElse(""),
-                avatar != null && avatar.isEmpty());
+    public void updateProfile(UpdateProfile updateProfile) throws IOException {
+        signal.updateProfile(emptyIfNull(updateProfile.getGivenName()),
+                emptyIfNull(updateProfile.getFamilyName()),
+                emptyIfNull(updateProfile.getAbout()),
+                emptyIfNull(updateProfile.getAboutEmoji()),
+                updateProfile.getAvatar() == null ? "" : updateProfile.getAvatar().getPath(),
+                updateProfile.isDeleteAvatar());
     }
 
     @Override
@@ -169,7 +170,7 @@ public class DbusManagerImpl implements Manager {
         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()).intValue(),
+            return new Device((Integer) device.get("Id").getValue(),
                     (String) device.get("Name").getValue(),
                     (long) device.get("Created").getValue(),
                     (long) device.get("LastSeen").getValue(),
@@ -383,6 +384,13 @@ public class DbusManagerImpl implements Manager {
                         groupId));
     }
 
+    @Override
+    public SendMessageResults sendPaymentNotificationMessage(
+            final byte[] receipt, final String note, final RecipientIdentifier.Single recipient
+    ) throws IOException {
+        throw new UnsupportedOperationException();
+    }
+
     @Override
     public SendMessageResults sendEndSessionMessage(final Set<RecipientIdentifier.Single> recipients) throws IOException {
         signal.sendEndSessionMessage(recipients.stream().map(RecipientIdentifier.Single::getIdentifier).toList());
@@ -402,22 +410,26 @@ public class DbusManagerImpl implements Manager {
     @Override
     public void setContactName(
             final RecipientIdentifier.Single recipient, final String name
-    ) throws NotMasterDeviceException {
+    ) throws NotPrimaryDeviceException {
         signal.setContactName(recipient.getIdentifier(), name);
     }
 
     @Override
-    public void setContactBlocked(
-            final RecipientIdentifier.Single recipient, final boolean blocked
-    ) throws NotMasterDeviceException, IOException {
-        signal.setContactBlocked(recipient.getIdentifier(), blocked);
+    public void setContactsBlocked(
+            final Collection<RecipientIdentifier.Single> recipients, final boolean blocked
+    ) throws NotPrimaryDeviceException, IOException {
+        for (final var recipient : recipients) {
+            signal.setContactBlocked(recipient.getIdentifier(), blocked);
+        }
     }
 
     @Override
-    public void setGroupBlocked(
-            final GroupId groupId, final boolean blocked
+    public void setGroupsBlocked(
+            final Collection<GroupId> groupIds, final boolean blocked
     ) throws GroupNotFoundException, IOException {
-        setGroupProperty(groupId, "IsBlocked", blocked);
+        for (final var groupId : groupIds) {
+            setGroupProperty(groupId, "IsBlocked", blocked);
+        }
     }
 
     private void setGroupProperty(final GroupId groupId, final String propertyName, final boolean blocked) {
@@ -520,7 +532,7 @@ public class DbusManagerImpl implements Manager {
     }
 
     @Override
-    public void setIgnoreAttachments(final boolean ignoreAttachments) {
+    public void setReceiveConfig(final ReceiveConfig receiveConfig) {
     }
 
     @Override
@@ -539,8 +551,33 @@ public class DbusManagerImpl implements Manager {
     }
 
     @Override
-    public List<Pair<RecipientAddress, Contact>> getContacts() {
-        throw new UnsupportedOperationException();
+    public List<Recipient> getRecipients(
+            final boolean onlyContacts,
+            final Optional<Boolean> blocked,
+            final Collection<RecipientIdentifier.Single> addresses,
+            final Optional<String> name
+    ) {
+        final var numbers = addresses.stream()
+                .filter(s -> s instanceof RecipientIdentifier.Number)
+                .map(s -> ((RecipientIdentifier.Number) s).number())
+                .collect(Collectors.toSet());
+        return signal.listNumbers().stream().filter(n -> addresses.isEmpty() || numbers.contains(n)).map(n -> {
+            final var contactBlocked = signal.isContactBlocked(n);
+            if (blocked.isPresent() && blocked.get() != contactBlocked) {
+                return null;
+            }
+            final var contactName = signal.getContactName(n);
+            if (onlyContacts && contactName.length() == 0) {
+                return null;
+            }
+            if (name.isPresent() && !name.get().equals(contactName)) {
+                return null;
+            }
+            return Recipient.newBuilder()
+                    .withAddress(new RecipientAddress(null, n))
+                    .withContact(new Contact(contactName, null, null, 0, contactBlocked, false, false))
+                    .build();
+        }).filter(Objects::nonNull).toList();
     }
 
     @Override
@@ -575,6 +612,9 @@ public class DbusManagerImpl implements Manager {
                     ((List<String>) group.get("Admins").getValue()).stream()
                             .map(m -> new RecipientAddress(null, m))
                             .collect(Collectors.toSet()),
+                    ((List<String>) group.get("Banned").getValue()).stream()
+                            .map(m -> new RecipientAddress(null, m))
+                            .collect(Collectors.toSet()),
                     (boolean) group.get("IsBlocked").getValue(),
                     (int) group.get("MessageExpirationTimer").getValue(),
                     GroupPermission.valueOf((String) group.get("PermissionAddMember").getValue()),
@@ -621,6 +661,10 @@ public class DbusManagerImpl implements Manager {
         throw new UnsupportedOperationException();
     }
 
+    @Override
+    public void addAddressChangedListener(final Runnable listener) {
+    }
+
     @Override
     public void addClosedListener(final Runnable listener) {
         synchronized (closedListeners) {
@@ -771,7 +815,7 @@ public class DbusManagerImpl implements Manager {
                                         ? Optional.empty()
                                         : Optional.of(new RecipientAddress(null, syncReceived.getDestination())),
                                 Set.of(),
-                                new MessageEnvelope.Data(syncReceived.getTimestamp(),
+                                Optional.of(new MessageEnvelope.Data(syncReceived.getTimestamp(),
                                         syncReceived.getGroupId().length > 0
                                                 ? Optional.of(new MessageEnvelope.Data.GroupContext(GroupId.unknownVersion(
                                                 syncReceived.getGroupId()), false, 0))
@@ -791,7 +835,7 @@ public class DbusManagerImpl implements Manager {
                                         Optional.empty(),
                                         List.of(),
                                         List.of(),
-                                        List.of()))),
+                                        List.of())))),
                                 Optional.empty(),
                                 List.of(),
                                 List.of(),