X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/ae41d0c5026fe868c6198e1005344fc78b6e0a2c..eac2a47163a07c2553fee8a0cfcdf3f1e6adafd2:/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java diff --git a/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java b/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java index 3279d941..f4f06927 100644 --- a/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java +++ b/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java @@ -1,66 +1,96 @@ package org.asamk.signal.json; -import org.asamk.Signal; -import org.whispersystems.signalservice.api.messages.SignalServiceContent; -import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope; -import org.whispersystems.signalservice.api.push.SignalServiceAddress; +import com.fasterxml.jackson.annotation.JsonInclude; -public class JsonMessageEnvelope { +import org.asamk.signal.manager.Manager; +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; - String source; - int sourceDevice; - String relay; - long timestamp; - boolean isReceipt; - JsonDataMessage dataMessage; - JsonSyncMessage syncMessage; - JsonCallMessage callMessage; - JsonReceiptMessage receiptMessage; +import java.util.UUID; - public JsonMessageEnvelope(SignalServiceEnvelope envelope, SignalServiceContent content) { - if (!envelope.isUnidentifiedSender() && envelope.hasSource()) { - SignalServiceAddress source = envelope.getSourceAddress(); - this.source = source.getNumber().get(); - this.relay = source.getRelay().isPresent() ? source.getRelay().get() : null; - } - this.sourceDevice = envelope.getSourceDevice(); - this.timestamp = envelope.getTimestamp(); - this.isReceipt = envelope.isReceipt(); - if (content != null) { - if (envelope.isUnidentifiedSender()) { - this.source = content.getSender().getNumber().get(); - this.sourceDevice = content.getSenderDevice(); - } - if (content.getDataMessage().isPresent()) { - this.dataMessage = new JsonDataMessage(content.getDataMessage().get()); - } - if (content.getSyncMessage().isPresent()) { - this.syncMessage = new JsonSyncMessage(content.getSyncMessage().get()); - } - if (content.getCallMessage().isPresent()) { - this.callMessage = new JsonCallMessage(content.getCallMessage().get()); - } - if (content.getReceiptMessage().isPresent()) { - this.receiptMessage = new JsonReceiptMessage(content.getReceiptMessage().get()); - } +public record JsonMessageEnvelope( + @Deprecated String source, + String sourceNumber, + String sourceUuid, + 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, + @JsonInclude(JsonInclude.Include.NON_NULL) JsonTypingMessage typingMessage +) { + + public static JsonMessageEnvelope from( + MessageEnvelope envelope, Throwable exception, Manager m + ) { + final RecipientAddress sourceAddress; + final Integer sourceDevice; + if (envelope.sourceAddress().isPresent()) { + sourceAddress = envelope.sourceAddress().get(); + sourceDevice = envelope.sourceDevice(); + } else if (exception instanceof UntrustedIdentityException e) { + sourceAddress = e.getSender(); + sourceDevice = e.getSenderDevice(); + } else { + sourceAddress = null; + sourceDevice = null; } - } - public JsonMessageEnvelope(Signal.MessageReceived messageReceived) { - source = messageReceived.getSender(); - timestamp = messageReceived.getTimestamp(); - dataMessage = new JsonDataMessage(messageReceived); - } + 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; + sourceName = null; + } + 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); - public JsonMessageEnvelope(Signal.ReceiptReceived receiptReceived) { - source = receiptReceived.getSender(); - timestamp = receiptReceived.getTimestamp(); - isReceipt = true; - } + 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); - public JsonMessageEnvelope(Signal.SyncMessageReceived messageReceived) { - source = messageReceived.getSource(); - timestamp = messageReceived.getTimestamp(); - syncMessage = new JsonSyncMessage(messageReceived); + return new JsonMessageEnvelope(source, + sourceNumber, + sourceUuid, + sourceName, + sourceDevice, + timestamp, + serverReceivedTimestamp, + serverDeliveredTimestamp, + dataMessage, + editMessage, + storyMessage, + syncMessage, + callMessage, + receiptMessage, + typingMessage); } }