1 package org
.asamk
.signal
.storage
.groups
;
3 import com
.fasterxml
.jackson
.annotation
.JsonProperty
;
4 import com
.fasterxml
.jackson
.core
.JsonGenerator
;
5 import com
.fasterxml
.jackson
.core
.JsonParser
;
6 import com
.fasterxml
.jackson
.databind
.DeserializationContext
;
7 import com
.fasterxml
.jackson
.databind
.JsonDeserializer
;
8 import com
.fasterxml
.jackson
.databind
.JsonNode
;
9 import com
.fasterxml
.jackson
.databind
.JsonSerializer
;
10 import com
.fasterxml
.jackson
.databind
.ObjectMapper
;
11 import com
.fasterxml
.jackson
.databind
.SerializerProvider
;
12 import com
.fasterxml
.jackson
.databind
.annotation
.JsonDeserialize
;
13 import com
.fasterxml
.jackson
.databind
.annotation
.JsonSerialize
;
15 import org
.whispersystems
.signalservice
.internal
.util
.Base64
;
17 import java
.io
.IOException
;
18 import java
.util
.ArrayList
;
19 import java
.util
.HashMap
;
20 import java
.util
.List
;
23 public class JsonGroupStore
{
25 private static final ObjectMapper jsonProcessor
= new ObjectMapper();
27 public static List
<GroupInfo
> groupsWithLegacyAvatarId
= new ArrayList
<>();
29 @JsonProperty("groups")
30 @JsonSerialize(using
= JsonGroupStore
.MapToListSerializer
.class)
31 @JsonDeserialize(using
= JsonGroupStore
.GroupsDeserializer
.class)
32 private Map
<String
, GroupInfo
> groups
= new HashMap
<>();
34 public void updateGroup(GroupInfo group
) {
35 groups
.put(Base64
.encodeBytes(group
.groupId
), group
);
38 public GroupInfo
getGroup(byte[] groupId
) {
39 return groups
.get(Base64
.encodeBytes(groupId
));
42 public List
<GroupInfo
> getGroups() {
43 return new ArrayList
<>(groups
.values());
46 private static class MapToListSerializer
extends JsonSerializer
<Map
<?
, ?
>> {
49 public void serialize(final Map
<?
, ?
> value
, final JsonGenerator jgen
, final SerializerProvider provider
) throws IOException
{
50 jgen
.writeObject(value
.values());
54 private static class GroupsDeserializer
extends JsonDeserializer
<Map
<String
, GroupInfo
>> {
57 public Map
<String
, GroupInfo
> deserialize(JsonParser jsonParser
, DeserializationContext deserializationContext
) throws IOException
{
58 Map
<String
, GroupInfo
> groups
= new HashMap
<>();
59 JsonNode node
= jsonParser
.getCodec().readTree(jsonParser
);
60 for (JsonNode n
: node
) {
61 GroupInfo g
= jsonProcessor
.treeToValue(n
, GroupInfo
.class);
62 // Check if a legacy avatarId exists
63 if (g
.getAvatarId() != 0) {
64 groupsWithLegacyAvatarId
.add(g
);
66 groups
.put(Base64
.encodeBytes(g
.groupId
), g
);