X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/58db3cbd53f3faec94ddfcd5e029865a380e6242..de273586b4106171a3940ce5ec2c2b3712430c8c:/src/main/java/org/asamk/signal/json/JsonDataMessage.java diff --git a/src/main/java/org/asamk/signal/json/JsonDataMessage.java b/src/main/java/org/asamk/signal/json/JsonDataMessage.java index 957e3a79..6dbda978 100644 --- a/src/main/java/org/asamk/signal/json/JsonDataMessage.java +++ b/src/main/java/org/asamk/signal/json/JsonDataMessage.java @@ -1,84 +1,145 @@ 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.SignalServiceAttachment; import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage; -import org.whispersystems.signalservice.api.messages.SignalServiceGroup; -import org.whispersystems.signalservice.api.messages.SignalServiceGroupV2; -import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; 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 Boolean viewOnce; + + @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 mentions; + + @JsonProperty + @JsonInclude(JsonInclude.Include.NON_NULL) + final List attachments; + + @JsonProperty + @JsonInclude(JsonInclude.Include.NON_NULL) + final JsonSticker sticker; + + @JsonProperty + @JsonInclude(JsonInclude.Include.NON_NULL) + final JsonRemoteDelete remoteDelete; - JsonReaction reaction; - JsonQuote quote; - List mentions; - List attachments; - JsonGroupInfo groupInfo; + @JsonProperty + @JsonInclude(JsonInclude.Include.NON_NULL) + final List contacts; + + @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 var groupContext = dataMessage.getGroupContext().get(); + if (groupContext.getGroupV1().isPresent()) { + var 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()) { + var 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.viewOnce = dataMessage.isViewOnce(); + 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 = new ArrayList<>(dataMessage.getMentions().get().size()); - for (SignalServiceDataMessage.Mention mention : dataMessage.getMentions().get()) { - this.mentions.add(new JsonMention(mention, m)); - } + this.mentions = dataMessage.getMentions() + .get() + .stream() + .map(mention -> new JsonMention(mention, m)) + .collect(Collectors.toList()); } else { - this.mentions = new ArrayList<>(); + this.mentions = List.of(); } + remoteDelete = dataMessage.getRemoteDelete().isPresent() ? new JsonRemoteDelete(dataMessage.getRemoteDelete() + .get()) : null; if (dataMessage.getAttachments().isPresent()) { - this.attachments = new ArrayList<>(dataMessage.getAttachments().get().size()); - for (SignalServiceAttachment attachment : dataMessage.getAttachments().get()) { - this.attachments.add(new JsonAttachment(attachment)); - } + this.attachments = dataMessage.getAttachments() + .get() + .stream() + .map(JsonAttachment::new) + .collect(Collectors.toList()); + } else { + this.attachments = List.of(); + } + this.sticker = dataMessage.getSticker().isPresent() ? new JsonSticker(dataMessage.getSticker().get()) : null; + + if (dataMessage.getSharedContacts().isPresent()) { + this.contacts = dataMessage.getSharedContacts() + .get() + .stream() + .map(JsonSharedContact::new) + .collect(Collectors.toList()); } else { - this.attachments = new ArrayList<>(); + this.contacts = List.of(); } } public JsonDataMessage(Signal.MessageReceived messageReceived) { timestamp = messageReceived.getTimestamp(); message = messageReceived.getMessage(); - groupInfo = new JsonGroupInfo(messageReceived.getGroupId()); - reaction = null; // TODO Replace these 3 with the proper commands + groupInfo = messageReceived.getGroupId().length > 0 ? new JsonGroupInfo(messageReceived.getGroupId()) : null; + expiresInSeconds = null; + viewOnce = null; + remoteDelete = null; + reaction = null; // TODO Replace these 5 with the proper commands quote = null; mentions = null; + sticker = null; + contacts = null; attachments = messageReceived.getAttachments().stream().map(JsonAttachment::new).collect(Collectors.toList()); } public JsonDataMessage(Signal.SyncMessageReceived messageReceived) { timestamp = messageReceived.getTimestamp(); message = messageReceived.getMessage(); - groupInfo = new JsonGroupInfo(messageReceived.getGroupId()); - reaction = null; // TODO Replace these 3 with the proper commands + groupInfo = messageReceived.getGroupId().length > 0 ? new JsonGroupInfo(messageReceived.getGroupId()) : null; + expiresInSeconds = null; + viewOnce = null; + remoteDelete = null; + reaction = null; // TODO Replace these 5 with the proper commands quote = null; mentions = null; + sticker = null; + contacts = null; attachments = messageReceived.getAttachments().stream().map(JsonAttachment::new).collect(Collectors.toList()); } }