1 package org.asamk.signal.manager.storage.recipients;
2 
3 import com.fasterxml.jackson.annotation.JsonProperty;
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.annotation.JsonDeserialize;
9 
10 import org.whispersystems.signalservice.api.util.UuidUtil;
11 
12 import java.io.IOException;
13 import java.util.ArrayList;
14 import java.util.List;
15 
16 public class LegacyRecipientStore {
17 
18     @JsonProperty("recipientStore")
19     @JsonDeserialize(using = RecipientStoreDeserializer.class)
20     private final List<RecipientAddress> addresses = new ArrayList<>();
21 
getAddresses()22     public List<RecipientAddress> getAddresses() {
23         return addresses;
24     }
25 
26     public static class RecipientStoreDeserializer extends JsonDeserializer<List<RecipientAddress>> {
27 
28         @Override
deserialize( JsonParser jsonParser, DeserializationContext deserializationContext )29         public List<RecipientAddress> deserialize(
30                 JsonParser jsonParser, DeserializationContext deserializationContext
31         ) throws IOException {
32             JsonNode node = jsonParser.getCodec().readTree(jsonParser);
33 
34             var addresses = new ArrayList<RecipientAddress>();
35 
36             if (node.isArray()) {
37                 for (var recipient : node) {
38                     var recipientName = recipient.get("name").asText();
39                     var uuid = UuidUtil.parseOrThrow(recipient.get("uuid").asText());
40                     addresses.add(new RecipientAddress(uuid, recipientName));
41                 }
42             }
43 
44             return addresses;
45         }
46     }
47 }
48