]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonDataMessage.java
Output "SharedContacts" field from a SignalDataMessage (#529)
[signal-cli] / src / main / java / org / asamk / signal / json / JsonDataMessage.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.SignalServiceDataMessage;
9 import org.whispersystems.signalservice.api.messages.SignalServiceGroup;
10 import org.whispersystems.signalservice.api.messages.SignalServiceGroupContext;
11 import org.whispersystems.signalservice.api.messages.SignalServiceGroupV2;
12
13 import java.util.List;
14 import java.util.stream.Collectors;
15
16 class JsonDataMessage {
17
18 @JsonProperty
19 final long timestamp;
20
21 @JsonProperty
22 final String message;
23
24 @JsonProperty
25 final Integer expiresInSeconds;
26
27 @JsonProperty
28 @JsonInclude(JsonInclude.Include.NON_NULL)
29 final Boolean viewOnce;
30
31 @JsonProperty
32 @JsonInclude(JsonInclude.Include.NON_NULL)
33 final JsonReaction reaction;
34
35 @JsonProperty
36 @JsonInclude(JsonInclude.Include.NON_NULL)
37 final JsonQuote quote;
38
39 @JsonProperty
40 @JsonInclude(JsonInclude.Include.NON_NULL)
41 final List<JsonMention> mentions;
42
43 @JsonProperty
44 @JsonInclude(JsonInclude.Include.NON_NULL)
45 final List<JsonAttachment> attachments;
46
47 @JsonProperty
48 @JsonInclude(JsonInclude.Include.NON_NULL)
49 final JsonSticker sticker;
50
51 @JsonProperty
52 @JsonInclude(JsonInclude.Include.NON_NULL)
53 final JsonRemoteDelete remoteDelete;
54
55 @JsonProperty
56 @JsonInclude(JsonInclude.Include.NON_NULL)
57 final List<JsonSharedContact> contacts;
58
59 @JsonProperty
60 @JsonInclude(JsonInclude.Include.NON_NULL)
61 final JsonGroupInfo groupInfo;
62
63 JsonDataMessage(SignalServiceDataMessage dataMessage, Manager m) {
64 this.timestamp = dataMessage.getTimestamp();
65 if (dataMessage.getGroupContext().isPresent()) {
66 final SignalServiceGroupContext groupContext = dataMessage.getGroupContext().get();
67 if (groupContext.getGroupV1().isPresent()) {
68 SignalServiceGroup groupInfo = groupContext.getGroupV1().get();
69 this.groupInfo = new JsonGroupInfo(groupInfo);
70 } else if (groupContext.getGroupV2().isPresent()) {
71 SignalServiceGroupV2 groupInfo = groupContext.getGroupV2().get();
72 this.groupInfo = new JsonGroupInfo(groupInfo);
73 } else {
74 this.groupInfo = null;
75 }
76 } else {
77 this.groupInfo = null;
78 }
79 this.message = dataMessage.getBody().orNull();
80 this.expiresInSeconds = dataMessage.getExpiresInSeconds();
81 this.viewOnce = dataMessage.isViewOnce();
82 this.reaction = dataMessage.getReaction().isPresent()
83 ? new JsonReaction(dataMessage.getReaction().get(), m)
84 : null;
85 this.quote = dataMessage.getQuote().isPresent() ? new JsonQuote(dataMessage.getQuote().get(), m) : null;
86 if (dataMessage.getMentions().isPresent()) {
87 this.mentions = dataMessage.getMentions()
88 .get()
89 .stream()
90 .map(mention -> new JsonMention(mention, m))
91 .collect(Collectors.toList());
92 } else {
93 this.mentions = List.of();
94 }
95 remoteDelete = dataMessage.getRemoteDelete().isPresent() ? new JsonRemoteDelete(dataMessage.getRemoteDelete()
96 .get()) : null;
97 if (dataMessage.getAttachments().isPresent()) {
98 this.attachments = dataMessage.getAttachments()
99 .get()
100 .stream()
101 .map(JsonAttachment::new)
102 .collect(Collectors.toList());
103 } else {
104 this.attachments = List.of();
105 }
106 this.sticker = dataMessage.getSticker().isPresent() ? new JsonSticker(dataMessage.getSticker().get()) : null;
107
108 if (dataMessage.getSharedContacts().isPresent()) {
109 this.contacts = dataMessage.getSharedContacts()
110 .get()
111 .stream()
112 .map(JsonSharedContact::new)
113 .collect(Collectors.toList());
114 } else {
115 this.contacts = List.of();
116 }
117 }
118
119 public JsonDataMessage(Signal.MessageReceived messageReceived) {
120 timestamp = messageReceived.getTimestamp();
121 message = messageReceived.getMessage();
122 groupInfo = messageReceived.getGroupId().length > 0 ? new JsonGroupInfo(messageReceived.getGroupId()) : null;
123 expiresInSeconds = null;
124 viewOnce = null;
125 remoteDelete = null;
126 reaction = null; // TODO Replace these 5 with the proper commands
127 quote = null;
128 mentions = null;
129 sticker = null;
130 contacts = null;
131 attachments = messageReceived.getAttachments().stream().map(JsonAttachment::new).collect(Collectors.toList());
132 }
133
134 public JsonDataMessage(Signal.SyncMessageReceived messageReceived) {
135 timestamp = messageReceived.getTimestamp();
136 message = messageReceived.getMessage();
137 groupInfo = messageReceived.getGroupId().length > 0 ? new JsonGroupInfo(messageReceived.getGroupId()) : null;
138 expiresInSeconds = null;
139 viewOnce = null;
140 remoteDelete = null;
141 reaction = null; // TODO Replace these 5 with the proper commands
142 quote = null;
143 mentions = null;
144 sticker = null;
145 contacts = null;
146 attachments = messageReceived.getAttachments().stream().map(JsonAttachment::new).collect(Collectors.toList());
147 }
148 }