]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java
Refactor manager update profile method
[signal-cli] / src / main / java / org / asamk / signal / dbus / DbusManagerImpl.java
index 29889c3d32fc5106a96b38629fda21e716bc5aaf..320a8533f8a63ff5b9b285e32bb147cbcf5ce401 100644 (file)
@@ -22,6 +22,7 @@ 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;
@@ -32,6 +33,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;
@@ -137,19 +139,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
@@ -387,6 +383,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());
@@ -547,14 +550,32 @@ public class DbusManagerImpl implements Manager {
     }
 
     @Override
-    public List<Pair<RecipientAddress, Contact>> getContacts() {
-        return signal.listNumbers().stream().map(n -> {
+    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 (contactName.length() == 0) {
+            if (onlyContacts && contactName.length() == 0) {
+                return null;
+            }
+            if (name.isPresent() && !name.get().equals(contactName)) {
                 return null;
             }
-            return new Pair<>(new RecipientAddress(null, n),
-                    new Contact(contactName, null, 0, signal.isContactBlocked(n), false));
+            return Recipient.newBuilder()
+                    .withAddress(new RecipientAddress(null, n))
+                    .withContact(new Contact(contactName, null, 0, contactBlocked, false, false))
+                    .build();
         }).filter(Objects::nonNull).toList();
     }