1 package org
.asamk
.signal
.json
;
3 import com
.fasterxml
.jackson
.annotation
.JsonInclude
;
5 import org
.asamk
.Signal
;
6 import org
.asamk
.signal
.manager
.api
.MessageEnvelope
;
7 import org
.asamk
.signal
.manager
.groups
.GroupId
;
8 import org
.asamk
.signal
.manager
.storage
.recipients
.RecipientAddress
;
10 import java
.util
.List
;
11 import java
.util
.stream
.Collectors
;
13 enum JsonSyncMessageType
{
19 record JsonSyncMessage(
20 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonSyncDataMessage sentMessage
,
21 @JsonInclude(JsonInclude
.Include
.NON_NULL
) List
<String
> blockedNumbers
,
22 @JsonInclude(JsonInclude
.Include
.NON_NULL
) List
<String
> blockedGroupIds
,
23 @JsonInclude(JsonInclude
.Include
.NON_NULL
) List
<JsonSyncReadMessage
> readMessages
,
24 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonSyncMessageType type
28 final JsonSyncDataMessage sentMessage
,
29 final List
<String
> blockedNumbers
,
30 final List
<String
> blockedGroupIds
,
31 final List
<JsonSyncReadMessage
> readMessages
,
32 final JsonSyncMessageType type
34 this.sentMessage
= sentMessage
;
35 this.blockedNumbers
= blockedNumbers
;
36 this.blockedGroupIds
= blockedGroupIds
;
37 this.readMessages
= readMessages
;
41 static JsonSyncMessage
from(MessageEnvelope
.Sync syncMessage
) {
42 final var sentMessage
= syncMessage
.sent().isPresent()
43 ? JsonSyncDataMessage
.from(syncMessage
.sent().get())
45 final List
<String
> blockedNumbers
;
46 final List
<String
> blockedGroupIds
;
47 if (syncMessage
.blocked().isPresent()) {
48 blockedNumbers
= syncMessage
.blocked()
52 .map(RecipientAddress
::getLegacyIdentifier
)
53 .collect(Collectors
.toList());
54 blockedGroupIds
= syncMessage
.blocked()
58 .map(GroupId
::toBase64
)
59 .collect(Collectors
.toList());
61 blockedNumbers
= null;
62 blockedGroupIds
= null;
65 final var readMessages
= syncMessage
.read().size() > 0 ? syncMessage
.read()
67 .map(JsonSyncReadMessage
::from
)
68 .collect(Collectors
.toList()) : null;
70 final JsonSyncMessageType type
;
71 if (syncMessage
.contacts().isPresent()) {
72 type
= JsonSyncMessageType
.CONTACTS_SYNC
;
73 } else if (syncMessage
.groups().isPresent()) {
74 type
= JsonSyncMessageType
.GROUPS_SYNC
;
78 return new JsonSyncMessage(sentMessage
, blockedNumbers
, blockedGroupIds
, readMessages
, type
);
81 static JsonSyncMessage
from(Signal
.SyncMessageReceived messageReceived
) {
82 return new JsonSyncMessage(JsonSyncDataMessage
.from(messageReceived
), null, null, null, null);