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;
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);
}
}