this.writer = new OutputStreamWriter(writer, StandardCharsets.UTF_8);
objectMapper = new ObjectMapper();
- objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+ objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.PUBLIC_ONLY);
objectMapper.disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET);
}
package org.asamk.signal.json;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
import org.whispersystems.signalservice.api.messages.SignalServiceAttachment;
import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer;
+import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentStream;
class JsonAttachment {
- String contentType;
- String filename;
- String id;
- int size;
+ @JsonProperty
+ final String contentType;
+
+ @JsonProperty
+ final String filename;
+
+ @JsonProperty
+ final String id;
+
+ @JsonProperty
+ final Long size;
JsonAttachment(SignalServiceAttachment attachment) {
this.contentType = attachment.getContentType();
- final SignalServiceAttachmentPointer pointer = attachment.asPointer();
if (attachment.isPointer()) {
- this.id = String.valueOf(pointer.getRemoteId());
- if (pointer.getFileName().isPresent()) {
- this.filename = pointer.getFileName().get();
- }
- if (pointer.getSize().isPresent()) {
- this.size = pointer.getSize().get();
- }
+ final SignalServiceAttachmentPointer pointer = attachment.asPointer();
+ this.id = pointer.getRemoteId().toString();
+ this.filename = pointer.getFileName().orNull();
+ this.size = pointer.getSize().transform(Integer::longValue).orNull();
+ } else {
+ final SignalServiceAttachmentStream stream = attachment.asStream();
+ this.id = null;
+ this.filename = stream.getFileName().orNull();
+ this.size = stream.getLength();
}
}
JsonAttachment(String filename) {
this.filename = filename;
+ this.contentType = null;
+ this.id = null;
+ this.size = null;
}
}
package org.asamk.signal.json;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
import org.whispersystems.signalservice.api.messages.calls.AnswerMessage;
import org.whispersystems.signalservice.api.messages.calls.BusyMessage;
import org.whispersystems.signalservice.api.messages.calls.HangupMessage;
class JsonCallMessage {
- OfferMessage offerMessage;
- AnswerMessage answerMessage;
- BusyMessage busyMessage;
- HangupMessage hangupMessage;
- List<IceUpdateMessage> iceUpdateMessages;
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final OfferMessage offerMessage;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final AnswerMessage answerMessage;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final BusyMessage busyMessage;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final HangupMessage hangupMessage;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final List<IceUpdateMessage> iceUpdateMessages;
JsonCallMessage(SignalServiceCallMessage callMessage) {
- if (callMessage.getOfferMessage().isPresent()) {
- this.offerMessage = callMessage.getOfferMessage().get();
- }
- if (callMessage.getAnswerMessage().isPresent()) {
- this.answerMessage = callMessage.getAnswerMessage().get();
- }
- if (callMessage.getBusyMessage().isPresent()) {
- this.busyMessage = callMessage.getBusyMessage().get();
- }
- if (callMessage.getHangupMessage().isPresent()) {
- this.hangupMessage = callMessage.getHangupMessage().get();
- }
- if (callMessage.getIceUpdateMessages().isPresent()) {
- this.iceUpdateMessages = callMessage.getIceUpdateMessages().get();
- }
+ this.offerMessage = callMessage.getOfferMessage().orNull();
+ this.answerMessage = callMessage.getAnswerMessage().orNull();
+ this.busyMessage = callMessage.getBusyMessage().orNull();
+ this.hangupMessage = callMessage.getHangupMessage().orNull();
+ this.iceUpdateMessages = callMessage.getIceUpdateMessages().orNull();
}
}
package org.asamk.signal.json;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
import org.asamk.Signal;
import org.asamk.signal.manager.Manager;
import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
import org.whispersystems.signalservice.api.messages.SignalServiceGroup;
+import org.whispersystems.signalservice.api.messages.SignalServiceGroupContext;
import org.whispersystems.signalservice.api.messages.SignalServiceGroupV2;
import java.util.List;
class JsonDataMessage {
- long timestamp;
- String message;
- int expiresInSeconds;
+ @JsonProperty
+ final long timestamp;
+
+ @JsonProperty
+ final String message;
+
+ @JsonProperty
+ final Integer expiresInSeconds;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final JsonReaction reaction;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final JsonQuote quote;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final List<JsonMention> mentions;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final List<JsonAttachment> attachments;
- JsonReaction reaction;
- JsonQuote quote;
- List<JsonMention> mentions;
- List<JsonAttachment> attachments;
- JsonSticker sticker;
- JsonGroupInfo groupInfo;
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final JsonSticker sticker;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final JsonGroupInfo groupInfo;
JsonDataMessage(SignalServiceDataMessage dataMessage, Manager m) {
this.timestamp = dataMessage.getTimestamp();
if (dataMessage.getGroupContext().isPresent()) {
- if (dataMessage.getGroupContext().get().getGroupV1().isPresent()) {
- SignalServiceGroup groupInfo = dataMessage.getGroupContext().get().getGroupV1().get();
+ final SignalServiceGroupContext groupContext = dataMessage.getGroupContext().get();
+ if (groupContext.getGroupV1().isPresent()) {
+ SignalServiceGroup groupInfo = groupContext.getGroupV1().get();
this.groupInfo = new JsonGroupInfo(groupInfo);
- } else if (dataMessage.getGroupContext().get().getGroupV2().isPresent()) {
- SignalServiceGroupV2 groupInfo = dataMessage.getGroupContext().get().getGroupV2().get();
+ } else if (groupContext.getGroupV2().isPresent()) {
+ SignalServiceGroupV2 groupInfo = groupContext.getGroupV2().get();
this.groupInfo = new JsonGroupInfo(groupInfo);
+ } else {
+ this.groupInfo = null;
}
+ } else {
+ this.groupInfo = null;
}
- if (dataMessage.getBody().isPresent()) {
- this.message = dataMessage.getBody().get();
- }
+ this.message = dataMessage.getBody().orNull();
this.expiresInSeconds = dataMessage.getExpiresInSeconds();
- if (dataMessage.getReaction().isPresent()) {
- this.reaction = new JsonReaction(dataMessage.getReaction().get(), m);
- }
- if (dataMessage.getQuote().isPresent()) {
- this.quote = new JsonQuote(dataMessage.getQuote().get(), m);
- }
+ this.reaction = dataMessage.getReaction().isPresent()
+ ? new JsonReaction(dataMessage.getReaction().get(), m)
+ : null;
+ this.quote = dataMessage.getQuote().isPresent() ? new JsonQuote(dataMessage.getQuote().get(), m) : null;
if (dataMessage.getMentions().isPresent()) {
this.mentions = dataMessage.getMentions()
.get()
} else {
this.attachments = List.of();
}
- if (dataMessage.getSticker().isPresent()) {
- this.sticker = new JsonSticker(dataMessage.getSticker().get());
- }
+ this.sticker = dataMessage.getSticker().isPresent() ? new JsonSticker(dataMessage.getSticker().get()) : null;
}
public JsonDataMessage(Signal.MessageReceived messageReceived) {
timestamp = messageReceived.getTimestamp();
message = messageReceived.getMessage();
groupInfo = messageReceived.getGroupId().length > 0 ? new JsonGroupInfo(messageReceived.getGroupId()) : null;
+ expiresInSeconds = null;
reaction = null; // TODO Replace these 4 with the proper commands
quote = null;
mentions = null;
timestamp = messageReceived.getTimestamp();
message = messageReceived.getMessage();
groupInfo = messageReceived.getGroupId().length > 0 ? new JsonGroupInfo(messageReceived.getGroupId()) : null;
+ expiresInSeconds = null;
reaction = null; // TODO Replace these 4 with the proper commands
quote = null;
mentions = null;
package org.asamk.signal.json;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
public class JsonError {
- String message;
+ @JsonProperty
+ final String message;
public JsonError(Throwable exception) {
this.message = exception.getMessage();
package org.asamk.signal.json;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
import org.asamk.signal.manager.groups.GroupUtils;
import org.whispersystems.signalservice.api.messages.SignalServiceGroup;
import org.whispersystems.signalservice.api.messages.SignalServiceGroupV2;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
-import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
+import java.util.stream.Collectors;
class JsonGroupInfo {
- String groupId;
- List<String> members;
- String name;
- String type;
+ @JsonProperty
+ final String groupId;
+
+ @JsonProperty
+ final String type;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final String name;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final List<String> members;
JsonGroupInfo(SignalServiceGroup groupInfo) {
this.groupId = Base64.getEncoder().encodeToString(groupInfo.getGroupId());
+ this.type = groupInfo.getType().toString();
+ this.name = groupInfo.getName().orNull();
if (groupInfo.getMembers().isPresent()) {
- this.members = new ArrayList<>(groupInfo.getMembers().get().size());
- for (SignalServiceAddress address : groupInfo.getMembers().get()) {
- this.members.add(address.getLegacyIdentifier());
- }
- }
- if (groupInfo.getName().isPresent()) {
- this.name = groupInfo.getName().get();
+ this.members = groupInfo.getMembers()
+ .get()
+ .stream()
+ .map(SignalServiceAddress::getLegacyIdentifier)
+ .collect(Collectors.toList());
+ } else {
+ this.members = null;
}
- this.type = groupInfo.getType().toString();
}
JsonGroupInfo(SignalServiceGroupV2 groupInfo) {
this.groupId = GroupUtils.getGroupIdV2(groupInfo.getMasterKey()).toBase64();
this.type = groupInfo.hasSignedGroupChange() ? "UPDATE" : "DELIVER";
+ this.members = null;
+ this.name = null;
}
JsonGroupInfo(byte[] groupId) {
this.groupId = Base64.getEncoder().encodeToString(groupId);
+ this.type = "DELIVER";
+ this.members = null;
+ this.name = null;
}
}
package org.asamk.signal.json;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
import org.asamk.signal.manager.Manager;
import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
public class JsonMention {
- String name;
- int start;
- int length;
+ @JsonProperty
+ final String name;
+
+ @JsonProperty
+ final int start;
+
+ @JsonProperty
+ final int length;
JsonMention(SignalServiceDataMessage.Mention mention, Manager m) {
this.name = m.resolveSignalServiceAddress(new SignalServiceAddress(mention.getUuid(), null))
package org.asamk.signal.json;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
import org.asamk.Signal;
import org.asamk.signal.manager.Manager;
import org.whispersystems.signalservice.api.messages.SignalServiceContent;
public class JsonMessageEnvelope {
- String source;
- int sourceDevice;
- String relay;
- long timestamp;
- JsonDataMessage dataMessage;
- JsonSyncMessage syncMessage;
- JsonCallMessage callMessage;
- JsonReceiptMessage receiptMessage;
+ @JsonProperty
+ final String source;
+
+ @JsonProperty
+ final Integer sourceDevice;
+
+ @JsonProperty
+ final String relay;
+
+ @JsonProperty
+ final long timestamp;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final JsonDataMessage dataMessage;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final JsonSyncMessage syncMessage;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final JsonCallMessage callMessage;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final JsonReceiptMessage receiptMessage;
public JsonMessageEnvelope(SignalServiceEnvelope envelope, SignalServiceContent content, Manager m) {
if (!envelope.isUnidentifiedSender() && envelope.hasSource()) {
SignalServiceAddress source = envelope.getSourceAddress();
this.source = source.getLegacyIdentifier();
- this.relay = source.getRelay().isPresent() ? source.getRelay().get() : null;
+ this.sourceDevice = envelope.getSourceDevice();
+ this.relay = source.getRelay().orNull();
+ } else if (envelope.isUnidentifiedSender() && content != null) {
+ this.source = content.getSender().getLegacyIdentifier();
+ this.sourceDevice = content.getSenderDevice();
+ this.relay = null;
+ } else {
+ this.source = null;
+ this.sourceDevice = null;
+ this.relay = null;
}
- this.sourceDevice = envelope.getSourceDevice();
this.timestamp = envelope.getTimestamp();
if (envelope.isReceipt()) {
this.receiptMessage = JsonReceiptMessage.deliveryReceipt(timestamp, List.of(timestamp));
+ } else if (content != null && content.getReceiptMessage().isPresent()) {
+ this.receiptMessage = new JsonReceiptMessage(content.getReceiptMessage().get());
+ } else {
+ this.receiptMessage = null;
}
- if (content != null) {
- if (envelope.isUnidentifiedSender()) {
- this.source = content.getSender().getLegacyIdentifier();
- this.sourceDevice = content.getSenderDevice();
- }
- if (content.getDataMessage().isPresent()) {
- this.dataMessage = new JsonDataMessage(content.getDataMessage().get(), m);
- }
- if (content.getSyncMessage().isPresent()) {
- this.syncMessage = new JsonSyncMessage(content.getSyncMessage().get(), m);
- }
- if (content.getCallMessage().isPresent()) {
- this.callMessage = new JsonCallMessage(content.getCallMessage().get());
- }
- if (content.getReceiptMessage().isPresent()) {
- this.receiptMessage = new JsonReceiptMessage(content.getReceiptMessage().get());
- }
- }
+
+ this.dataMessage = content != null && content.getDataMessage().isPresent()
+ ? new JsonDataMessage(content.getDataMessage().get(), m)
+ : null;
+ this.syncMessage = content != null && content.getSyncMessage().isPresent()
+ ? new JsonSyncMessage(content.getSyncMessage().get(), m)
+ : null;
+ this.callMessage = content != null && content.getCallMessage().isPresent()
+ ? new JsonCallMessage(content.getCallMessage().get())
+ : null;
}
public JsonMessageEnvelope(Signal.MessageReceived messageReceived) {
source = messageReceived.getSender();
+ sourceDevice = null;
+ relay = null;
timestamp = messageReceived.getTimestamp();
+ receiptMessage = null;
dataMessage = new JsonDataMessage(messageReceived);
+ syncMessage = null;
+ callMessage = null;
}
public JsonMessageEnvelope(Signal.ReceiptReceived receiptReceived) {
source = receiptReceived.getSender();
+ sourceDevice = null;
+ relay = null;
timestamp = receiptReceived.getTimestamp();
receiptMessage = JsonReceiptMessage.deliveryReceipt(timestamp, List.of(timestamp));
+ dataMessage = null;
+ syncMessage = null;
+ callMessage = null;
}
public JsonMessageEnvelope(Signal.SyncMessageReceived messageReceived) {
source = messageReceived.getSource();
+ sourceDevice = null;
+ relay = null;
timestamp = messageReceived.getTimestamp();
+ receiptMessage = null;
+ dataMessage = null;
syncMessage = new JsonSyncMessage(messageReceived);
+ callMessage = null;
}
}
package org.asamk.signal.json;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
import org.asamk.signal.manager.Manager;
import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
public class JsonQuote {
- long id;
- String author;
- String text;
+ @JsonProperty
+ final long id;
+
+ @JsonProperty
+ final String author;
+
+ @JsonProperty
+ final String text;
- List<JsonMention> mentions;
- List<JsonQuotedAttachment> attachments;
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final List<JsonMention> mentions;
+
+ @JsonProperty
+ final List<JsonQuotedAttachment> attachments;
JsonQuote(SignalServiceDataMessage.Quote quote, Manager m) {
this.id = quote.getId();
.stream()
.map(quotedMention -> new JsonMention(quotedMention, m))
.collect(Collectors.toList());
+ } else {
+ this.mentions = null;
}
if (quote.getAttachments().size() > 0) {
package org.asamk.signal.json;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
public class JsonQuotedAttachment {
- String contentType;
- String filename;
- JsonAttachment thumbnail;
+ @JsonProperty
+ final String contentType;
+
+ @JsonProperty
+ final String filename;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final JsonAttachment thumbnail;
JsonQuotedAttachment(SignalServiceDataMessage.Quote.QuotedAttachment quotedAttachment) {
contentType = quotedAttachment.getContentType();
package org.asamk.signal.json;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
import org.asamk.signal.manager.Manager;
import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage.Reaction;
public class JsonReaction {
- String emoji;
- String targetAuthor;
- long targetSentTimestamp;
- boolean isRemove;
+ @JsonProperty
+ final String emoji;
+
+ @JsonProperty
+ final String targetAuthor;
+
+ @JsonProperty
+ final long targetSentTimestamp;
+
+ @JsonProperty
+ final boolean isRemove;
JsonReaction(Reaction reaction, Manager m) {
this.emoji = reaction.getEmoji();
package org.asamk.signal.json;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
import org.whispersystems.signalservice.api.messages.SignalServiceReceiptMessage;
import java.util.List;
class JsonReceiptMessage {
- long when;
- boolean isDelivery;
- boolean isRead;
- List<Long> timestamps;
+ @JsonProperty
+ final long when;
- JsonReceiptMessage(SignalServiceReceiptMessage receiptMessage) {
+ @JsonProperty
+ final boolean isDelivery;
+
+ @JsonProperty
+ final boolean isRead;
+ @JsonProperty
+ final List<Long> timestamps;
+
+ JsonReceiptMessage(SignalServiceReceiptMessage receiptMessage) {
this.when = receiptMessage.getWhen();
- if (receiptMessage.isDeliveryReceipt()) {
- this.isDelivery = true;
- }
- if (receiptMessage.isReadReceipt()) {
- this.isRead = true;
- }
+ this.isDelivery = receiptMessage.isDeliveryReceipt();
+ this.isRead = receiptMessage.isReadReceipt();
this.timestamps = receiptMessage.getTimestamps();
}
package org.asamk.signal.json;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
import java.util.Base64;
public class JsonSticker {
- String packId;
- String packKey;
- int stickerId;
+ @JsonProperty
+ final String packId;
+
+ @JsonProperty
+ final String packKey;
+
+ @JsonProperty
+ final int stickerId;
public JsonSticker(SignalServiceDataMessage.Sticker sticker) {
this.packId = Base64.getEncoder().encodeToString(sticker.getPackId());
this.packKey = Base64.getEncoder().encodeToString(sticker.getPackKey());
this.stickerId = sticker.getStickerId();
- // TODO also download sticker image ??
}
}
package org.asamk.signal.json;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
import org.asamk.Signal;
import org.asamk.signal.manager.Manager;
import org.whispersystems.signalservice.api.messages.multidevice.SentTranscriptMessage;
+import org.whispersystems.signalservice.api.push.SignalServiceAddress;
class JsonSyncDataMessage extends JsonDataMessage {
- String destination;
+ @JsonProperty
+ final String destination;
JsonSyncDataMessage(SentTranscriptMessage transcriptMessage, Manager m) {
super(transcriptMessage.getMessage(), m);
- if (transcriptMessage.getDestination().isPresent()) {
- this.destination = transcriptMessage.getDestination().get().getLegacyIdentifier();
- }
+
+ this.destination = transcriptMessage.getDestination()
+ .transform(SignalServiceAddress::getLegacyIdentifier)
+ .orNull();
}
JsonSyncDataMessage(Signal.SyncMessageReceived messageReceived) {
package org.asamk.signal.json;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
import org.asamk.Signal;
import org.asamk.signal.manager.Manager;
-import org.whispersystems.signalservice.api.messages.multidevice.ReadMessage;
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,
class JsonSyncMessage {
- JsonSyncDataMessage sentMessage;
- List<String> blockedNumbers;
- List<ReadMessage> readMessages;
- JsonSyncMessageType type;
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final JsonSyncDataMessage sentMessage;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final List<String> blockedNumbers;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final List<String> blockedGroupIds;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final List<JsonSyncReadMessage> readMessages;
+
+ @JsonProperty
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ final JsonSyncMessageType type;
JsonSyncMessage(SignalServiceSyncMessage syncMessage, Manager m) {
- if (syncMessage.getSent().isPresent()) {
- this.sentMessage = new JsonSyncDataMessage(syncMessage.getSent().get(), 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.getLegacyIdentifier());
- }
+ final Base64.Encoder base64 = Base64.getEncoder();
+ this.blockedNumbers = syncMessage.getBlockedList()
+ .get()
+ .getAddresses()
+ .stream()
+ .map(SignalServiceAddress::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(message -> new JsonSyncReadMessage(message.getSender().getLegacyIdentifier(),
+ message.getTimestamp()))
+ .collect(Collectors.toList());
+ } else {
+ this.readMessages = null;
}
if (syncMessage.getContacts().isPresent()) {
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;
}
}
--- /dev/null
+package org.asamk.signal.json;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+class JsonSyncReadMessage {
+
+ @JsonProperty
+ final String sender;
+
+ @JsonProperty
+ final long timestamp;
+
+ public JsonSyncReadMessage(final String sender, final long timestamp) {
+ this.sender = sender;
+ this.timestamp = timestamp;
+ }
+}