]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java
c7a3f8910e79bba5d6ee3d01791da69f06ade562
[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 import com.fasterxml.jackson.annotation.JsonProperty;
5
6 import org.asamk.Signal;
7 import org.asamk.signal.manager.Manager;
8 import org.whispersystems.signalservice.api.messages.SignalServiceContent;
9 import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
10 import org.whispersystems.signalservice.api.util.InvalidNumberException;
11
12 import java.util.List;
13 import java.util.UUID;
14
15 import static org.asamk.signal.util.Util.getLegacyIdentifier;
16
17 public class JsonMessageEnvelope {
18
19 @JsonProperty
20 @Deprecated
21 final String source;
22
23 @JsonProperty
24 final String sourceNumber;
25
26 @JsonProperty
27 final String sourceUuid;
28
29 @JsonProperty
30 final String sourceName;
31
32 @JsonProperty
33 final Integer sourceDevice;
34
35 @JsonProperty
36 @JsonInclude(JsonInclude.Include.NON_NULL)
37 final String relay;
38
39 @JsonProperty
40 final long timestamp;
41
42 @JsonProperty
43 @JsonInclude(JsonInclude.Include.NON_NULL)
44 final JsonDataMessage dataMessage;
45
46 @JsonProperty
47 @JsonInclude(JsonInclude.Include.NON_NULL)
48 final JsonSyncMessage syncMessage;
49
50 @JsonProperty
51 @JsonInclude(JsonInclude.Include.NON_NULL)
52 final JsonCallMessage callMessage;
53
54 @JsonProperty
55 @JsonInclude(JsonInclude.Include.NON_NULL)
56 final JsonReceiptMessage receiptMessage;
57
58 @JsonProperty
59 @JsonInclude(JsonInclude.Include.NON_NULL)
60 final JsonTypingMessage typingMessage;
61
62 public JsonMessageEnvelope(SignalServiceEnvelope envelope, SignalServiceContent content, Manager m) {
63 if (!envelope.isUnidentifiedSender() && envelope.hasSource()) {
64 var source = envelope.getSourceAddress();
65 this.source = getLegacyIdentifier(source);
66 this.sourceNumber = source.getNumber().orNull();
67 this.sourceUuid = source.getUuid().transform(UUID::toString).orNull();
68 this.sourceDevice = envelope.getSourceDevice();
69 this.relay = source.getRelay().orNull();
70 } else if (envelope.isUnidentifiedSender() && content != null) {
71 final var source = content.getSender();
72 this.source = getLegacyIdentifier(source);
73 this.sourceNumber = source.getNumber().orNull();
74 this.sourceUuid = source.getUuid().transform(UUID::toString).orNull();
75 this.sourceDevice = content.getSenderDevice();
76 this.relay = null;
77 } else {
78 this.source = null;
79 this.sourceNumber = null;
80 this.sourceUuid = null;
81 this.sourceDevice = null;
82 this.relay = null;
83 }
84 String name;
85 try {
86 name = m.getContactOrProfileName(this.source);
87 } catch (InvalidNumberException | NullPointerException e) {
88 name = null;
89 }
90 this.sourceName = name;
91 this.timestamp = envelope.getTimestamp();
92 if (envelope.isReceipt()) {
93 this.receiptMessage = JsonReceiptMessage.deliveryReceipt(timestamp, List.of(timestamp));
94 } else if (content != null && content.getReceiptMessage().isPresent()) {
95 this.receiptMessage = new JsonReceiptMessage(content.getReceiptMessage().get());
96 } else {
97 this.receiptMessage = null;
98 }
99 this.typingMessage = content != null && content.getTypingMessage().isPresent()
100 ? new JsonTypingMessage(content.getTypingMessage().get())
101 : null;
102
103 this.dataMessage = content != null && content.getDataMessage().isPresent()
104 ? new JsonDataMessage(content.getDataMessage().get(), m)
105 : null;
106 this.syncMessage = content != null && content.getSyncMessage().isPresent()
107 ? new JsonSyncMessage(content.getSyncMessage().get(), m)
108 : null;
109 this.callMessage = content != null && content.getCallMessage().isPresent()
110 ? new JsonCallMessage(content.getCallMessage().get())
111 : null;
112 }
113
114 public JsonMessageEnvelope(Signal.MessageReceived messageReceived) {
115 source = messageReceived.getSender();
116 sourceNumber = null;
117 sourceUuid = null;
118 sourceName = null;
119 sourceDevice = null;
120 relay = null;
121 timestamp = messageReceived.getTimestamp();
122 receiptMessage = null;
123 dataMessage = new JsonDataMessage(messageReceived);
124 syncMessage = null;
125 callMessage = null;
126 typingMessage = null;
127 }
128
129 public JsonMessageEnvelope(Signal.ReceiptReceived receiptReceived) {
130 source = receiptReceived.getSender();
131 sourceNumber = null;
132 sourceUuid = null;
133 sourceName = null;
134 sourceDevice = null;
135 relay = null;
136 timestamp = receiptReceived.getTimestamp();
137 receiptMessage = JsonReceiptMessage.deliveryReceipt(timestamp, List.of(timestamp));
138 dataMessage = null;
139 syncMessage = null;
140 callMessage = null;
141 typingMessage = null;
142 }
143
144 public JsonMessageEnvelope(Signal.SyncMessageReceived messageReceived) {
145 source = messageReceived.getSource();
146 sourceNumber = null;
147 sourceUuid = null;
148 sourceName = null;
149 sourceDevice = null;
150 relay = null;
151 timestamp = messageReceived.getTimestamp();
152 receiptMessage = null;
153 dataMessage = null;
154 syncMessage = new JsonSyncMessage(messageReceived);
155 callMessage = null;
156 typingMessage = null;
157 }
158 }