]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java
Implement more methods for DbusManagerImpl
[signal-cli] / src / main / java / org / asamk / signal / dbus / DbusManagerImpl.java
index b61ca1358f93de03ada08e9b2d54fa6982c49a8e..df21d94d61722ad6c8767ad02e324dc256b62c07 100644 (file)
@@ -6,7 +6,6 @@ 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.UntrustedIdentityException;
 import org.asamk.signal.manager.api.Configuration;
 import org.asamk.signal.manager.api.Device;
 import org.asamk.signal.manager.api.Group;
@@ -111,12 +110,28 @@ public class DbusManagerImpl implements Manager {
 
     @Override
     public Configuration getConfiguration() {
-        throw new UnsupportedOperationException();
+        final var configuration = getRemoteObject(new DBusPath(signal.getObjectPath() + "/Configuration"),
+                Signal.Configuration.class).GetAll("org.asamk.Signal.Configuration");
+        return new Configuration(Optional.of((Boolean) configuration.get("ReadReceipts").getValue()),
+                Optional.of((Boolean) configuration.get("UnidentifiedDeliveryIndicators").getValue()),
+                Optional.of((Boolean) configuration.get("TypingIndicators").getValue()),
+                Optional.of((Boolean) configuration.get("LinkPreviews").getValue()));
     }
 
     @Override
-    public void updateConfiguration(Configuration configuration) throws IOException {
-        throw new UnsupportedOperationException();
+    public void updateConfiguration(Configuration newConfiguration) throws IOException {
+        final var configuration = getRemoteObject(new DBusPath(signal.getObjectPath() + "/Configuration"),
+                Signal.Configuration.class);
+        newConfiguration.readReceipts()
+                .ifPresent(v -> configuration.Set("org.asamk.Signal.Configuration", "ReadReceipts", v));
+        newConfiguration.unidentifiedDeliveryIndicators()
+                .ifPresent(v -> configuration.Set("org.asamk.Signal.Configuration",
+                        "UnidentifiedDeliveryIndicators",
+                        v));
+        newConfiguration.typingIndicators()
+                .ifPresent(v -> configuration.Set("org.asamk.Signal.Configuration", "TypingIndicators", v));
+        newConfiguration.linkPreviews()
+                .ifPresent(v -> configuration.Set("org.asamk.Signal.Configuration", "LinkPreviews", v));
     }
 
     @Override
@@ -132,17 +147,17 @@ public class DbusManagerImpl implements Manager {
                 emptyIfNull(about),
                 emptyIfNull(aboutEmoji),
                 avatar == null ? "" : avatar.map(File::getPath).orElse(""),
-                avatar != null && !avatar.isPresent());
+                avatar != null && avatar.isEmpty());
     }
 
     @Override
     public void unregister() throws IOException {
-        throw new UnsupportedOperationException();
+        signal.unregister();
     }
 
     @Override
     public void deleteAccount() throws IOException {
-        throw new UnsupportedOperationException();
+        signal.deleteAccount();
     }
 
     @Override
@@ -161,7 +176,7 @@ public class DbusManagerImpl implements Manager {
                     (long) device.get("Created").getValue(),
                     (long) device.get("LastSeen").getValue(),
                     thisDevice.equals(d.getObjectPath()));
-        }).collect(Collectors.toList());
+        }).toList();
     }
 
     @Override
