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