]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java
Reformat files
[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 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
29 ) {
30
31 public static JsonMessageEnvelope from(
32 MessageEnvelope envelope, Throwable exception, Manager m
33 ) {
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();
42 } else {
43 sourceAddress = null;
44 sourceDevice = null;
45 }
46
47 final String source;
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));
56 } else {
57 source = null;
58 sourceNumber = null;
59 sourceUuid = null;
60 sourceName = null;
61 }
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);
67
68 final var dataMessage = envelope.data().map(data -> JsonDataMessage.from(data, m)).orElse(null);
69 final var editMessage = envelope.edit().map(data -> JsonEditMessage.from(data, m)).orElse(null);
70 final var storyMessage = envelope.story().map(JsonStoryMessage::from).orElse(null);
71 final var syncMessage = envelope.sync().map(data -> JsonSyncMessage.from(data, m)).orElse(null);
72 final var callMessage = envelope.call().map(JsonCallMessage::from).orElse(null);
73
74 return new JsonMessageEnvelope(source,
75 sourceNumber,
76 sourceUuid,
77 sourceName,
78 sourceDevice,
79 timestamp,
80 serverReceivedTimestamp,
81 serverDeliveredTimestamp,
82 dataMessage,
83 editMessage,
84 storyMessage,
85 syncMessage,
86 callMessage,
87 receiptMessage,
88 typingMessage);
89 }
90 }