]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/dbus/DbusReceiveMessageHandler.java
Use .isEmpty() for checking lists and strings
[signal-cli] / src / main / java / org / asamk / signal / dbus / DbusReceiveMessageHandler.java
index c7cb2ab7f42a5d2c87ba130d4b5774f61402074b..0ce114cd59e3a78c8be341d4c112658f3fa62814 100644 (file)
@@ -2,9 +2,9 @@ package org.asamk.signal.dbus;
 
 import org.asamk.Signal;
 import org.asamk.signal.manager.Manager;
+import org.asamk.signal.manager.api.GroupId;
 import org.asamk.signal.manager.api.MessageEnvelope;
-import org.asamk.signal.manager.groups.GroupId;
-import org.asamk.signal.manager.storage.recipients.RecipientAddress;
+import org.asamk.signal.manager.api.RecipientAddress;
 import org.freedesktop.dbus.connections.impl.DBusConnection;
 import org.freedesktop.dbus.exceptions.DBusException;
 import org.freedesktop.dbus.types.Variant;
@@ -14,16 +14,13 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 public class DbusReceiveMessageHandler implements Manager.ReceiveMessageHandler {
 
-    private final Manager m;
     private final DBusConnection conn;
     private final String objectPath;
 
-    public DbusReceiveMessageHandler(Manager m, DBusConnection conn, final String objectPath) {
-        this.m = m;
+    public DbusReceiveMessageHandler(DBusConnection conn, final String objectPath) {
         this.conn = conn;
         this.objectPath = objectPath;
     }
@@ -77,32 +74,55 @@ public class DbusReceiveMessageHandler implements Manager.ReceiveMessageHandler
                         getMessageExtras(message)));
             }
         }
+        if (envelope.edit().isPresent()) {
+            var editMessage = envelope.edit().get();
+            var message = editMessage.dataMessage();
+
+            var groupId = message.groupContext()
+                    .map(MessageEnvelope.Data.GroupContext::groupId)
+                    .map(GroupId::serialize)
+                    .orElseGet(() -> new byte[0]);
+            var isGroupUpdate = message.groupContext()
+                    .map(MessageEnvelope.Data.GroupContext::isGroupUpdate)
+                    .orElse(false);
+            if (!message.isEndSession() && !isGroupUpdate) {
+                conn.sendMessage(new Signal.EditMessageReceived(objectPath,
+                        message.timestamp(),
+                        editMessage.targetSentTimestamp(),
+                        senderString,
+                        groupId,
+                        message.body().orElse(""),
+                        getMessageExtras(message)));
+            }
+        }
         if (envelope.sync().isPresent()) {
             var syncMessage = envelope.sync().get();
             if (syncMessage.sent().isPresent()) {
                 var transcript = syncMessage.sent().get();
 
-                if (transcript.destination().isPresent() || transcript.message().groupContext().isPresent()) {
-                    var message = transcript.message();
-                    var groupId = message.groupContext()
-                            .map(MessageEnvelope.Data.GroupContext::groupId)
-                            .map(GroupId::serialize)
-                            .orElseGet(() -> new byte[0]);
-
-                    conn.sendMessage(new Signal.SyncMessageReceived(objectPath,
-                            transcript.message().timestamp(),
-                            senderString,
-                            transcript.destination().map(RecipientAddress::getLegacyIdentifier).orElse(""),
-                            groupId,
-                            message.body().orElse(""),
-                            getAttachments(message)));
-                    conn.sendMessage(new Signal.SyncMessageReceivedV2(objectPath,
-                            transcript.message().timestamp(),
-                            senderString,
-                            transcript.destination().map(RecipientAddress::getLegacyIdentifier).orElse(""),
-                            groupId,
-                            message.body().orElse(""),
-                            getMessageExtras(message)));
+                if (transcript.message().isPresent()) {
+                    final var dataMessage = transcript.message().get();
+                    if (transcript.destination().isPresent() || dataMessage.groupContext().isPresent()) {
+                        var groupId = dataMessage.groupContext()
+                                .map(MessageEnvelope.Data.GroupContext::groupId)
+                                .map(GroupId::serialize)
+                                .orElseGet(() -> new byte[0]);
+
+                        conn.sendMessage(new Signal.SyncMessageReceived(objectPath,
+                                dataMessage.timestamp(),
+                                senderString,
+                                transcript.destination().map(RecipientAddress::getLegacyIdentifier).orElse(""),
+                                groupId,
+                                dataMessage.body().orElse(""),
+                                getAttachments(dataMessage)));
+                        conn.sendMessage(new Signal.SyncMessageReceivedV2(objectPath,
+                                dataMessage.timestamp(),
+                                senderString,
+                                transcript.destination().map(RecipientAddress::getLegacyIdentifier).orElse(""),
+                                groupId,
+                                dataMessage.body().orElse(""),
+                                getMessageExtras(dataMessage)));
+                    }
                 }
             }
         }
@@ -111,7 +131,7 @@ public class DbusReceiveMessageHandler implements Manager.ReceiveMessageHandler
 
     private List<String> getAttachments(MessageEnvelope.Data message) {
         var attachments = new ArrayList<String>();
-        if (message.attachments().size() > 0) {
+        if (!message.attachments().isEmpty()) {
             for (var attachment : message.attachments()) {
                 if (attachment.file().isPresent()) {
                     attachments.add(attachment.file().get().getAbsolutePath());
@@ -123,16 +143,16 @@ public class DbusReceiveMessageHandler implements Manager.ReceiveMessageHandler
 
     private HashMap<String, Variant<?>> getMessageExtras(MessageEnvelope.Data message) {
         var extras = new HashMap<String, Variant<?>>();
-        if (message.attachments().size() > 0) {
+        if (!message.attachments().isEmpty()) {
             var attachments = message.attachments()
                     .stream()
                     .filter(a -> a.id().isPresent())
-                    .map(a -> getAttachmentMap(m, a))
-                    .collect(Collectors.toList());
+                    .map(this::getAttachmentMap)
+                    .toList();
             extras.put("attachments", new Variant<>(attachments, "aa{sv}"));
         }
-        if (message.mentions().size() > 0) {
-            var mentions = message.mentions().stream().map(this::getMentionMap).collect(Collectors.toList());
+        if (!message.mentions().isEmpty()) {
+            var mentions = message.mentions().stream().map(this::getMentionMap).toList();
             extras.put("mentions", new Variant<>(mentions, "aa{sv}"));
         }
         extras.put("expiresInSeconds", new Variant<>(message.expiresInSeconds()));
@@ -165,7 +185,10 @@ public class DbusReceiveMessageHandler implements Manager.ReceiveMessageHandler
     }
 
     private Map<String, Variant<? extends Serializable>> getStickerMap(final MessageEnvelope.Data.Sticker sticker) {
-        return Map.of("packId", new Variant<>(sticker.packId()), "stickerId", new Variant<>(sticker.stickerId()));
+        return Map.of("packId",
+                new Variant<>(sticker.packId().serialize()),
+                "stickerId",
+                new Variant<>(sticker.stickerId()));
     }
 
     private Map<String, Variant<?>> getReactionMap(final MessageEnvelope.Data.Reaction reaction) {
@@ -180,7 +203,7 @@ public class DbusReceiveMessageHandler implements Manager.ReceiveMessageHandler
     }
 
     private Map<String, Variant<?>> getAttachmentMap(
-            final Manager m, final MessageEnvelope.Data.Attachment a
+            final MessageEnvelope.Data.Attachment a
     ) {
         final var map = new HashMap<String, Variant<?>>();
         if (a.id().isPresent()) {