]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonSyncMessage.java
Update libsignal-service-java
[signal-cli] / src / main / java / org / asamk / signal / json / JsonSyncMessage.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.asamk.signal.util.Util;
9 import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage;
10
11 import java.util.Base64;
12 import java.util.List;
13 import java.util.stream.Collectors;
14
15 import static org.asamk.signal.util.Util.getLegacyIdentifier;
16
17 enum JsonSyncMessageType {
18 CONTACTS_SYNC,
19 GROUPS_SYNC,
20 REQUEST_SYNC
21 }
22
23 class JsonSyncMessage {
24
25 @JsonProperty
26 @JsonInclude(JsonInclude.Include.NON_NULL)
27 final JsonSyncDataMessage sentMessage;
28
29 @JsonProperty
30 @JsonInclude(JsonInclude.Include.NON_NULL)
31 final List<String> blockedNumbers;
32
33 @JsonProperty
34 @JsonInclude(JsonInclude.Include.NON_NULL)
35 final List<String> blockedGroupIds;
36
37 @JsonProperty
38 @JsonInclude(JsonInclude.Include.NON_NULL)
39 final List<JsonSyncReadMessage> readMessages;
40
41 @JsonProperty
42 @JsonInclude(JsonInclude.Include.NON_NULL)
43 final JsonSyncMessageType type;
44
45 JsonSyncMessage(SignalServiceSyncMessage syncMessage, Manager m) {
46 this.sentMessage = syncMessage.getSent().isPresent()
47 ? new JsonSyncDataMessage(syncMessage.getSent().get(), m)
48 : null;
49 if (syncMessage.getBlockedList().isPresent()) {
50 final var base64 = Base64.getEncoder();
51 this.blockedNumbers = syncMessage.getBlockedList()
52 .get()
53 .getAddresses()
54 .stream()
55 .map(Util::getLegacyIdentifier)
56 .collect(Collectors.toList());
57 this.blockedGroupIds = syncMessage.getBlockedList()
58 .get()
59 .getGroupIds()
60 .stream()
61 .map(base64::encodeToString)
62 .collect(Collectors.toList());
63 } else {
64 this.blockedNumbers = null;
65 this.blockedGroupIds = null;
66 }
67 if (syncMessage.getRead().isPresent()) {
68 this.readMessages = syncMessage.getRead()
69 .get()
70 .stream()
71 .map(message -> new JsonSyncReadMessage(getLegacyIdentifier(message.getSender()),
72 message.getTimestamp()))
73 .collect(Collectors.toList());
74 } else {
75 this.readMessages = null;
76 }
77
78 if (syncMessage.getContacts().isPresent()) {
79 this.type = JsonSyncMessageType.CONTACTS_SYNC;
80 } else if (syncMessage.getGroups().isPresent()) {
81 this.type = JsonSyncMessageType.GROUPS_SYNC;
82 } else if (syncMessage.getRequest().isPresent()) {
83 this.type = JsonSyncMessageType.REQUEST_SYNC;
84 } else {
85 this.type = null;
86 }
87 }
88
89 JsonSyncMessage(Signal.SyncMessageReceived messageReceived) {
90 this.sentMessage = new JsonSyncDataMessage(messageReceived);
91 this.blockedNumbers = null;
92 this.blockedGroupIds = null;
93 this.readMessages = null;
94 this.type = null;
95 }
96 }