1 package org
.asamk
.signal
.json
;
3 import com
.fasterxml
.jackson
.annotation
.JsonInclude
;
5 import org
.asamk
.Signal
;
6 import org
.asamk
.signal
.manager
.Manager
;
7 import org
.asamk
.signal
.util
.Util
;
8 import org
.whispersystems
.signalservice
.api
.messages
.multidevice
.SignalServiceSyncMessage
;
10 import java
.util
.Base64
;
11 import java
.util
.List
;
12 import java
.util
.stream
.Collectors
;
14 enum JsonSyncMessageType
{
20 record JsonSyncMessage(
21 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonSyncDataMessage sentMessage
,
22 @JsonInclude(JsonInclude
.Include
.NON_NULL
) List
<String
> blockedNumbers
,
23 @JsonInclude(JsonInclude
.Include
.NON_NULL
) List
<String
> blockedGroupIds
,
24 @JsonInclude(JsonInclude
.Include
.NON_NULL
) List
<JsonSyncReadMessage
> readMessages
,
25 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonSyncMessageType type
29 final JsonSyncDataMessage sentMessage
,
30 final List
<String
> blockedNumbers
,
31 final List
<String
> blockedGroupIds
,
32 final List
<JsonSyncReadMessage
> readMessages
,
33 final JsonSyncMessageType type
35 this.sentMessage
= sentMessage
;
36 this.blockedNumbers
= blockedNumbers
;
37 this.blockedGroupIds
= blockedGroupIds
;
38 this.readMessages
= readMessages
;
42 static JsonSyncMessage
from(SignalServiceSyncMessage syncMessage
, Manager m
) {
43 final var sentMessage
= syncMessage
.getSent().isPresent() ? JsonSyncDataMessage
.from(syncMessage
.getSent()
45 final List
<String
> blockedNumbers
;
46 final List
<String
> blockedGroupIds
;
47 if (syncMessage
.getBlockedList().isPresent()) {
48 final var base64
= Base64
.getEncoder();
49 blockedNumbers
= syncMessage
.getBlockedList()
53 .map(Util
::getLegacyIdentifier
)
54 .collect(Collectors
.toList());
55 blockedGroupIds
= syncMessage
.getBlockedList()
59 .map(base64
::encodeToString
)
60 .collect(Collectors
.toList());
62 blockedNumbers
= null;
63 blockedGroupIds
= null;
66 final var readMessages
= syncMessage
.getRead().isPresent() ? syncMessage
.getRead()
69 .map(JsonSyncReadMessage
::from
)
70 .collect(Collectors
.toList()) : null;
72 final JsonSyncMessageType type
;
73 if (syncMessage
.getContacts().isPresent()) {
74 type
= JsonSyncMessageType
.CONTACTS_SYNC
;
75 } else if (syncMessage
.getGroups().isPresent()) {
76 type
= JsonSyncMessageType
.GROUPS_SYNC
;
77 } else if (syncMessage
.getRequest().isPresent()) {
78 type
= JsonSyncMessageType
.REQUEST_SYNC
;
82 return new JsonSyncMessage(sentMessage
, blockedNumbers
, blockedGroupIds
, readMessages
, type
);
85 static JsonSyncMessage
from(Signal
.SyncMessageReceived messageReceived
) {
86 return new JsonSyncMessage(JsonSyncDataMessage
.from(messageReceived
), null, null, null, null);