]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/json/JsonDataMessage.java
Include source name in JSON output (#663)
[signal-cli] / src / main / java / org / asamk / signal / json / JsonDataMessage.java
index 7aa16ce4a9f0e27a3b7bbc8e4bcc831bc3d98e1c..6dbda9783e5b081eac7533e94b6c2b8cc7b5beb2 100644 (file)
 package org.asamk.signal.json;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 import org.asamk.Signal;
-import org.whispersystems.signalservice.api.messages.SignalServiceAttachment;
+import org.asamk.signal.manager.Manager;
 import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
-import org.whispersystems.signalservice.api.messages.SignalServiceGroup;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
 class JsonDataMessage {
 
-    long timestamp;
-    String message;
-    int expiresInSeconds;
-    List<JsonAttachment> attachments;
-    JsonGroupInfo groupInfo;
+    @JsonProperty
+    final long timestamp;
+
+    @JsonProperty
+    final String message;
+
+    @JsonProperty
+    final Integer expiresInSeconds;
+
+    @JsonProperty
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    final Boolean viewOnce;
+
+    @JsonProperty
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    final JsonReaction reaction;
+
+    @JsonProperty
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    final JsonQuote quote;
+
+    @JsonProperty
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    final List<JsonMention> mentions;
+
+    @JsonProperty
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    final List<JsonAttachment> attachments;
+
+    @JsonProperty
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    final JsonSticker sticker;
+
+    @JsonProperty
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    final JsonRemoteDelete remoteDelete;
+
+    @JsonProperty
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    final List<JsonSharedContact> contacts;
 
-    JsonDataMessage(SignalServiceDataMessage dataMessage) {
+    @JsonProperty
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    final JsonGroupInfo groupInfo;
+
+    JsonDataMessage(SignalServiceDataMessage dataMessage, Manager m) {
         this.timestamp = dataMessage.getTimestamp();
-        if (dataMessage.getGroupContext().isPresent() && dataMessage.getGroupContext().get().getGroupV1().isPresent()) {
-            SignalServiceGroup groupInfo = dataMessage.getGroupContext().get().getGroupV1().get();
-            this.groupInfo = new JsonGroupInfo(groupInfo);
-        }
-        if (dataMessage.getBody().isPresent()) {
-            this.message = dataMessage.getBody().get();
+        if (dataMessage.getGroupContext().isPresent()) {
+            final var groupContext = dataMessage.getGroupContext().get();
+            if (groupContext.getGroupV1().isPresent()) {
+                var groupInfo = groupContext.getGroupV1().get();
+                this.groupInfo = new JsonGroupInfo(groupInfo);
+            } else if (groupContext.getGroupV2().isPresent()) {
+                var groupInfo = groupContext.getGroupV2().get();
+                this.groupInfo = new JsonGroupInfo(groupInfo);
+            } else {
+                this.groupInfo = null;
+            }
+        } else {
+            this.groupInfo = null;
         }
+        this.message = dataMessage.getBody().orNull();
         this.expiresInSeconds = dataMessage.getExpiresInSeconds();
+        this.viewOnce = dataMessage.isViewOnce();
+        this.reaction = dataMessage.getReaction().isPresent()
+                ? new JsonReaction(dataMessage.getReaction().get(), m)
+                : null;
+        this.quote = dataMessage.getQuote().isPresent() ? new JsonQuote(dataMessage.getQuote().get(), m) : null;
+        if (dataMessage.getMentions().isPresent()) {
+            this.mentions = dataMessage.getMentions()
+                    .get()
+                    .stream()
+                    .map(mention -> new JsonMention(mention, m))
+                    .collect(Collectors.toList());
+        } else {
+            this.mentions = List.of();
+        }
+        remoteDelete = dataMessage.getRemoteDelete().isPresent() ? new JsonRemoteDelete(dataMessage.getRemoteDelete()
+                .get()) : null;
         if (dataMessage.getAttachments().isPresent()) {
-            this.attachments = new ArrayList<>(dataMessage.getAttachments().get().size());
-            for (SignalServiceAttachment attachment : dataMessage.getAttachments().get()) {
-                this.attachments.add(new JsonAttachment(attachment));
-            }
+            this.attachments = dataMessage.getAttachments()
+                    .get()
+                    .stream()
+                    .map(JsonAttachment::new)
+                    .collect(Collectors.toList());
+        } else {
+            this.attachments = List.of();
+        }
+        this.sticker = dataMessage.getSticker().isPresent() ? new JsonSticker(dataMessage.getSticker().get()) : null;
+
+        if (dataMessage.getSharedContacts().isPresent()) {
+            this.contacts = dataMessage.getSharedContacts()
+                    .get()
+                    .stream()
+                    .map(JsonSharedContact::new)
+                    .collect(Collectors.toList());
         } else {
-            this.attachments = new ArrayList<>();
+            this.contacts = List.of();
         }
     }
 
     public JsonDataMessage(Signal.MessageReceived messageReceived) {
         timestamp = messageReceived.getTimestamp();
         message = messageReceived.getMessage();
-        groupInfo = new JsonGroupInfo(messageReceived.getGroupId());
+        groupInfo = messageReceived.getGroupId().length > 0 ? new JsonGroupInfo(messageReceived.getGroupId()) : null;
+        expiresInSeconds = null;
+        viewOnce = null;
+        remoteDelete = null;
+        reaction = null;    // TODO Replace these 5 with the proper commands
+        quote = null;
+        mentions = null;
+        sticker = null;
+        contacts = null;
         attachments = messageReceived.getAttachments().stream().map(JsonAttachment::new).collect(Collectors.toList());
     }
 
     public JsonDataMessage(Signal.SyncMessageReceived messageReceived) {
         timestamp = messageReceived.getTimestamp();
         message = messageReceived.getMessage();
-        groupInfo = new JsonGroupInfo(messageReceived.getGroupId());
+        groupInfo = messageReceived.getGroupId().length > 0 ? new JsonGroupInfo(messageReceived.getGroupId()) : null;
+        expiresInSeconds = null;
+        viewOnce = null;
+        remoteDelete = null;
+        reaction = null;    // TODO Replace these 5 with the proper commands
+        quote = null;
+        mentions = null;
+        sticker = null;
+        contacts = null;
         attachments = messageReceived.getAttachments().stream().map(JsonAttachment::new).collect(Collectors.toList());
     }
 }