@@ -192,7 +207,7 @@ public class DbusManagerImpl implements Manager {
     @Override
     public List<Group> getGroups() {
         final var groups = signal.listGroups();
-        return groups.stream().map(Signal.StructGroup::getObjectPath).map(this::getGroup).collect(Collectors.toList());
+        return groups.stream().map(Signal.StructGroup::getObjectPath).map(this::getGroup).toList();
     }
 
     @Override
@@ -209,7 +224,8 @@ public class DbusManagerImpl implements Manager {
 
     @Override
     public void deleteGroup(final GroupId groupId) throws IOException {
-        throw new UnsupportedOperationException();
+        final var group = getRemoteObject(signal.getGroup(groupId.serialize()), Signal.Group.class);
+        group.deleteGroup();
     }
 
     @Override
@@ -217,7 +233,7 @@ public class DbusManagerImpl implements Manager {
             final String name, final Set<RecipientIdentifier.Single> members, final File avatarFile
     ) throws IOException, AttachmentInvalidException {
         final var newGroupId = signal.createGroup(emptyIfNull(name),
-                members.stream().map(RecipientIdentifier.Single::getIdentifier).collect(Collectors.toList()),
+                members.stream().map(RecipientIdentifier.Single::getIdentifier).toList(),
                 avatarFile == null ? "" : avatarFile.getPath());
         return new Pair<>(GroupId.unknownVersion(newGroupId), new SendGroupMessageResults(0, List.of()));
     }
@@ -255,28 +271,22 @@ public class DbusManagerImpl implements Manager {
                             : GroupPermission.EVERY_MEMBER.name());
         }
         if (updateGroup.getMembers() != null) {
-            group.addMembers(updateGroup.getMembers()
-                    .stream()
-                    .map(RecipientIdentifier.Single::getIdentifier)
-                    .collect(Collectors.toList()));
+            group.addMembers(updateGroup.getMembers().stream().map(RecipientIdentifier.Single::getIdentifier).toList());
         }
         if (updateGroup.getRemoveMembers() != null) {
             group.removeMembers(updateGroup.getRemoveMembers()
                     .stream()
                     .map(RecipientIdentifier.Single::getIdentifier)
-                    .collect(Collectors.toList()));
+                    .toList());
         }
         if (updateGroup.getAdmins() != null) {
-            group.addAdmins(updateGroup.getAdmins()
-                    .stream()
-                    .map(RecipientIdentifier.Single::getIdentifier)
-                    .collect(Collectors.toList()));
+            group.addAdmins(updateGroup.getAdmins().stream().map(RecipientIdentifier.Single::getIdentifier).toList());
         }
         if (updateGroup.getRemoveAdmins() != null) {
             group.removeAdmins(updateGroup.getRemoveAdmins()
                     .stream()
                     .map(RecipientIdentifier.Single::getIdentifier)
-                    .collect(Collectors.toList()));
+                    .toList());
         }
         if (updateGroup.isResetGroupLink()) {
             group.resetLink();
@@ -298,31 +308,35 @@ public class DbusManagerImpl implements Manager {
     }
 
     @Override
-    public void sendTypingMessage(
+    public SendMessageResults sendTypingMessage(
             final TypingAction action, final Set<RecipientIdentifier> recipients
-    ) throws IOException, UntrustedIdentityException, NotAGroupMemberException, GroupNotFoundException, GroupSendingNotAllowedException {
-        for (final var recipient : recipients) {
-            if (recipient instanceof RecipientIdentifier.Single) {
-                signal.sendTyping(((RecipientIdentifier.Single) recipient).getIdentifier(),
-                        action == TypingAction.STOP);
-            } else if (recipient instanceof RecipientIdentifier.Group) {
-                throw new UnsupportedOperationException();
-            }
-        }
+    ) throws IOException, NotAGroupMemberException, GroupNotFoundException, GroupSendingNotAllowedException {
+        return handleMessage(recipients, numbers -> {
+            numbers.forEach(n -> signal.sendTyping(n, action == TypingAction.STOP));
+            return 0L;
+        }, () -> {
+            signal.sendTyping(signal.getSelfNumber(), action == TypingAction.STOP);
+            return 0L;
+        }, groupId -> {
+            signal.sendGroupTyping(groupId, action == TypingAction.STOP);
+            return 0L;
+        });
     }
 
     @Override
-    public void sendReadReceipt(
+    public SendMessageResults sendReadReceipt(
             final RecipientIdentifier.Single sender, final List<Long> messageIds
-    ) throws IOException, UntrustedIdentityException {
+    ) {
         signal.sendReadReceipt(sender.getIdentifier(), messageIds);
+        return new SendMessageResults(0, Map.of());
     }
 
     @Override
-    public void sendViewedReceipt(
+    public SendMessageResults sendViewedReceipt(
             final RecipientIdentifier.Single sender, final List<Long> messageIds
-    ) throws IOException, UntrustedIdentityException {
+    ) {
         signal.sendViewedReceipt(sender.getIdentifier(), messageIds);
+        return new SendMessageResults(0, Map.of());
     }
 
     @Override
@@ -373,12 +387,20 @@ public class DbusManagerImpl implements Manager {
 
     @Override
     public SendMessageResults sendEndSessionMessage(final Set<RecipientIdentifier.Single> recipients) throws IOException {
-        signal.sendEndSessionMessage(recipients.stream()
-                .map(RecipientIdentifier.Single::getIdentifier)
-                .collect(Collectors.toList()));
+        signal.sendEndSessionMessage(recipients.stream().map(RecipientIdentifier.Single::getIdentifier).toList());
         return new SendMessageResults(0, Map.of());
     }
 
+    @Override
+    public void deleteRecipient(final RecipientIdentifier.Single recipient) throws IOException {
+        signal.deleteRecipient(recipient.getIdentifier());
+    }
+
+    @Override
+    public void deleteContact(final RecipientIdentifier.Single recipient) throws IOException {
+        signal.deleteContact(recipient.getIdentifier());
+    }
+
     @Override
     public void setContactName(
             final RecipientIdentifier.Single recipient, final String name
@@ -620,7 +642,7 @@ public class DbusManagerImpl implements Manager {
                 .filter(r -> r instanceof RecipientIdentifier.Single)
                 .map(RecipientIdentifier.Single.class::cast)
                 .map(RecipientIdentifier.Single::getIdentifier)
-                .collect(Collectors.toList());
+                .toList();
         if (singleRecipients.size() > 0) {
             timestamp = recipientsHandler.apply(singleRecipients);
         }
@@ -632,7 +654,7 @@ public class DbusManagerImpl implements Manager {
                 .filter(r -> r instanceof RecipientIdentifier.Group)
                 .map(RecipientIdentifier.Group.class::cast)
                 .map(RecipientIdentifier.Group::groupId)
-                .collect(Collectors.toList());
+                .toList();
         for (final var groupId : groupRecipients) {
             timestamp = groupHandler.apply(groupId.serialize());
         }
@@ -678,6 +700,7 @@ public class DbusManagerImpl implements Manager {
                                 false,
                                 Optional.empty(),
                                 Optional.empty(),
+                                Optional.empty(),
                                 getAttachments(extras),
                                 Optional.empty(),
                                 Optional.empty(),
@@ -747,6 +770,7 @@ public class DbusManagerImpl implements Manager {
                                         false,
                                         Optional.empty(),
                                         Optional.empty(),
+                                        Optional.empty(),
                                         getAttachments(extras),
                                         Optional.empty(),
                                         Optional.empty(),
@@ -772,9 +796,8 @@ public class DbusManagerImpl implements Manager {
 
     private void notifyMessageHandlers(final MessageEnvelope envelope) {
         synchronized (messageHandlers) {
-            Stream.concat(messageHandlers.stream(), weakHandlers.stream()).forEach(h -> {
-                h.handleMessage(envelope, null);
-            });
+            Stream.concat(messageHandlers.stream(), weakHandlers.stream())
+                    .forEach(h -> h.handleMessage(envelope, null));
         }
     }
 
@@ -813,7 +836,7 @@ public class DbusManagerImpl implements Manager {
                     getValue(a, "isVoiceNote"),
                     getValue(a, "isGif"),
                     getValue(a, "isBorderless"));
-        }).collect(Collectors.toList());
+        }).toList();
     }
 
     @SuppressWarnings("unchecked")