From 3b29add396aea6f2174c56895f4d5875c9af2b49 Mon Sep 17 00:00:00 2001 From: AsamK Date: Sun, 17 Jan 2021 11:43:39 +0100 Subject: [PATCH] Add typing message to json output Fixes #423 --- .../signal/json/JsonMessageEnvelope.java | 10 +++++++ .../asamk/signal/json/JsonTypingMessage.java | 28 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 src/main/java/org/asamk/signal/json/JsonTypingMessage.java diff --git a/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java b/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java index 2a87d129..256b9751 100644 --- a/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java +++ b/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java @@ -41,6 +41,10 @@ public class JsonMessageEnvelope { @JsonInclude(JsonInclude.Include.NON_NULL) final JsonReceiptMessage receiptMessage; + @JsonProperty + @JsonInclude(JsonInclude.Include.NON_NULL) + final JsonTypingMessage typingMessage; + public JsonMessageEnvelope(SignalServiceEnvelope envelope, SignalServiceContent content, Manager m) { if (!envelope.isUnidentifiedSender() && envelope.hasSource()) { SignalServiceAddress source = envelope.getSourceAddress(); @@ -64,6 +68,9 @@ public class JsonMessageEnvelope { } else { this.receiptMessage = null; } + this.typingMessage = content != null && content.getTypingMessage().isPresent() + ? new JsonTypingMessage(content.getTypingMessage().get()) + : null; this.dataMessage = content != null && content.getDataMessage().isPresent() ? new JsonDataMessage(content.getDataMessage().get(), m) @@ -85,6 +92,7 @@ public class JsonMessageEnvelope { dataMessage = new JsonDataMessage(messageReceived); syncMessage = null; callMessage = null; + typingMessage = null; } public JsonMessageEnvelope(Signal.ReceiptReceived receiptReceived) { @@ -96,6 +104,7 @@ public class JsonMessageEnvelope { dataMessage = null; syncMessage = null; callMessage = null; + typingMessage = null; } public JsonMessageEnvelope(Signal.SyncMessageReceived messageReceived) { @@ -107,5 +116,6 @@ public class JsonMessageEnvelope { dataMessage = null; syncMessage = new JsonSyncMessage(messageReceived); callMessage = null; + typingMessage = null; } } diff --git a/src/main/java/org/asamk/signal/json/JsonTypingMessage.java b/src/main/java/org/asamk/signal/json/JsonTypingMessage.java new file mode 100644 index 00000000..18548ce3 --- /dev/null +++ b/src/main/java/org/asamk/signal/json/JsonTypingMessage.java @@ -0,0 +1,28 @@ +package org.asamk.signal.json; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; + +import org.whispersystems.signalservice.api.messages.SignalServiceTypingMessage; + +import java.util.Base64; + +class JsonTypingMessage { + + @JsonProperty + final String action; + + @JsonProperty + final long timestamp; + + @JsonProperty + @JsonInclude(JsonInclude.Include.NON_NULL) + final String groupId; + + JsonTypingMessage(SignalServiceTypingMessage typingMessage) { + this.action = typingMessage.getAction().name(); + this.timestamp = typingMessage.getTimestamp(); + final Base64.Encoder encoder = Base64.getEncoder(); + this.groupId = typingMessage.getGroupId().transform(encoder::encodeToString).orNull(); + } +} -- 2.50.1