X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/ae41d0c5026fe868c6198e1005344fc78b6e0a2c..8bcd8d87d219ae0496986cba4bd6b89f3b2ad6f6:/src/main/java/org/asamk/signal/json/JsonSyncMessage.java diff --git a/src/main/java/org/asamk/signal/json/JsonSyncMessage.java b/src/main/java/org/asamk/signal/json/JsonSyncMessage.java index 27766bda..5c951f0f 100644 --- a/src/main/java/org/asamk/signal/json/JsonSyncMessage.java +++ b/src/main/java/org/asamk/signal/json/JsonSyncMessage.java @@ -1,12 +1,16 @@ package org.asamk.signal.json; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; + import org.asamk.Signal; -import org.whispersystems.signalservice.api.messages.multidevice.ReadMessage; +import org.asamk.signal.manager.Manager; +import org.asamk.signal.util.Util; import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage; -import org.whispersystems.signalservice.api.push.SignalServiceAddress; -import java.util.ArrayList; +import java.util.Base64; import java.util.List; +import java.util.stream.Collectors; enum JsonSyncMessageType { CONTACTS_SYNC, @@ -16,23 +20,56 @@ enum JsonSyncMessageType { class JsonSyncMessage { - JsonSyncDataMessage sentMessage; - List blockedNumbers; - List readMessages; - JsonSyncMessageType type; + @JsonProperty + @JsonInclude(JsonInclude.Include.NON_NULL) + final JsonSyncDataMessage sentMessage; - JsonSyncMessage(SignalServiceSyncMessage syncMessage) { - if (syncMessage.getSent().isPresent()) { - this.sentMessage = new JsonSyncDataMessage(syncMessage.getSent().get()); - } + @JsonProperty + @JsonInclude(JsonInclude.Include.NON_NULL) + final List blockedNumbers; + + @JsonProperty + @JsonInclude(JsonInclude.Include.NON_NULL) + final List blockedGroupIds; + + @JsonProperty + @JsonInclude(JsonInclude.Include.NON_NULL) + final List readMessages; + + @JsonProperty + @JsonInclude(JsonInclude.Include.NON_NULL) + final JsonSyncMessageType type; + + JsonSyncMessage(SignalServiceSyncMessage syncMessage, Manager m) { + this.sentMessage = syncMessage.getSent().isPresent() + ? new JsonSyncDataMessage(syncMessage.getSent().get(), m) + : null; if (syncMessage.getBlockedList().isPresent()) { - this.blockedNumbers = new ArrayList<>(syncMessage.getBlockedList().get().getAddresses().size()); - for (SignalServiceAddress address : syncMessage.getBlockedList().get().getAddresses()) { - this.blockedNumbers.add(address.getNumber().get()); - } + final var base64 = Base64.getEncoder(); + this.blockedNumbers = syncMessage.getBlockedList() + .get() + .getAddresses() + .stream() + .map(Util::getLegacyIdentifier) + .collect(Collectors.toList()); + this.blockedGroupIds = syncMessage.getBlockedList() + .get() + .getGroupIds() + .stream() + .map(base64::encodeToString) + .collect(Collectors.toList()); + } else { + this.blockedNumbers = null; + this.blockedGroupIds = null; } if (syncMessage.getRead().isPresent()) { - this.readMessages = syncMessage.getRead().get(); + this.readMessages = syncMessage.getRead() + .get() + .stream() + .map(JsonSyncReadMessage::new) + .collect(Collectors.toList()); + } else { + this.readMessages = null; } if (syncMessage.getContacts().isPresent()) { @@ -41,10 +78,16 @@ class JsonSyncMessage { this.type = JsonSyncMessageType.GROUPS_SYNC; } else if (syncMessage.getRequest().isPresent()) { this.type = JsonSyncMessageType.REQUEST_SYNC; + } else { + this.type = null; } } JsonSyncMessage(Signal.SyncMessageReceived messageReceived) { - sentMessage = new JsonSyncDataMessage(messageReceived); + this.sentMessage = new JsonSyncDataMessage(messageReceived); + this.blockedNumbers = null; + this.blockedGroupIds = null; + this.readMessages = null; + this.type = null; } }