]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/storage/threads/LegacyJsonThreadStore.java
428e9e95059518bc9994f2c46d44d156fb60751a
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / storage / threads / LegacyJsonThreadStore.java
1 package org.asamk.signal.manager.storage.threads;
2
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;
14
15 import java.io.IOException;
16 import java.util.ArrayList;
17 import java.util.HashMap;
18 import java.util.List;
19 import java.util.Map;
20
21 public class LegacyJsonThreadStore {
22
23 private static final ObjectMapper jsonProcessor = new ObjectMapper();
24
25 @JsonProperty("threads")
26 @JsonSerialize(using = MapToListSerializer.class)
27 @JsonDeserialize(using = ThreadsDeserializer.class)
28 private final Map<String, LegacyThreadInfo> threads = new HashMap<>();
29
30 public List<LegacyThreadInfo> getThreads() {
31 return new ArrayList<>(threads.values());
32 }
33
34 private static class MapToListSerializer extends JsonSerializer<Map<?, ?>> {
35
36 @Override
37 public void serialize(
38 final Map<?, ?> value, final JsonGenerator jgen, final SerializerProvider provider
39 ) throws IOException {
40 jgen.writeObject(value.values());
41 }
42 }
43
44 private static class ThreadsDeserializer extends JsonDeserializer<Map<String, LegacyThreadInfo>> {
45
46 @Override
47 public Map<String, LegacyThreadInfo> deserialize(
48 JsonParser jsonParser, DeserializationContext deserializationContext
49 ) throws IOException {
50 var threads = new HashMap<String, LegacyThreadInfo>();
51 JsonNode node = jsonParser.getCodec().readTree(jsonParser);
52 for (var n : node) {
53 var t = jsonProcessor.treeToValue(n, LegacyThreadInfo.class);
54 threads.put(t.id, t);
55 }
56
57 return threads;
58 }
59 }
60 }