]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java
Use record classes
[signal-cli] / src / main / java / org / asamk / signal / json / JsonMessageEnvelope.java
index 0d44de5d91fd3540ebc4135bafae138ffaf640ea..f5d70d28a61d7bb2bdc62ae3993343651490b3d3 100644 (file)
@@ -1,7 +1,6 @@
 package org.asamk.signal.json;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
 
 import org.asamk.Signal;
 import org.asamk.signal.manager.Manager;
@@ -15,143 +14,133 @@ import java.util.List;
 
 import static org.asamk.signal.util.Util.getLegacyIdentifier;
 
-public class JsonMessageEnvelope {
-
-    @JsonProperty
-    @Deprecated
-    final String source;
-
-    @JsonProperty
-    final String sourceNumber;
-
-    @JsonProperty
-    final String sourceUuid;
-
-    @JsonProperty
-    final String sourceName;
-
-    @JsonProperty
-    final Integer sourceDevice;
-
-    @JsonProperty
-    final long timestamp;
-
-    @JsonProperty
-    @JsonInclude(JsonInclude.Include.NON_NULL)
-    final JsonDataMessage dataMessage;
-
-    @JsonProperty
-    @JsonInclude(JsonInclude.Include.NON_NULL)
-    final JsonSyncMessage syncMessage;
-
-    @JsonProperty
-    @JsonInclude(JsonInclude.Include.NON_NULL)
-    final JsonCallMessage callMessage;
-
-    @JsonProperty
-    @JsonInclude(JsonInclude.Include.NON_NULL)
-    final JsonReceiptMessage receiptMessage;
-
-    @JsonProperty
-    @JsonInclude(JsonInclude.Include.NON_NULL)
-    final JsonTypingMessage typingMessage;
-
-    public JsonMessageEnvelope(
+public record JsonMessageEnvelope(
+        @Deprecated String source,
+        String sourceNumber,
+        String sourceUuid,
+        String sourceName,
+        Integer sourceDevice,
+        long timestamp,
+        @JsonInclude(JsonInclude.Include.NON_NULL) JsonDataMessage dataMessage,
+        @JsonInclude(JsonInclude.Include.NON_NULL) JsonSyncMessage syncMessage,
+        @JsonInclude(JsonInclude.Include.NON_NULL) JsonCallMessage callMessage,
+        @JsonInclude(JsonInclude.Include.NON_NULL) JsonReceiptMessage receiptMessage,
+        @JsonInclude(JsonInclude.Include.NON_NULL) JsonTypingMessage typingMessage
+) {
+
+    public static JsonMessageEnvelope from(
             SignalServiceEnvelope envelope, SignalServiceContent content, Throwable exception, Manager m
     ) {
+        final String source;
+        final String sourceNumber;
+        final String sourceUuid;
+        final Integer sourceDevice;
         if (!envelope.isUnidentifiedSender() && envelope.hasSourceUuid()) {
-            var source = m.resolveSignalServiceAddress(envelope.getSourceAddress());
-            this.source = getLegacyIdentifier(source);
-            this.sourceNumber = source.getNumber().orNull();
-            this.sourceUuid = source.getUuid().toString();
-            this.sourceDevice = envelope.getSourceDevice();
+            final var sourceAddress = m.resolveSignalServiceAddress(envelope.getSourceAddress());
+            source = getLegacyIdentifier(sourceAddress);
+            sourceNumber = sourceAddress.getNumber().orNull();
+            sourceUuid = sourceAddress.getUuid().toString();
+            sourceDevice = envelope.getSourceDevice();
         } else if (envelope.isUnidentifiedSender() && content != null) {
-            final var source = m.resolveSignalServiceAddress(content.getSender());
-            this.source = getLegacyIdentifier(source);
-            this.sourceNumber = source.getNumber().orNull();
-            this.sourceUuid = source.getUuid().toString();
-            this.sourceDevice = content.getSenderDevice();
+            final var sender = m.resolveSignalServiceAddress(content.getSender());
+            source = getLegacyIdentifier(sender);
+            sourceNumber = sender.getNumber().orNull();
+            sourceUuid = sender.getUuid().toString();
+            sourceDevice = content.getSenderDevice();
         } else if (exception instanceof UntrustedIdentityException e) {
-            final var source = m.resolveSignalServiceAddress(e.getSender());
-            this.source = getLegacyIdentifier(source);
-            this.sourceNumber = source.getNumber().orNull();
-            this.sourceUuid = source.getUuid().toString();
-            this.sourceDevice = e.getSenderDevice();
+            final var sender = m.resolveSignalServiceAddress(e.getSender());
+            source = getLegacyIdentifier(sender);
+            sourceNumber = sender.getNumber().orNull();
+            sourceUuid = sender.getUuid().toString();
+            sourceDevice = e.getSenderDevice();
         } else {
-            this.source = null;
-            this.sourceNumber = null;
-            this.sourceUuid = null;
-            this.sourceDevice = null;
+            source = null;
+            sourceNumber = null;
+            sourceUuid = null;
+            sourceDevice = null;
         }
         String name;
         try {
-            name = m.getContactOrProfileName(RecipientIdentifier.Single.fromString(this.source, m.getSelfNumber()));
+            name = m.getContactOrProfileName(RecipientIdentifier.Single.fromString(source, m.getSelfNumber()));
         } catch (InvalidNumberException | NullPointerException e) {
             name = null;
         }
-        this.sourceName = name;
-        this.timestamp = envelope.getTimestamp();
+        final var sourceName = name;
+        final var timestamp = envelope.getTimestamp();
+        final JsonReceiptMessage receiptMessage;
         if (envelope.isReceipt()) {
-            this.receiptMessage = JsonReceiptMessage.deliveryReceipt(timestamp, List.of(timestamp));
+            receiptMessage = JsonReceiptMessage.deliveryReceipt(timestamp, List.of(timestamp));
         } else if (content != null && content.getReceiptMessage().isPresent()) {
-            this.receiptMessage = new JsonReceiptMessage(content.getReceiptMessage().get());
+            receiptMessage = JsonReceiptMessage.from(content.getReceiptMessage().get());
         } else {
-            this.receiptMessage = null;
+            receiptMessage = null;
         }
-        this.typingMessage = content != null && content.getTypingMessage().isPresent()
-                ? new JsonTypingMessage(content.getTypingMessage().get())
-                : null;
+        final var typingMessage = content != null && content.getTypingMessage().isPresent() ? JsonTypingMessage.from(
+                content.getTypingMessage().get()) : null;
 
-        this.dataMessage = content != null && content.getDataMessage().isPresent()
-                ? new JsonDataMessage(content.getDataMessage().get(), m)
+        final var dataMessage = content != null && content.getDataMessage().isPresent()
+                ? JsonDataMessage.from(content.getDataMessage().get(), m)
                 : null;
-        this.syncMessage = content != null && content.getSyncMessage().isPresent()
-                ? new JsonSyncMessage(content.getSyncMessage().get(), m)
+        final var syncMessage = content != null && content.getSyncMessage().isPresent()
+                ? JsonSyncMessage.from(content.getSyncMessage().get(), m)
                 : null;
-        this.callMessage = content != null && content.getCallMessage().isPresent()
-                ? new JsonCallMessage(content.getCallMessage().get())
+        final var callMessage = content != null && content.getCallMessage().isPresent()
+                ? JsonCallMessage.from(content.getCallMessage().get())
                 : null;
+
+        return new JsonMessageEnvelope(source,
+                sourceNumber,
+                sourceUuid,
+                sourceName,
+                sourceDevice,
+                timestamp,
+                dataMessage,
+                syncMessage,
+                callMessage,
+                receiptMessage,
+                typingMessage);
     }
 
-    public JsonMessageEnvelope(Signal.MessageReceived messageReceived) {
-        source = messageReceived.getSender();
-        sourceNumber = null;
-        sourceUuid = null;
-        sourceName = null;
-        sourceDevice = null;
-        timestamp = messageReceived.getTimestamp();
-        receiptMessage = null;
-        dataMessage = new JsonDataMessage(messageReceived);
-        syncMessage = null;
-        callMessage = null;
-        typingMessage = null;
+    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 JsonMessageEnvelope(Signal.ReceiptReceived receiptReceived) {
-        source = receiptReceived.getSender();
-        sourceNumber = null;
-        sourceUuid = null;
-        sourceName = null;
-        sourceDevice = null;
-        timestamp = receiptReceived.getTimestamp();
-        receiptMessage = JsonReceiptMessage.deliveryReceipt(timestamp, List.of(timestamp));
-        dataMessage = null;
-        syncMessage = null;
-        callMessage = null;
-        typingMessage = 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 JsonMessageEnvelope(Signal.SyncMessageReceived messageReceived) {
-        source = messageReceived.getSource();
-        sourceNumber = null;
-        sourceUuid = null;
-        sourceName = null;
-        sourceDevice = null;
-        timestamp = messageReceived.getTimestamp();
-        receiptMessage = null;
-        dataMessage = null;
-        syncMessage = new JsonSyncMessage(messageReceived);
-        callMessage = null;
-        typingMessage = 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);
     }
 }