]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java
c32de61a96c3b452100d61009dc53f4bafef66c7
[signal-cli] / src / main / java / org / asamk / signal / json / JsonMessageEnvelope.java
1 package org.asamk.signal.json;
2
3 import com.fasterxml.jackson.annotation.JsonInclude;
4
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;
10
11 import java.util.UUID;
12
13 public record JsonMessageEnvelope(
14 @Deprecated String source,
15 String sourceNumber,
16 String sourceUuid,
17 String sourceName,
18 Integer sourceDevice,
19 long timestamp,
20 @JsonInclude(JsonInclude.Include.NON_NULL) JsonDataMessage dataMessage,
21 @JsonInclude(JsonInclude.Include.NON_NULL) JsonStoryMessage storyMessage,
22 @JsonInclude(JsonInclude.Include.NON_NULL) JsonSyncMessage syncMessage,
23 @JsonInclude(JsonInclude.Include.NON_NULL) JsonCallMessage callMessage,
24 @JsonInclude(JsonInclude.Include.NON_NULL) JsonReceiptMessage receiptMessage,
25 @JsonInclude(JsonInclude.Include.NON_NULL) JsonTypingMessage typingMessage
26 ) {
27
28 public static JsonMessageEnvelope from(
29 MessageEnvelope envelope, Throwable exception, Manager m
30 ) {
31 final RecipientAddress sourceAddress;
32 final Integer sourceDevice;
33 if (envelope.sourceAddress().isPresent()) {
34 sourceAddress = envelope.sourceAddress().get();
35 sourceDevice = envelope.sourceDevice();
36 } else if (exception instanceof UntrustedIdentityException e) {
37 sourceAddress = e.getSender();
38 sourceDevice = e.getSenderDevice();
39 } else {
40 sourceAddress = null;
41 sourceDevice = null;
42 }
43
44 final String source;
45 final String sourceNumber;
46 final String sourceUuid;
47 final String sourceName;
48 if (sourceAddress != null) {
49 source = sourceAddress.getLegacyIdentifier();
50 sourceNumber = sourceAddress.number().orElse(null);
51 sourceUuid = sourceAddress.uuid().map(UUID::toString).orElse(null);
52 sourceName = m.getContactOrProfileName(RecipientIdentifier.Single.fromAddress(sourceAddress));
53 } else {
54 source = null;
55 sourceNumber = null;
56 sourceUuid = null;
57 sourceName = null;
58 }
59 final var timestamp = envelope.timestamp();
60 final var receiptMessage = envelope.receipt().map(JsonReceiptMessage::from).orElse(null);
61 final var typingMessage = envelope.typing().map(JsonTypingMessage::from).orElse(null);
62
63 final var dataMessage = envelope.data().map(JsonDataMessage::from).orElse(null);
64 final var storyMessage = envelope.story().map(JsonStoryMessage::from).orElse(null);
65 final var syncMessage = envelope.sync().map(JsonSyncMessage::from).orElse(null);
66 final var callMessage = envelope.call().map(JsonCallMessage::from).orElse(null);
67
68 return new JsonMessageEnvelope(source,
69 sourceNumber,
70 sourceUuid,
71 sourceName,
72 sourceDevice,
73 timestamp,
74 dataMessage,
75 storyMessage,
76 syncMessage,
77 callMessage,
78 receiptMessage,
79 typingMessage);
80 }
81 }