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