]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java
Refactor set blocked methods to accept multiple recipientIds/groupIds
[signal-cli] / src / main / java / org / asamk / signal / dbus / DbusSignalImpl.java
index 68218947b57fd4e94b9a1bbe4c21b53063710d3b..b4485e3293bfa7523fbcc181d713e4df8917f851 100644 (file)
@@ -2,23 +2,24 @@ package org.asamk.signal.dbus;
 
 import org.asamk.Signal;
 import org.asamk.signal.BaseConfig;
-import org.asamk.signal.manager.AttachmentInvalidException;
 import org.asamk.signal.manager.Manager;
-import org.asamk.signal.manager.NotMasterDeviceException;
-import org.asamk.signal.manager.StickerPackInvalidException;
+import org.asamk.signal.manager.api.AttachmentInvalidException;
 import org.asamk.signal.manager.api.Identity;
 import org.asamk.signal.manager.api.InactiveGroupLinkException;
 import org.asamk.signal.manager.api.InvalidDeviceLinkException;
 import org.asamk.signal.manager.api.InvalidNumberException;
 import org.asamk.signal.manager.api.InvalidStickerException;
 import org.asamk.signal.manager.api.Message;
+import org.asamk.signal.manager.api.NotMasterDeviceException;
 import org.asamk.signal.manager.api.Pair;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.api.SendMessageResult;
 import org.asamk.signal.manager.api.SendMessageResults;
+import org.asamk.signal.manager.api.StickerPackInvalidException;
 import org.asamk.signal.manager.api.TypingAction;
 import org.asamk.signal.manager.api.UnregisteredRecipientException;
 import org.asamk.signal.manager.api.UpdateGroup;
+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.GroupLinkState;
@@ -53,7 +54,6 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
-import java.util.UUID;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -79,12 +79,22 @@ public class DbusSignalImpl implements Signal {
         this.connection = connection;
         this.objectPath = objectPath;
         this.noReceiveOnStart = noReceiveOnStart;
+
+        m.addAddressChangedListener(() -> {
+            unExportObjects();
+            exportObjects();
+        });
     }
 
     public void initObjects() {
+        exportObjects();
         if (!noReceiveOnStart) {
             subscribeReceive();
         }
+    }
+
+    private void exportObjects() {
+        exportObject(this);
 
         updateDevices();
         updateGroups();
@@ -96,9 +106,14 @@ public class DbusSignalImpl implements Signal {
             m.removeReceiveHandler(dbusMessageHandler);
             dbusMessageHandler = null;
         }
+        unExportObjects();
+    }
+
+    private void unExportObjects() {
         unExportDevices();
         unExportGroups();
         unExportConfiguration();
+        connection.unExportObject(this.objectPath);
     }
 
     @Override
@@ -501,7 +516,7 @@ public class DbusSignalImpl implements Signal {
     @Override
     public void setContactBlocked(final String number, final boolean blocked) {
         try {
-            m.setContactBlocked(getSingleRecipientIdentifier(number, m.getSelfNumber()), blocked);
+            m.setContactsBlocked(List.of(getSingleRecipientIdentifier(number, m.getSelfNumber())), blocked);
         } catch (NotMasterDeviceException e) {
             throw new Error.Failure("This command doesn't work on linked devices.");
         } catch (IOException e) {
@@ -514,7 +529,7 @@ public class DbusSignalImpl implements Signal {
     @Override
     public void setGroupBlocked(final byte[] groupId, final boolean blocked) {
         try {
-            m.setGroupBlocked(getGroupId(groupId), blocked);
+            m.setGroupsBlocked(List.of(getGroupId(groupId)), blocked);
         } catch (NotMasterDeviceException e) {
             throw new Error.Failure("This command doesn't work on linked devices.");
         } catch (GroupNotFoundException e) {
@@ -626,17 +641,14 @@ public class DbusSignalImpl implements Signal {
             return List.of();
         }
 
-        Map<String, Pair<String, UUID>> registered;
+        Map<String, UserStatus> registered;
         try {
-            registered = m.areUsersRegistered(new HashSet<>(numbers));
+            registered = m.getUserStatus(new HashSet<>(numbers));
         } catch (IOException e) {
             throw new Error.Failure(e.getMessage());
         }
 
-        return numbers.stream().map(number -> {
-            var uuid = registered.get(number).second();
-            return uuid != null;
-        }).toList();
+        return numbers.stream().map(number -> registered.get(number).uuid() != null).toList();
     }
 
     @Override
@@ -859,7 +871,7 @@ public class DbusSignalImpl implements Signal {
         }
 
         var errors = SendMessageResultUtils.getErrorMessagesFromSendMessageResults(results);
-        if (errors.size() < results.size()) {
+        if (errors.size() == 0 || errors.size() < results.size()) {
             return;
         }
 
@@ -942,7 +954,7 @@ public class DbusSignalImpl implements Signal {
             if (d.isThisDevice()) {
                 thisDevice = new DBusPath(deviceObjectPath);
             }
-            this.devices.add(new StructDevice(new DBusPath(deviceObjectPath), d.id(), emptyIfNull(d.name())));
+            this.devices.add(new StructDevice(new DBusPath(deviceObjectPath), (long) d.id(), emptyIfNull(d.name())));
         });
     }
 
@@ -1147,6 +1159,8 @@ public class DbusSignalImpl implements Signal {
                                     () -> new Variant<>(getRecipientStrings(getGroup().requestingMembers()), "as")),
                             new DbusProperty<>("Admins",
                                     () -> new Variant<>(getRecipientStrings(getGroup().adminMembers()), "as")),
+                            new DbusProperty<>("Banned",
+                                    () -> new Variant<>(getRecipientStrings(getGroup().bannedMembers()), "as")),
                             new DbusProperty<>("PermissionAddMember",
                                     () -> getGroup().permissionAddMember().name(),
                                     this::setGroupPermissionAddMember),
@@ -1273,7 +1287,7 @@ public class DbusSignalImpl implements Signal {
 
         private void setIsBlocked(final boolean isBlocked) {
             try {
-                m.setGroupBlocked(groupId, isBlocked);
+                m.setGroupsBlocked(List.of(groupId), isBlocked);
             } catch (NotMasterDeviceException e) {
                 throw new Error.Failure("This command doesn't work on linked devices.");
             } catch (GroupNotFoundException e) {