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
.HashMap
;
18 public class StickerStore
{
20 @JsonSerialize(using
= StickersSerializer
.class)
21 @JsonDeserialize(using
= StickersDeserializer
.class)
22 private final Map
<byte[], Sticker
> stickers
= new HashMap
<>();
24 public Sticker
getSticker(byte[] packId
) {
25 return stickers
.get(packId
);
28 public void updateSticker(Sticker sticker
) {
29 stickers
.put(sticker
.getPackId(), sticker
);
32 private static class StickersSerializer
extends JsonSerializer
<Map
<byte[], Sticker
>> {
35 public void serialize(
36 final Map
<byte[], Sticker
> value
, final JsonGenerator jgen
, final SerializerProvider provider
37 ) throws IOException
{
38 final var stickers
= value
.values();
39 jgen
.writeStartArray(stickers
.size());
40 for (var sticker
: stickers
) {
41 jgen
.writeStartObject();
42 jgen
.writeStringField("packId", Base64
.getEncoder().encodeToString(sticker
.getPackId()));
43 jgen
.writeStringField("packKey", Base64
.getEncoder().encodeToString(sticker
.getPackKey()));
44 jgen
.writeBooleanField("installed", sticker
.isInstalled());
45 jgen
.writeEndObject();
51 private static class StickersDeserializer
extends JsonDeserializer
<Map
<byte[], Sticker
>> {
54 public Map
<byte[], Sticker
> deserialize(
55 JsonParser jsonParser
, DeserializationContext deserializationContext
56 ) throws IOException
{
57 var stickers
= new HashMap
<byte[], Sticker
>();
58 JsonNode node
= jsonParser
.getCodec().readTree(jsonParser
);
60 var packId
= Base64
.getDecoder().decode(n
.get("packId").asText());
61 var packKey
= Base64
.getDecoder().decode(n
.get("packKey").asText());
62 var installed
= n
.get("installed").asBoolean(false);
63 stickers
.put(packId
, new Sticker(packId
, packKey
, installed
));