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
.SerializerProvider
;
10 import com
.fasterxml
.jackson
.databind
.annotation
.JsonDeserialize
;
11 import com
.fasterxml
.jackson
.databind
.annotation
.JsonSerialize
;
13 import java
.io
.IOException
;
14 import java
.util
.Base64
;
15 import java
.util
.Collection
;
16 import java
.util
.HashMap
;
19 public class StickerStore
{
21 @JsonSerialize(using
= StickersSerializer
.class)
22 @JsonDeserialize(using
= StickersDeserializer
.class)
23 private final Map
<byte[], Sticker
> stickers
= new HashMap
<>();
25 public Sticker
getSticker(byte[] packId
) {
26 return stickers
.get(packId
);
29 public void updateSticker(Sticker sticker
) {
30 stickers
.put(sticker
.getPackId(), sticker
);
33 private static class StickersSerializer
extends JsonSerializer
<Map
<byte[], Sticker
>> {
36 public void serialize(
37 final Map
<byte[], Sticker
> value
, final JsonGenerator jgen
, final SerializerProvider provider
38 ) throws IOException
{
39 final Collection
<Sticker
> stickers
= value
.values();
40 jgen
.writeStartArray(stickers
.size());
41 for (Sticker sticker
: stickers
) {
42 jgen
.writeStartObject();
43 jgen
.writeStringField("packId", Base64
.getEncoder().encodeToString(sticker
.getPackId()));
44 jgen
.writeStringField("packKey", Base64
.getEncoder().encodeToString(sticker
.getPackKey()));
45 jgen
.writeBooleanField("installed", sticker
.isInstalled());
46 jgen
.writeEndObject();
52 private static class StickersDeserializer
extends JsonDeserializer
<Map
<byte[], Sticker
>> {
55 public Map
<byte[], Sticker
> deserialize(
56 JsonParser jsonParser
, DeserializationContext deserializationContext
57 ) throws IOException
{
58 Map
<byte[], Sticker
> stickers
= new HashMap
<>();
59 JsonNode node
= jsonParser
.getCodec().readTree(jsonParser
);
60 for (JsonNode n
: node
) {
61 byte[] packId
= Base64
.getDecoder().decode(n
.get("packId").asText());
62 byte[] packKey
= Base64
.getDecoder().decode(n
.get("packKey").asText());
63 boolean installed
= n
.get("installed").asBoolean(false);
64 stickers
.put(packId
, new Sticker(packId
, packKey
, installed
));