]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java
add group info on json message
[signal-cli] / src / main / java / org / asamk / signal / json / JsonMessageEnvelope.java
index 80c367c395a3841292d83d1919657aeb514cded9..f4f06927b62eaca4fc3cee6c8b9dc8813a37ae22 100644 (file)
@@ -2,14 +2,12 @@ package org.asamk.signal.json;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 
-import org.asamk.Signal;
 import org.asamk.signal.manager.Manager;
-import org.asamk.signal.manager.UntrustedIdentityException;
-import org.asamk.signal.manager.api.InvalidNumberException;
 import org.asamk.signal.manager.api.MessageEnvelope;
+import org.asamk.signal.manager.api.RecipientAddress;
 import org.asamk.signal.manager.api.RecipientIdentifier;
+import org.asamk.signal.manager.api.UntrustedIdentityException;
 
-import java.util.List;
 import java.util.UUID;
 
 public record JsonMessageEnvelope(
@@ -19,7 +17,11 @@ public record JsonMessageEnvelope(
         String sourceName,
         Integer sourceDevice,
         long timestamp,
+        long serverReceivedTimestamp,
+        long serverDeliveredTimestamp,
         @JsonInclude(JsonInclude.Include.NON_NULL) JsonDataMessage dataMessage,
+        @JsonInclude(JsonInclude.Include.NON_NULL) JsonEditMessage editMessage,
+        @JsonInclude(JsonInclude.Include.NON_NULL) JsonStoryMessage storyMessage,
         @JsonInclude(JsonInclude.Include.NON_NULL) JsonSyncMessage syncMessage,
         @JsonInclude(JsonInclude.Include.NON_NULL) JsonCallMessage callMessage,
         @JsonInclude(JsonInclude.Include.NON_NULL) JsonReceiptMessage receiptMessage,
@@ -29,41 +31,50 @@ public record JsonMessageEnvelope(
     public static JsonMessageEnvelope from(
             MessageEnvelope envelope, Throwable exception, Manager m
     ) {
-        final String source;
-        final String sourceNumber;
-        final String sourceUuid;
+        final RecipientAddress sourceAddress;
         final Integer sourceDevice;
         if (envelope.sourceAddress().isPresent()) {
-            final var sourceAddress = envelope.sourceAddress().get();
-            source = sourceAddress.getLegacyIdentifier();
-            sourceNumber = sourceAddress.getNumber().orElse(null);
-            sourceUuid = sourceAddress.getUuid().map(UUID::toString).orElse(null);
+            sourceAddress = envelope.sourceAddress().get();
             sourceDevice = envelope.sourceDevice();
         } else if (exception instanceof UntrustedIdentityException e) {
-            final var sender = e.getSender();
-            source = sender.getLegacyIdentifier();
-            sourceNumber = sender.getNumber().orElse(null);
-            sourceUuid = sender.getUuid().map(UUID::toString).orElse(null);
+            sourceAddress = e.getSender();
             sourceDevice = e.getSenderDevice();
+        } else {
+            sourceAddress = null;
+            sourceDevice = null;
+        }
+
+        final String source;
+        final String sourceNumber;
+        final String sourceUuid;
+        final String sourceName;
+        if (sourceAddress != null) {
+            source = sourceAddress.getLegacyIdentifier();
+            sourceNumber = sourceAddress.number().orElse(null);
+            sourceUuid = sourceAddress.uuid().map(UUID::toString).orElse(null);
+            sourceName = m.getContactOrProfileName(RecipientIdentifier.Single.fromAddress(sourceAddress));
         } else {
             source = null;
             sourceNumber = null;
             sourceUuid = null;
-            sourceDevice = null;
+            sourceName = null;
         }
-        String name;
-        try {
-            name = m.getContactOrProfileName(RecipientIdentifier.Single.fromString(source, m.getSelfNumber()));
-        } catch (InvalidNumberException | NullPointerException e) {
-            name = null;
-        }
-        final var sourceName = name;
         final var timestamp = envelope.timestamp();
+        final var serverReceivedTimestamp = envelope.serverReceivedTimestamp();
+        final var serverDeliveredTimestamp = envelope.serverDeliveredTimestamp();
         final var receiptMessage = envelope.receipt().map(JsonReceiptMessage::from).orElse(null);
         final var typingMessage = envelope.typing().map(JsonTypingMessage::from).orElse(null);
 
-        final var dataMessage = envelope.data().map(JsonDataMessage::from).orElse(null);
-        final var syncMessage = envelope.sync().map(JsonSyncMessage::from).orElse(null);
+        final var dataMessage = envelope.data()
+            .map(data -> JsonDataMessage.from(data, m))
+            .orElse(null);
+        final var editMessage = envelope.edit()
+            .map(data -> JsonEditMessage.from(data, m))
+            .orElse(null);
+        final var storyMessage = envelope.story().map(JsonStoryMessage::from).orElse(null);
+        final var syncMessage = envelope.sync()
+            .map(data -> JsonSyncMessage.from(data, m))
+            .orElse(null);
         final var callMessage = envelope.call().map(JsonCallMessage::from).orElse(null);
 
         return new JsonMessageEnvelope(source,
@@ -72,53 +83,14 @@ public record JsonMessageEnvelope(
                 sourceName,
                 sourceDevice,
                 timestamp,
+                serverReceivedTimestamp,
+                serverDeliveredTimestamp,
                 dataMessage,
+                editMessage,
+                storyMessage,
                 syncMessage,
                 callMessage,
                 receiptMessage,
                 typingMessage);
     }
-
-    public static JsonMessageEnvelope from(Signal.MessageReceived messageReceived) {
-        return new JsonMessageEnvelope(messageReceived.getSource(),
-                null,
-                null,
-                null,
-                null,
-                messageReceived.getTimestamp(),
-                JsonDataMessage.from(messageReceived),
-                null,
-                null,
-                null,
-                null);
-    }
-
-    public static JsonMessageEnvelope from(Signal.ReceiptReceived receiptReceived) {
-        return new JsonMessageEnvelope(receiptReceived.getSender(),
-                null,
-                null,
-                null,
-                null,
-                receiptReceived.getTimestamp(),
-                null,
-                null,
-                null,
-                JsonReceiptMessage.deliveryReceipt(receiptReceived.getTimestamp(),
-                        List.of(receiptReceived.getTimestamp())),
-                null);
-    }
-
-    public static JsonMessageEnvelope from(Signal.SyncMessageReceived messageReceived) {
-        return new JsonMessageEnvelope(messageReceived.getSource(),
-                null,
-                null,
-                null,
-                null,
-                messageReceived.getTimestamp(),
-                null,
-                JsonSyncMessage.from(messageReceived),
-                null,
-                null,
-                null);
-    }
 }