]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonDataMessage.java
4636d80896b27051e4cc4aa0c2937aea5c0b5ecc
[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 JsonGroupInfo groupInfo;
54
55 JsonDataMessage(SignalServiceDataMessage dataMessage, Manager m) {
56 this.timestamp = dataMessage.getTimestamp();
57 if (dataMessage.getGroupContext().isPresent()) {
58 final SignalServiceGroupContext groupContext = dataMessage.getGroupContext().get();
59 if (groupContext.getGroupV1().isPresent()) {
60 SignalServiceGroup groupInfo = groupContext.getGroupV1().get();
61 this.groupInfo = new JsonGroupInfo(groupInfo);
62 } else if (groupContext.getGroupV2().isPresent()) {
63 SignalServiceGroupV2 groupInfo = groupContext.getGroupV2().get();
64 this.groupInfo = new JsonGroupInfo(groupInfo);
65 } else {
66 this.groupInfo = null;
67 }
68 } else {
69 this.groupInfo = null;
70 }
71 this.message = dataMessage.getBody().orNull();
72 this.expiresInSeconds = dataMessage.getExpiresInSeconds();
73 this.viewOnce = dataMessage.isViewOnce();
74 this.reaction = dataMessage.getReaction().isPresent()
75 ? new JsonReaction(dataMessage.getReaction().get(), m)
76 : null;
77 this.quote = dataMessage.getQuote().isPresent() ? new JsonQuote(dataMessage.getQuote().get(), m) : null;
78 if (dataMessage.getMentions().isPresent()) {
79 this.mentions = dataMessage.getMentions()
80 .get()
81 .stream()
82 .map(mention -> new JsonMention(mention, m))
83 .collect(Collectors.toList());
84 } else {
85 this.mentions = List.of();
86 }
87 if (dataMessage.getAttachments().isPresent()) {
88 this.attachments = dataMessage.getAttachments()
89 .get()
90 .stream()
91 .map(JsonAttachment::new)
92 .collect(Collectors.toList());
93 } else {
94 this.attachments = List.of();
95 }
96 this.sticker = dataMessage.getSticker().isPresent() ? new JsonSticker(dataMessage.getSticker().get()) : null;
97 }
98
99 public JsonDataMessage(Signal.MessageReceived messageReceived) {
100 timestamp = messageReceived.getTimestamp();
101 message = messageReceived.getMessage();
102 groupInfo = messageReceived.getGroupId().length > 0 ? new JsonGroupInfo(messageReceived.getGroupId()) : null;
103 expiresInSeconds = null;
104 viewOnce = null;
105 reaction = null; // TODO Replace these 4 with the proper commands
106 quote = null;
107 mentions = null;
108 sticker = null;
109 attachments = messageReceived.getAttachments().stream().map(JsonAttachment::new).collect(Collectors.toList());
110 }
111
112 public JsonDataMessage(Signal.SyncMessageReceived messageReceived) {
113 timestamp = messageReceived.getTimestamp();
114 message = messageReceived.getMessage();
115 groupInfo = messageReceived.getGroupId().length > 0 ? new JsonGroupInfo(messageReceived.getGroupId()) : null;
116 expiresInSeconds = null;
117 viewOnce = null;
118 reaction = null; // TODO Replace these 4 with the proper commands
119 quote = null;
120 mentions = null;
121 sticker = null;
122 attachments = messageReceived.getAttachments().stream().map(JsonAttachment::new).collect(Collectors.toList());
123 }
124 }