]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java
Update libsignal-service-java
[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
11 import java.util.List;
12
13 import static org.asamk.signal.util.Util.getLegacyIdentifier;
14
15 public class JsonMessageEnvelope {
16
17 @JsonProperty
18 final String source;
19
20 @JsonProperty
21 final Integer sourceDevice;
22
23 @JsonProperty
24 @JsonInclude(JsonInclude.Include.NON_NULL)
25 final String relay;
26
27 @JsonProperty
28 final long timestamp;
29
30 @JsonProperty
31 @JsonInclude(JsonInclude.Include.NON_NULL)
32 final JsonDataMessage dataMessage;
33
34 @JsonProperty
35 @JsonInclude(JsonInclude.Include.NON_NULL)
36 final JsonSyncMessage syncMessage;
37
38 @JsonProperty
39 @JsonInclude(JsonInclude.Include.NON_NULL)
40 final JsonCallMessage callMessage;
41
42 @JsonProperty
43 @JsonInclude(JsonInclude.Include.NON_NULL)
44 final JsonReceiptMessage receiptMessage;
45
46 @JsonProperty
47 @JsonInclude(JsonInclude.Include.NON_NULL)
48 final JsonTypingMessage typingMessage;
49
50 public JsonMessageEnvelope(SignalServiceEnvelope envelope, SignalServiceContent content, Manager m) {
51 if (!envelope.isUnidentifiedSender() && envelope.hasSource()) {
52 var source = envelope.getSourceAddress();
53 this.source = getLegacyIdentifier(source);
54 this.sourceDevice = envelope.getSourceDevice();
55 this.relay = source.getRelay().orNull();
56 } else if (envelope.isUnidentifiedSender() && content != null) {
57 this.source = getLegacyIdentifier(content.getSender());
58 this.sourceDevice = content.getSenderDevice();
59 this.relay = null;
60 } else {
61 this.source = null;
62 this.sourceDevice = null;
63 this.relay = null;
64 }
65 this.timestamp = envelope.getTimestamp();
66 if (envelope.isReceipt()) {
67 this.receiptMessage = JsonReceiptMessage.deliveryReceipt(timestamp, List.of(timestamp));
68 } else if (content != null && content.getReceiptMessage().isPresent()) {
69 this.receiptMessage = new JsonReceiptMessage(content.getReceiptMessage().get());
70 } else {
71 this.receiptMessage = null;
72 }
73 this.typingMessage = content != null && content.getTypingMessage().isPresent()
74 ? new JsonTypingMessage(content.getTypingMessage().get())
75 : null;
76
77 this.dataMessage = content != null && content.getDataMessage().isPresent()
78 ? new JsonDataMessage(content.getDataMessage().get(), m)
79 : null;
80 this.syncMessage = content != null && content.getSyncMessage().isPresent()
81 ? new JsonSyncMessage(content.getSyncMessage().get(), m)
82 : null;
83 this.callMessage = content != null && content.getCallMessage().isPresent()
84 ? new JsonCallMessage(content.getCallMessage().get())
85 : null;
86 }
87
88 public JsonMessageEnvelope(Signal.MessageReceived messageReceived) {
89 source = messageReceived.getSender();
90 sourceDevice = null;
91 relay = null;
92 timestamp = messageReceived.getTimestamp();
93 receiptMessage = null;
94 dataMessage = new JsonDataMessage(messageReceived);
95 syncMessage = null;
96 callMessage = null;
97 typingMessage = null;
98 }
99
100 public JsonMessageEnvelope(Signal.ReceiptReceived receiptReceived) {
101 source = receiptReceived.getSender();
102 sourceDevice = null;
103 relay = null;
104 timestamp = receiptReceived.getTimestamp();
105 receiptMessage = JsonReceiptMessage.deliveryReceipt(timestamp, List.of(timestamp));
106 dataMessage = null;
107 syncMessage = null;
108 callMessage = null;
109 typingMessage = null;
110 }
111
112 public JsonMessageEnvelope(Signal.SyncMessageReceived messageReceived) {
113 source = messageReceived.getSource();
114 sourceDevice = null;
115 relay = null;
116 timestamp = messageReceived.getTimestamp();
117 receiptMessage = null;
118 dataMessage = null;
119 syncMessage = new JsonSyncMessage(messageReceived);
120 callMessage = null;
121 typingMessage = null;
122 }
123 }