1 package org
.asamk
.signal
.json
;
3 import com
.fasterxml
.jackson
.annotation
.JsonInclude
;
5 import org
.asamk
.signal
.manager
.Manager
;
6 import org
.asamk
.signal
.manager
.api
.MessageEnvelope
;
7 import org
.asamk
.signal
.manager
.api
.RecipientAddress
;
8 import org
.asamk
.signal
.manager
.api
.RecipientIdentifier
;
9 import org
.asamk
.signal
.manager
.api
.UntrustedIdentityException
;
11 import java
.util
.UUID
;
13 public record JsonMessageEnvelope(
14 @Deprecated String source
,
20 long serverReceivedTimestamp
,
21 long serverDeliveredTimestamp
,
22 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonDataMessage dataMessage
,
23 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonEditMessage editMessage
,
24 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonStoryMessage storyMessage
,
25 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonSyncMessage syncMessage
,
26 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonCallMessage callMessage
,
27 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonReceiptMessage receiptMessage
,
28 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonTypingMessage typingMessage
31 public static JsonMessageEnvelope
from(
32 MessageEnvelope envelope
, Throwable exception
, Manager m
34 final RecipientAddress sourceAddress
;
35 final Integer sourceDevice
;
36 if (envelope
.sourceAddress().isPresent()) {
37 sourceAddress
= envelope
.sourceAddress().get();
38 sourceDevice
= envelope
.sourceDevice();
39 } else if (exception
instanceof UntrustedIdentityException e
) {
40 sourceAddress
= e
.getSender();
41 sourceDevice
= e
.getSenderDevice();
48 final String sourceNumber
;
49 final String sourceUuid
;
50 final String sourceName
;
51 if (sourceAddress
!= null) {
52 source
= sourceAddress
.getLegacyIdentifier();
53 sourceNumber
= sourceAddress
.number().orElse(null);
54 sourceUuid
= sourceAddress
.uuid().map(UUID
::toString
).orElse(null);
55 sourceName
= m
.getContactOrProfileName(RecipientIdentifier
.Single
.fromAddress(sourceAddress
));
62 final var timestamp
= envelope
.timestamp();
63 final var serverReceivedTimestamp
= envelope
.serverReceivedTimestamp();
64 final var serverDeliveredTimestamp
= envelope
.serverDeliveredTimestamp();
65 final var receiptMessage
= envelope
.receipt().map(JsonReceiptMessage
::from
).orElse(null);
66 final var typingMessage
= envelope
.typing().map(JsonTypingMessage
::from
).orElse(null);
68 final var dataMessage
= envelope
.data()
69 .map(data
-> JsonDataMessage
.from(data
, m
))
71 final var editMessage
= envelope
.edit()
72 .map(data
-> JsonEditMessage
.from(data
, m
))
74 final var storyMessage
= envelope
.story().map(JsonStoryMessage
::from
).orElse(null);
75 final var syncMessage
= envelope
.sync()
76 .map(data
-> JsonSyncMessage
.from(data
, m
))
78 final var callMessage
= envelope
.call().map(JsonCallMessage
::from
).orElse(null);
80 return new JsonMessageEnvelope(source
,
86 serverReceivedTimestamp
,
87 serverDeliveredTimestamp
,