1 package org
.asamk
.signal
.manager
.storage
.stickers
;
3 import com
.fasterxml
.jackson
.core
.JsonGenerator
;
4 import com
.fasterxml
.jackson
.core
.JsonParser
;
5 import com
.fasterxml
.jackson
.databind
.DeserializationContext
;
6 import com
.fasterxml
.jackson
.databind
.JsonDeserializer
;
7 import com
.fasterxml
.jackson
.databind
.JsonNode
;
8 import com
.fasterxml
.jackson
.databind
.JsonSerializer
;
9 import com
.fasterxml
.jackson
.databind
.ObjectMapper
;
10 import com
.fasterxml
.jackson
.databind
.SerializerProvider
;
11 import com
.fasterxml
.jackson
.databind
.annotation
.JsonDeserialize
;
12 import com
.fasterxml
.jackson
.databind
.annotation
.JsonSerialize
;
14 import org
.whispersystems
.util
.Base64
;
16 import java
.io
.IOException
;
17 import java
.util
.Collection
;
18 import java
.util
.HashMap
;
21 public class StickerStore
{
23 private static final ObjectMapper jsonProcessor
= new ObjectMapper();
25 @JsonSerialize(using
= StickersSerializer
.class)
26 @JsonDeserialize(using
= StickersDeserializer
.class)
27 private final Map
<byte[], Sticker
> stickers
= new HashMap
<>();
29 public Sticker
getSticker(byte[] packId
) {
30 return stickers
.get(packId
);
33 public void updateSticker(Sticker sticker
) {
34 stickers
.put(sticker
.getPackId(), sticker
);
37 private static class StickersSerializer
extends JsonSerializer
<Map
<byte[], Sticker
>> {
40 public void serialize(
41 final Map
<byte[], Sticker
> value
, final JsonGenerator jgen
, final SerializerProvider provider
42 ) throws IOException
{
43 final Collection
<Sticker
> stickers
= value
.values();
44 jgen
.writeStartArray(stickers
.size());
45 for (Sticker sticker
: stickers
) {
46 jgen
.writeStartObject();
47 jgen
.writeStringField("packId", Base64
.encodeBytes(sticker
.getPackId()));
48 jgen
.writeStringField("packKey", Base64
.encodeBytes(sticker
.getPackKey()));
49 jgen
.writeBooleanField("installed", sticker
.isInstalled());
50 jgen
.writeEndObject();
56 private static class StickersDeserializer
extends JsonDeserializer
<Map
<byte[], Sticker
>> {
59 public Map
<byte[], Sticker
> deserialize(
60 JsonParser jsonParser
, DeserializationContext deserializationContext
61 ) throws IOException
{
62 Map
<byte[], Sticker
> stickers
= new HashMap
<>();
63 JsonNode node
= jsonParser
.getCodec().readTree(jsonParser
);
64 for (JsonNode n
: node
) {
65 byte[] packId
= Base64
.decode(n
.get("packId").asText());
66 byte[] packKey
= Base64
.decode(n
.get("packKey").asText());
67 boolean installed
= n
.get("installed").asBoolean(false);
68 stickers
.put(packId
, new Sticker(packId
, packKey
, installed
));