]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java
Make fields in json classes final and omit unnecessary nulls when serializing
[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 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 public JsonMessageEnvelope(SignalServiceEnvelope envelope, SignalServiceContent content, Manager m) {
45 if (!envelope.isUnidentifiedSender() && envelope.hasSource()) {
46 SignalServiceAddress source = envelope.getSourceAddress();
47 this.source = source.getLegacyIdentifier();
48 this.sourceDevice = envelope.getSourceDevice();
49 this.relay = source.getRelay().orNull();
50 } else if (envelope.isUnidentifiedSender() && content != null) {
51 this.source = content.getSender().getLegacyIdentifier();
52 this.sourceDevice = content.getSenderDevice();
53 this.relay = null;
54 } else {
55 this.source = null;
56 this.sourceDevice = null;
57 this.relay = null;
58 }
59 this.timestamp = envelope.getTimestamp();
60 if (envelope.isReceipt()) {
61 this.receiptMessage = JsonReceiptMessage.deliveryReceipt(timestamp, List.of(timestamp));
62 } else if (content != null && content.getReceiptMessage().isPresent()) {
63 this.receiptMessage = new JsonReceiptMessage(content.getReceiptMessage().get());
64 } else {
65 this.receiptMessage = null;
66 }
67
68 this.dataMessage = content != null && content.getDataMessage().isPresent()
69 ? new JsonDataMessage(content.getDataMessage().get(), m)
70 : null;
71 this.syncMessage = content != null && content.getSyncMessage().isPresent()
72 ? new JsonSyncMessage(content.getSyncMessage().get(), m)
73 : null;
74 this.callMessage = content != null && content.getCallMessage().isPresent()
75 ? new JsonCallMessage(content.getCallMessage().get())
76 : null;
77 }
78
79 public JsonMessageEnvelope(Signal.MessageReceived messageReceived) {
80 source = messageReceived.getSender();
81 sourceDevice = null;
82 relay = null;
83 timestamp = messageReceived.getTimestamp();
84 receiptMessage = null;
85 dataMessage = new JsonDataMessage(messageReceived);
86 syncMessage = null;
87 callMessage = null;
88 }
89
90 public JsonMessageEnvelope(Signal.ReceiptReceived receiptReceived) {
91 source = receiptReceived.getSender();
92 sourceDevice = null;
93 relay = null;
94 timestamp = receiptReceived.getTimestamp();
95 receiptMessage = JsonReceiptMessage.deliveryReceipt(timestamp, List.of(timestamp));
96 dataMessage = null;
97 syncMessage = null;
98 callMessage = null;
99 }
100
101 public JsonMessageEnvelope(Signal.SyncMessageReceived messageReceived) {
102 source = messageReceived.getSource();
103 sourceDevice = null;
104 relay = null;
105 timestamp = messageReceived.getTimestamp();
106 receiptMessage = null;
107 dataMessage = null;
108 syncMessage = new JsonSyncMessage(messageReceived);
109 callMessage = null;
110 }
111 }