X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/9bba7a85ab6fbe7cc8de6ece4b3850c883907e01..a593051512b716ed3cc42a1a7b69d49a459352ed:/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 787f47ab..5511f531 100644 --- a/src/main/java/org/asamk/signal/json/JsonDataMessage.java +++ b/src/main/java/org/asamk/signal/json/JsonDataMessage.java @@ -1,90 +1,77 @@ package org.asamk.signal.json; -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.SignalServiceGroupV2; +import com.fasterxml.jackson.annotation.JsonInclude; -import java.util.List; -import java.util.stream.Collectors; - -class JsonDataMessage { - - long timestamp; - String message; - int expiresInSeconds; +import org.asamk.signal.manager.api.MessageEnvelope; - JsonReaction reaction; - JsonQuote quote; - List mentions; - List attachments; - JsonSticker sticker; - JsonGroupInfo groupInfo; +import java.util.List; - 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(); - this.groupInfo = new JsonGroupInfo(groupInfo); - } else if (dataMessage.getGroupContext().get().getGroupV2().isPresent()) { - SignalServiceGroupV2 groupInfo = dataMessage.getGroupContext().get().getGroupV2().get(); - this.groupInfo = new JsonGroupInfo(groupInfo); - } - } - if (dataMessage.getBody().isPresent()) { - this.message = dataMessage.getBody().get(); - } - 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); - } - if (dataMessage.getMentions().isPresent()) { - this.mentions = dataMessage.getMentions() - .get() - .stream() - .map(mention -> new JsonMention(mention, m)) - .collect(Collectors.toList()); - } else { - this.mentions = List.of(); - } - if (dataMessage.getAttachments().isPresent()) { - this.attachments = dataMessage.getAttachments() - .get() - .stream() - .map(JsonAttachment::new) - .collect(Collectors.toList()); - } else { - this.attachments = List.of(); - } - if (dataMessage.getSticker().isPresent()) { - this.sticker = new JsonSticker(dataMessage.getSticker().get()); - } - } +record JsonDataMessage( + long timestamp, + String message, + Integer expiresInSeconds, + @JsonInclude(JsonInclude.Include.NON_NULL) Boolean viewOnce, + @JsonInclude(JsonInclude.Include.NON_NULL) JsonReaction reaction, + @JsonInclude(JsonInclude.Include.NON_NULL) JsonQuote quote, + @JsonInclude(JsonInclude.Include.NON_NULL) JsonPayment payment, + @JsonInclude(JsonInclude.Include.NON_NULL) List mentions, + @JsonInclude(JsonInclude.Include.NON_NULL) List previews, + @JsonInclude(JsonInclude.Include.NON_NULL) List attachments, + @JsonInclude(JsonInclude.Include.NON_NULL) JsonSticker sticker, + @JsonInclude(JsonInclude.Include.NON_NULL) JsonRemoteDelete remoteDelete, + @JsonInclude(JsonInclude.Include.NON_NULL) List contacts, + @JsonInclude(JsonInclude.Include.NON_NULL) JsonGroupInfo groupInfo, + @JsonInclude(JsonInclude.Include.NON_NULL) JsonStoryContext storyContext +) { - public JsonDataMessage(Signal.MessageReceived messageReceived) { - timestamp = messageReceived.getTimestamp(); - message = messageReceived.getMessage(); - groupInfo = new JsonGroupInfo(messageReceived.getGroupId()); - reaction = null; // TODO Replace these 4 with the proper commands - quote = null; - mentions = null; - sticker = null; - attachments = messageReceived.getAttachments().stream().map(JsonAttachment::new).collect(Collectors.toList()); - } + static JsonDataMessage from(MessageEnvelope.Data dataMessage) { + final var timestamp = dataMessage.timestamp(); + final var groupInfo = dataMessage.groupContext().isPresent() ? JsonGroupInfo.from(dataMessage.groupContext() + .get()) : null; + final var storyContext = dataMessage.storyContext().isPresent() + ? JsonStoryContext.from(dataMessage.storyContext().get()) + : null; + final var message = dataMessage.body().orElse(null); + final var expiresInSeconds = dataMessage.expiresInSeconds(); + final var viewOnce = dataMessage.isViewOnce(); + final var reaction = dataMessage.reaction().map(JsonReaction::from).orElse(null); + final var quote = dataMessage.quote().isPresent() ? JsonQuote.from(dataMessage.quote().get()) : null; + final var payment = dataMessage.payment().isPresent() ? JsonPayment.from(dataMessage.payment().get()) : null; + final var mentions = dataMessage.mentions().size() > 0 ? dataMessage.mentions() + .stream() + .map(JsonMention::from) + .toList() : null; + final var previews = dataMessage.previews().size() > 0 ? dataMessage.previews() + .stream() + .map(JsonPreview::from) + .toList() : null; + final var remoteDelete = dataMessage.remoteDeleteId().isPresent() + ? new JsonRemoteDelete(dataMessage.remoteDeleteId().get()) + : null; + final var attachments = dataMessage.attachments().size() > 0 ? dataMessage.attachments() + .stream() + .map(JsonAttachment::from) + .toList() : null; + final var sticker = dataMessage.sticker().isPresent() ? JsonSticker.from(dataMessage.sticker().get()) : null; - public JsonDataMessage(Signal.SyncMessageReceived messageReceived) { - timestamp = messageReceived.getTimestamp(); - message = messageReceived.getMessage(); - groupInfo = new JsonGroupInfo(messageReceived.getGroupId()); - reaction = null; // TODO Replace these 4 with the proper commands - quote = null; - mentions = null; - sticker = null; - attachments = messageReceived.getAttachments().stream().map(JsonAttachment::new).collect(Collectors.toList()); + final var contacts = dataMessage.sharedContacts().size() > 0 ? dataMessage.sharedContacts() + .stream() + .map(JsonSharedContact::from) + .toList() : null; + return new JsonDataMessage(timestamp, + message, + expiresInSeconds, + viewOnce, + reaction, + quote, + payment, + mentions, + previews, + attachments, + sticker, + remoteDelete, + contacts, + groupInfo, + storyContext); } }