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