1 package org
.asamk
.signal
.json
;
3 import com
.fasterxml
.jackson
.annotation
.JsonInclude
;
5 import org
.asamk
.Signal
;
6 import org
.asamk
.signal
.manager
.Manager
;
7 import org
.asamk
.signal
.manager
.UntrustedIdentityException
;
8 import org
.asamk
.signal
.manager
.api
.InvalidNumberException
;
9 import org
.asamk
.signal
.manager
.api
.MessageEnvelope
;
10 import org
.asamk
.signal
.manager
.api
.RecipientIdentifier
;
12 import java
.util
.List
;
13 import java
.util
.UUID
;
15 public record JsonMessageEnvelope(
16 @Deprecated String source
,
22 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonDataMessage dataMessage
,
23 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonSyncMessage syncMessage
,
24 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonCallMessage callMessage
,
25 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonReceiptMessage receiptMessage
,
26 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonTypingMessage typingMessage
29 public static JsonMessageEnvelope
from(
30 MessageEnvelope envelope
, Throwable exception
, Manager m
33 final String sourceNumber
;
34 final String sourceUuid
;
35 final Integer sourceDevice
;
36 if (envelope
.sourceAddress().isPresent()) {
37 final var sourceAddress
= envelope
.sourceAddress().get();
38 source
= sourceAddress
.getLegacyIdentifier();
39 sourceNumber
= sourceAddress
.getNumber().orElse(null);
40 sourceUuid
= sourceAddress
.getUuid().map(UUID
::toString
).orElse(null);
41 sourceDevice
= envelope
.sourceDevice();
42 } else if (exception
instanceof UntrustedIdentityException e
) {
43 final var sender
= e
.getSender();
44 source
= sender
.getLegacyIdentifier();
45 sourceNumber
= sender
.getNumber().orElse(null);
46 sourceUuid
= sender
.getUuid().map(UUID
::toString
).orElse(null);
47 sourceDevice
= e
.getSenderDevice();
56 name
= m
.getContactOrProfileName(RecipientIdentifier
.Single
.fromString(source
, m
.getSelfNumber()));
57 } catch (InvalidNumberException
| NullPointerException e
) {
60 final var sourceName
= name
;
61 final var timestamp
= envelope
.timestamp();
62 final var receiptMessage
= envelope
.receipt().map(JsonReceiptMessage
::from
).orElse(null);
63 final var typingMessage
= envelope
.typing().map(JsonTypingMessage
::from
).orElse(null);
65 final var dataMessage
= envelope
.data().map(JsonDataMessage
::from
).orElse(null);
66 final var syncMessage
= envelope
.sync().map(JsonSyncMessage
::from
).orElse(null);
67 final var callMessage
= envelope
.call().map(JsonCallMessage
::from
).orElse(null);
69 return new JsonMessageEnvelope(source
,
82 public static JsonMessageEnvelope
from(Signal
.MessageReceived messageReceived
) {
83 return new JsonMessageEnvelope(messageReceived
.getSource(),
88 messageReceived
.getTimestamp(),
89 JsonDataMessage
.from(messageReceived
),
96 public static JsonMessageEnvelope
from(Signal
.ReceiptReceived receiptReceived
) {
97 return new JsonMessageEnvelope(receiptReceived
.getSender(),
102 receiptReceived
.getTimestamp(),
106 JsonReceiptMessage
.deliveryReceipt(receiptReceived
.getTimestamp(),
107 List
.of(receiptReceived
.getTimestamp())),
111 public static JsonMessageEnvelope
from(Signal
.SyncMessageReceived messageReceived
) {
112 return new JsonMessageEnvelope(messageReceived
.getSource(),
117 messageReceived
.getTimestamp(),
119 JsonSyncMessage
.from(messageReceived
),