X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/543dd984537c1c33e0fe622e3ffebae86d0ae793..32beb8a0bd51d2bd13b9687168ed08cad3b8eca1:/src/main/java/org/asamk/signal/JsonContactsStore.java diff --git a/src/main/java/org/asamk/signal/JsonContactsStore.java b/src/main/java/org/asamk/signal/JsonContactsStore.java new file mode 100644 index 00000000..e2807d8f --- /dev/null +++ b/src/main/java/org/asamk/signal/JsonContactsStore.java @@ -0,0 +1,57 @@ +package org.asamk.signal; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class JsonContactsStore { + @JsonProperty("contacts") + @JsonSerialize(using = JsonContactsStore.MapToListSerializer.class) + @JsonDeserialize(using = ContactsDeserializer.class) + private Map contacts = new HashMap<>(); + + private static final ObjectMapper jsonProcessot = new ObjectMapper(); + + void updateContact(ContactInfo contact) { + contacts.put(contact.number, contact); + } + + ContactInfo getContact(String number) { + ContactInfo c = contacts.get(number); + return c; + } + + List getContacts() { + return new ArrayList<>(contacts.values()); + } + + public static class MapToListSerializer extends JsonSerializer> { + @Override + public void serialize(final Map value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException { + jgen.writeObject(value.values()); + } + } + + public static class ContactsDeserializer extends JsonDeserializer> { + @Override + public Map deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { + Map contacts = new HashMap<>(); + JsonNode node = jsonParser.getCodec().readTree(jsonParser); + for (JsonNode n : node) { + ContactInfo c = jsonProcessot.treeToValue(n, ContactInfo.class); + contacts.put(c.number, c); + } + + return contacts; + } + } +}