X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/8867a7b9eeb3353d059613544899b262f4f47579..HEAD:/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 0c1d0738..8ab8ea83 100644 --- a/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java +++ b/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java @@ -3,10 +3,10 @@ package org.asamk.signal.json; import com.fasterxml.jackson.annotation.JsonInclude; import org.asamk.signal.manager.Manager; -import org.asamk.signal.manager.UntrustedIdentityException; -import org.asamk.signal.manager.api.InvalidNumberException; 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; import java.util.UUID; @@ -17,51 +17,56 @@ public record JsonMessageEnvelope( 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 - ) { + 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; + } + final String source; final String sourceNumber; final String sourceUuid; - final Integer sourceDevice; - if (envelope.sourceAddress().isPresent()) { - final var sourceAddress = envelope.sourceAddress().get(); + final String sourceName; + if (sourceAddress != null) { source = sourceAddress.getLegacyIdentifier(); sourceNumber = sourceAddress.number().orElse(null); sourceUuid = sourceAddress.uuid().map(UUID::toString).orElse(null); - sourceDevice = envelope.sourceDevice(); - } else if (exception instanceof UntrustedIdentityException e) { - final var sender = e.getSender(); - source = sender.getLegacyIdentifier(); - sourceNumber = sender.number().orElse(null); - sourceUuid = sender.uuid().map(UUID::toString).orElse(null); - sourceDevice = e.getSenderDevice(); + sourceName = m.getContactOrProfileName(RecipientIdentifier.Single.fromAddress(sourceAddress)); } else { source = null; sourceNumber = null; sourceUuid = null; - sourceDevice = null; - } - String name; - try { - name = m.getContactOrProfileName(RecipientIdentifier.Single.fromString(source, m.getSelfNumber())); - } catch (InvalidNumberException | NullPointerException e) { - name = null; + sourceName = null; } - final var sourceName = name; 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); - final var dataMessage = envelope.data().map(JsonDataMessage::from).orElse(null); - final var syncMessage = envelope.sync().map(JsonSyncMessage::from).orElse(null); + 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); return new JsonMessageEnvelope(source, @@ -70,7 +75,11 @@ public record JsonMessageEnvelope( sourceName, sourceDevice, timestamp, + serverReceivedTimestamp, + serverDeliveredTimestamp, dataMessage, + editMessage, + storyMessage, syncMessage, callMessage, receiptMessage,