1 package org
.asamk
.signal
.json
;
3 import com
.fasterxml
.jackson
.annotation
.JsonInclude
;
4 import com
.fasterxml
.jackson
.annotation
.JsonProperty
;
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
;
11 import java
.util
.Base64
;
12 import java
.util
.List
;
13 import java
.util
.stream
.Collectors
;
15 import static org
.asamk
.signal
.util
.Util
.getLegacyIdentifier
;
17 enum JsonSyncMessageType
{
23 class JsonSyncMessage
{
26 @JsonInclude(JsonInclude
.Include
.NON_NULL
)
27 final JsonSyncDataMessage sentMessage
;
30 @JsonInclude(JsonInclude
.Include
.NON_NULL
)
31 final List
<String
> blockedNumbers
;
34 @JsonInclude(JsonInclude
.Include
.NON_NULL
)
35 final List
<String
> blockedGroupIds
;
38 @JsonInclude(JsonInclude
.Include
.NON_NULL
)
39 final List
<JsonSyncReadMessage
> readMessages
;
42 @JsonInclude(JsonInclude
.Include
.NON_NULL
)
43 final JsonSyncMessageType type
;
45 JsonSyncMessage(SignalServiceSyncMessage syncMessage
, Manager m
) {
46 this.sentMessage
= syncMessage
.getSent().isPresent()
47 ?
new JsonSyncDataMessage(syncMessage
.getSent().get(), m
)
49 if (syncMessage
.getBlockedList().isPresent()) {
50 final var base64
= Base64
.getEncoder();
51 this.blockedNumbers
= syncMessage
.getBlockedList()
55 .map(Util
::getLegacyIdentifier
)
56 .collect(Collectors
.toList());
57 this.blockedGroupIds
= syncMessage
.getBlockedList()
61 .map(base64
::encodeToString
)
62 .collect(Collectors
.toList());
64 this.blockedNumbers
= null;
65 this.blockedGroupIds
= null;
67 if (syncMessage
.getRead().isPresent()) {
68 this.readMessages
= syncMessage
.getRead()
71 .map(message
-> new JsonSyncReadMessage(getLegacyIdentifier(message
.getSender()),
72 message
.getTimestamp()))
73 .collect(Collectors
.toList());
75 this.readMessages
= null;
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
;
89 JsonSyncMessage(Signal
.SyncMessageReceived messageReceived
) {
90 this.sentMessage
= new JsonSyncDataMessage(messageReceived
);
91 this.blockedNumbers
= null;
92 this.blockedGroupIds
= null;
93 this.readMessages
= null;