]> nmode's Git Repositories - signal-cli/commitdiff
Implement EditMessageReceived signal for dbus
authorAsamK <asamk@gmx.de>
Tue, 10 Oct 2023 18:21:40 +0000 (20:21 +0200)
committerAsamK <asamk@gmx.de>
Tue, 10 Oct 2023 18:21:40 +0000 (20:21 +0200)
graalvm-config-dir/reflect-config.json
src/main/java/org/asamk/Signal.java
src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java
src/main/java/org/asamk/signal/dbus/DbusReceiveMessageHandler.java

index 6aec194b1a56ef9e470764dfa3d8d0eaca60e5fb..1af2fbf047d7d463471e34a5352d343382e77dd2 100644 (file)
   "name":"org.asamk.Signal",
   "allDeclaredMethods":true,
   "allDeclaredClasses":true,
   "name":"org.asamk.Signal",
   "allDeclaredMethods":true,
   "allDeclaredClasses":true,
-  "methods":[{"name":"getSelfNumber","parameterTypes":[] }, {"name":"sendGroupMessageReaction","parameterTypes":["java.lang.String","boolean","java.lang.String","long","byte[]"] }, {"name":"sendMessage","parameterTypes":["java.lang.String","java.util.List","java.lang.String"] }, {"name":"sendMessageReaction","parameterTypes":["java.lang.String","boolean","java.lang.String","long","java.util.List"] }]
+  "methods":[{"name":"getSelfNumber","parameterTypes":[] }, {"name":"sendGroupMessageReaction","parameterTypes":["java.lang.String","boolean","java.lang.String","long","byte[]"] }, {"name":"sendMessage","parameterTypes":["java.lang.String","java.util.List","java.lang.String"] }, {"name":"sendMessageReaction","parameterTypes":["java.lang.String","boolean","java.lang.String","long","java.util.List"] }, {"name":"subscribeReceive","parameterTypes":[] }, {"name":"unsubscribeReceive","parameterTypes":[] }]
 },
 {
   "name":"org.asamk.Signal$Configuration",
 },
 {
   "name":"org.asamk.Signal$Configuration",
   "allDeclaredMethods":true,
   "allDeclaredClasses":true
 },
   "allDeclaredMethods":true,
   "allDeclaredClasses":true
 },
+{
+  "name":"org.asamk.Signal$EditMessageReceived",
+  "queryAllDeclaredConstructors":true,
+  "queryAllPublicConstructors":true
+},
 {
   "name":"org.asamk.Signal$Error$AttachmentInvalid",
   "methods":[{"name":"<init>","parameterTypes":["java.lang.String"] }]
 {
   "name":"org.asamk.Signal$Error$AttachmentInvalid",
   "methods":[{"name":"<init>","parameterTypes":["java.lang.String"] }]
index 9bffd6afd92016cf7c5d22435bd6e11fefc204a4..c4e3a26ef228f879cd142d94a42662ccc02bcde3 100644 (file)
@@ -235,6 +235,58 @@ public interface Signal extends DBusInterface {
         }
     }
 
         }
     }
 
