]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonDataMessage.java
Make fields in json classes final and omit unnecessary nulls when serializing
[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 JsonReaction reaction;
30
31 @JsonProperty
32 @JsonInclude(JsonInclude.Include.NON_NULL)
33 final JsonQuote quote;
34
35 @JsonProperty
36 @JsonInclude(JsonInclude.Include.NON_NULL)
37 final List<JsonMention> mentions;
38
39 @JsonProperty
40 @JsonInclude(JsonInclude.Include.NON_NULL)
41 final List<JsonAttachment> attachments;
42
43 @JsonProperty
44 @JsonInclude(JsonInclude.Include.NON_NULL)
45 final JsonSticker sticker;
46
47 @JsonProperty
48 @JsonInclude(JsonInclude.Include.NON_NULL)
49 final JsonGroupInfo groupInfo;
50
51 JsonDataMessage(SignalServiceDataMessage dataMessage, Manager m) {
52 this.timestamp = dataMessage.getTimestamp();
53 if (dataMessage.getGroupContext().isPresent()) {
54 final SignalServiceGroupContext groupContext = dataMessage.getGroupContext().get();
55 if (groupContext.getGroupV1().isPresent()) {
56 SignalServiceGroup groupInfo = groupContext.getGroupV1().get();
57 this.groupInfo = new JsonGroupInfo(groupInfo);
58 } else if (groupContext.getGroupV2().isPresent()) {
59 SignalServiceGroupV2 groupInfo = groupContext.getGroupV2().get();
60 this.groupInfo = new JsonGroupInfo(groupInfo);
61 } else {
62 this.groupInfo = null;
63 }
64 } else {
65 this.groupInfo = null;
66 }
67 this.message = dataMessage.getBody().orNull();
68 this.expiresInSeconds = dataMessage.getExpiresInSeconds();
69 this.reaction = dataMessage.getReaction().isPresent()
70 ? new JsonReaction(dataMessage.getReaction().get(), m)
71 : null;
72 this.quote = dataMessage.getQuote().isPresent() ? new JsonQuote(dataMessage.getQuote().get(), m) : null;
73 if (dataMessage.getMentions().isPresent()) {
74 this.mentions = dataMessage.getMentions()
75 .get()
76 .stream()
77 .map(mention -> new JsonMention(mention, m))
78 .collect(Collectors.toList());
79 } else {
80 this.mentions = List.of();
81 }
82 if (dataMessage.getAttachments().isPresent()) {
83 this.attachments = dataMessage.getAttachments()
84 .get()
85 .stream()
86 .map(JsonAttachment::new)
87 .collect(Collectors.toList());
88 } else {
89 this.attachments = List.of();
90 }
91 this.sticker = dataMessage.getSticker().isPresent() ? new JsonSticker(dataMessage.getSticker().get()) : null;
92 }
93
94 public JsonDataMessage(Signal.MessageReceived messageReceived) {
95 timestamp = messageReceived.getTimestamp();
96 message = messageReceived.getMessage();
97 groupInfo = messageReceived.getGroupId().length > 0 ? new JsonGroupInfo(messageReceived.getGroupId()) : null;
98 expiresInSeconds = null;
99 reaction = null; // TODO Replace these 4 with the proper commands
100 quote = null;
101 mentions = null;
102 sticker = null;
103 attachments = messageReceived.getAttachments().stream().map(JsonAttachment::new).collect(Collectors.toList());
104 }
105
106 public JsonDataMessage(Signal.SyncMessageReceived messageReceived) {
107 timestamp = messageReceived.getTimestamp();
108 message = messageReceived.getMessage();
109 groupInfo = messageReceived.getGroupId().length > 0 ? new JsonGroupInfo(messageReceived.getGroupId()) : null;
110 expiresInSeconds = null;
111 reaction = null; // TODO Replace these 4 with the proper commands
112 quote = null;
113 mentions = null;
114 sticker = null;
115 attachments = messageReceived.getAttachments().stream().map(JsonAttachment::new).collect(Collectors.toList());
116 }
117 }