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