+    class EditMessageReceived extends DBusSignal {
+
+        private final long timestamp;
+        private final long targetSentTimestamp;
+        private final String sender;
+        private final byte[] groupId;
+        private final String message;
+        private final Map<String, Variant<?>> extras;
+
+        public EditMessageReceived(
+                String objectpath,
+                long timestamp,
+                final long targetSentTimestamp,
+                String sender,
+                byte[] groupId,
+                String message,
+                final Map<String, Variant<?>> extras
+        ) throws DBusException {
+            super(objectpath, timestamp, targetSentTimestamp, sender, groupId, message, extras);
+            this.timestamp = timestamp;
+            this.targetSentTimestamp = targetSentTimestamp;
+            this.sender = sender;
+            this.groupId = groupId;
+            this.message = message;
+            this.extras = extras;
+        }
+
+        public long getTimestamp() {
+            return timestamp;
+        }
+
+        public long getTargetSentTimestamp() {
+            return targetSentTimestamp;
+        }
+
+        public String getSender() {
+            return sender;
+        }
+
+        public byte[] getGroupId() {
+            return groupId;
+        }
+
+        public String getMessage() {
+            return message;
+        }
+
+        public Map<String, Variant<?>> getExtras() {
+            return extras;
+        }
+    }
+
     class MessageReceived extends DBusSignal {
 
         private final long timestamp;
     class MessageReceived extends DBusSignal {
 
         private final long timestamp;
index 9b7908b7db3a798b733429a3534bc3fab99be892..d6cd52fa19739b5379bcbb5483dea24a7557e5a9 100644 (file)
@@ -83,6 +83,7 @@ public class DbusManagerImpl implements Manager {
     private final Set<ReceiveMessageHandler> messageHandlers = new HashSet<>();
     private final List<Runnable> closedListeners = new ArrayList<>();
     private DBusSigHandler<Signal.MessageReceivedV2> dbusMsgHandler;
     private final Set<ReceiveMessageHandler> messageHandlers = new HashSet<>();
     private final List<Runnable> closedListeners = new ArrayList<>();
     private DBusSigHandler<Signal.MessageReceivedV2> dbusMsgHandler;
+    private DBusSigHandler<Signal.EditMessageReceived> dbusEditMsgHandler;
     private DBusSigHandler<Signal.ReceiptReceivedV2> dbusRcptHandler;
     private DBusSigHandler<Signal.SyncMessageReceivedV2> dbusSyncHandler;
 
     private DBusSigHandler<Signal.ReceiptReceivedV2> dbusRcptHandler;
     private DBusSigHandler<Signal.SyncMessageReceivedV2> dbusSyncHandler;
 
@@ -799,6 +800,49 @@ public class DbusManagerImpl implements Manager {
                 notifyMessageHandlers(envelope);
             };
             connection.addSigHandler(Signal.MessageReceivedV2.class, signal, this.dbusMsgHandler);
                 notifyMessageHandlers(envelope);
             };
             connection.addSigHandler(Signal.MessageReceivedV2.class, signal, this.dbusMsgHandler);
+            this.dbusEditMsgHandler = messageReceived -> {
+                final var extras = messageReceived.getExtras();
+                final var envelope = new MessageEnvelope(Optional.of(new RecipientAddress(null,
+                        messageReceived.getSender())),
+                        0,
+                        messageReceived.getTimestamp(),
+                        0,
+                        0,
+                        false,
+                        Optional.empty(),
+                        Optional.empty(),
+                        Optional.empty(),
+                        Optional.of(new MessageEnvelope.Edit(messageReceived.getTargetSentTimestamp(),
+                                new MessageEnvelope.Data(messageReceived.getTimestamp(),
+                                        messageReceived.getGroupId().length > 0
+                                                ? Optional.of(new MessageEnvelope.Data.GroupContext(GroupId.unknownVersion(
+                                                messageReceived.getGroupId()), false, 0))
+                                                : Optional.empty(),
+                                        Optional.empty(),
+                                        Optional.empty(),
+                                        Optional.of(messageReceived.getMessage()),
+                                        0,
+                                        false,
+                                        false,
+                                        false,
+                                        false,
+                                        false,
+                                        Optional.empty(),
+                                        Optional.empty(),
+                                        Optional.empty(),
+                                        getAttachments(extras),
+                                        Optional.empty(),
+                                        Optional.empty(),
+                                        List.of(),
+                                        List.of(),
+                                        List.of(),
+                                        List.of()))),
+                        Optional.empty(),
+                        Optional.empty(),
+                        Optional.empty());
+                notifyMessageHandlers(envelope);
+            };
+            connection.addSigHandler(Signal.EditMessageReceived.class, signal, this.dbusEditMsgHandler);
 
             this.dbusRcptHandler = receiptReceived -> {
                 final var type = switch (receiptReceived.getReceiptType()) {
 
             this.dbusRcptHandler = receiptReceived -> {
                 final var type = switch (receiptReceived.getReceiptType()) {
@@ -901,6 +945,7 @@ public class DbusManagerImpl implements Manager {
         try {
             signal.unsubscribeReceive();
             connection.removeSigHandler(Signal.MessageReceivedV2.class, signal, this.dbusMsgHandler);
         try {
             signal.unsubscribeReceive();
             connection.removeSigHandler(Signal.MessageReceivedV2.class, signal, this.dbusMsgHandler);
+            connection.removeSigHandler(Signal.EditMessageReceived.class, signal, this.dbusEditMsgHandler);
             connection.removeSigHandler(Signal.ReceiptReceivedV2.class, signal, this.dbusRcptHandler);
             connection.removeSigHandler(Signal.SyncMessageReceivedV2.class, signal, this.dbusSyncHandler);
         } catch (DBusException e) {
             connection.removeSigHandler(Signal.ReceiptReceivedV2.class, signal, this.dbusRcptHandler);
             connection.removeSigHandler(Signal.SyncMessageReceivedV2.class, signal, this.dbusSyncHandler);
         } catch (DBusException e) {
index 3176620d539a6071142ad06f1b04358d0ffee5f0..6aac76a8949bf727d10410ec3676d8b64eac3e01 100644 (file)
@@ -74,6 +74,27 @@ public class DbusReceiveMessageHandler implements Manager.ReceiveMessageHandler
                         getMessageExtras(message)));
             }
         }
                         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()) {
         if (envelope.sync().isPresent()) {
             var syncMessage = envelope.sync().get();
             if (syncMessage.sent().isPresent()) {