]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/ReceiveMessageHandler.java
Update libsignal-service-java
[signal-cli] / src / main / java / org / asamk / signal / ReceiveMessageHandler.java
index f5fce554fd7aa5d29afaca45bc89edd7b8dd1a73..d7fd110471836c2c18015811d3c86a42dbc92028 100644 (file)
@@ -1,11 +1,12 @@
 package org.asamk.signal;
 
 import org.asamk.signal.manager.Manager;
-import org.asamk.signal.manager.api.UntrustedIdentityException;
+import org.asamk.signal.manager.api.GroupId;
 import org.asamk.signal.manager.api.MessageEnvelope;
+import org.asamk.signal.manager.api.RecipientAddress;
 import org.asamk.signal.manager.api.RecipientIdentifier;
-import org.asamk.signal.manager.groups.GroupId;
-import org.asamk.signal.manager.storage.recipients.RecipientAddress;
+import org.asamk.signal.manager.api.TextStyle;
+import org.asamk.signal.manager.api.UntrustedIdentityException;
 import org.asamk.signal.output.PlainTextWriter;
 import org.asamk.signal.util.DateUtils;
 import org.asamk.signal.util.Hex;
@@ -33,9 +34,10 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
 
     private void handleMessageInternal(MessageEnvelope envelope, Throwable exception) {
         var source = envelope.sourceAddress();
-        writer.println("Envelope from: {} (device: {})",
+        writer.println("Envelope from: {} (device: {}) to {}",
                 source.map(this::formatContact).orElse("unknown source"),
-                envelope.sourceDevice());
+                envelope.sourceDevice(),
+                m.getSelfNumber());
         writer.println("Timestamp: {}", DateUtils.formatTimestamp(envelope.timestamp()));
         writer.println("Server timestamps: received: {} delivered: {}",
                 DateUtils.formatTimestamp(envelope.serverReceivedTimestamp()),
@@ -68,6 +70,14 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
             var message = envelope.data().get();
             printDataMessage(writer, message);
         }
+        if (envelope.edit().isPresent()) {
+            var message = envelope.edit().get();
+            printEditMessage(writer, message);
+        }
+        if (envelope.story().isPresent()) {
+            var message = envelope.story().get();
+            printStoryMessage(writer.indentedWriter(), message);
+        }
         if (envelope.sync().isPresent()) {
             writer.println("Received a sync message");
             var syncMessage = envelope.sync().get();
@@ -91,9 +101,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
         writer.println();
     }
 
-    private void printDataMessage(
-            PlainTextWriter writer, MessageEnvelope.Data message
-    ) {
+    private void printDataMessage(PlainTextWriter writer, MessageEnvelope.Data message) {
         writer.println("Message timestamp: {}", DateUtils.formatTimestamp(message.timestamp()));
         if (message.isViewOnce()) {
             writer.println("=VIEW ONCE=");
@@ -107,12 +115,17 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
             final var groupContext = message.groupContext().get();
             printGroupContext(writer.indentedWriter(), groupContext);
         }
+        if (message.storyContext().isPresent()) {
+            writer.println("Story reply:");
+            final var storyContext = message.storyContext().get();
+            printStoryContext(writer.indentedWriter(), storyContext);
+        }
         if (message.groupCallUpdate().isPresent()) {
             writer.println("Group call update:");
             final var groupCallUpdate = message.groupCallUpdate().get();
             writer.indentedWriter().println("Era id: {}", groupCallUpdate.eraId());
         }
-        if (message.previews().size() > 0) {
+        if (!message.previews().isEmpty()) {
             writer.println("Previews:");
             final var previews = message.previews();
             for (var preview : previews) {
@@ -120,7 +133,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
                 printPreview(writer.indentedWriter(), preview);
             }
         }
-        if (message.sharedContacts().size() > 0) {
+        if (!message.sharedContacts().isEmpty()) {
             writer.println("Contacts:");
             for (var contact : message.sharedContacts()) {
                 writer.println("- Contact:");
@@ -141,9 +154,12 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
         if (message.expiresInSeconds() > 0) {
             writer.println("Expires in: {} seconds", message.expiresInSeconds());
         }
-        if (message.hasProfileKey()) {
+        if (message.isProfileKeyUpdate()) {
             writer.println("Profile key update");
         }
+        if (message.hasProfileKey()) {
+            writer.println("With profile key");
+        }
         if (message.reaction().isPresent()) {
             writer.println("Reaction:");
             final var reaction = message.reaction().get();
@@ -158,13 +174,19 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
             final var remoteDelete = message.remoteDeleteId().get();
             writer.println("Remote delete message: timestamp = {}", remoteDelete);
         }
-        if (message.mentions().size() > 0) {
+        if (!message.mentions().isEmpty()) {
             writer.println("Mentions:");
             for (var mention : message.mentions()) {
                 printMention(writer, mention);
             }
         }
-        if (message.attachments().size() > 0) {
+        if (!message.textStyles().isEmpty()) {
+            writer.println("Text styles:");
+            for (var textStyle : message.textStyles()) {
+                printTextStyle(writer, textStyle);
+            }
+        }
+        if (!message.attachments().isEmpty()) {
             writer.println("Attachments:");
             for (var attachment : message.attachments()) {
                 writer.println("- Attachment:");
@@ -173,9 +195,32 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
         }
     }
 
-    private void printTypingMessage(
-            final PlainTextWriter writer, final MessageEnvelope.Typing typingMessage
-    ) {
+    private void printEditMessage(PlainTextWriter writer, MessageEnvelope.Edit message) {
+        writer.println("Edit: Target message timestamp: {}", DateUtils.formatTimestamp(message.targetSentTimestamp()));
+        printDataMessage(writer.indentedWriter(), message.dataMessage());
+    }
+
+    private void printStoryMessage(PlainTextWriter writer, MessageEnvelope.Story message) {
+        writer.println("Story: with replies: {}", message.allowsReplies());
+        if (message.groupId().isPresent()) {
+            writer.println("Group info:");
+            printGroupInfo(writer.indentedWriter(), message.groupId().get());
+        }
+        if (message.textAttachment().isPresent()) {
+            writer.println("Body: {}", message.textAttachment().get().text().orElse(""));
+
+            if (message.textAttachment().get().preview().isPresent()) {
+                writer.println("Preview:");
+                printPreview(writer.indentedWriter(), message.textAttachment().get().preview().get());
+            }
+        }
+        if (message.fileAttachment().isPresent()) {
+            writer.println("Attachments:");
+            printAttachment(writer.indentedWriter(), message.fileAttachment().get());
+        }
+    }
+
+    private void printTypingMessage(final PlainTextWriter writer, final MessageEnvelope.Typing typingMessage) {
         writer.println("Action: {}", typingMessage.type());
         writer.println("Timestamp: {}", DateUtils.formatTimestamp(typingMessage.timestamp()));
         if (typingMessage.groupId().isPresent()) {
@@ -185,9 +230,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
         }
     }
 
-    private void printReceiptMessage(
-            final PlainTextWriter writer, final MessageEnvelope.Receipt receiptMessage
-    ) {
+    private void printReceiptMessage(final PlainTextWriter writer, final MessageEnvelope.Receipt receiptMessage) {
         writer.println("When: {}", DateUtils.formatTimestamp(receiptMessage.when()));
         if (receiptMessage.type() == MessageEnvelope.Receipt.Type.DELIVERY) {
             writer.println("Is delivery receipt");
@@ -204,9 +247,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
         }
     }
 
-    private void printCallMessage(
-            final PlainTextWriter writer, final MessageEnvelope.Call callMessage
-    ) {
+    private void printCallMessage(final PlainTextWriter writer, final MessageEnvelope.Call callMessage) {
         if (callMessage.destinationDeviceId().isPresent()) {
             final var deviceId = callMessage.destinationDeviceId().get();
             writer.println("Destination device id: {}", deviceId);
@@ -220,7 +261,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
         }
         if (callMessage.answer().isPresent()) {
             var answerMessage = callMessage.answer().get();
-            writer.println("Answer message: {}, sdp: {})", answerMessage.id(), answerMessage.sdp());
+            writer.println("Answer message: {}, opaque length: {})", answerMessage.id(), answerMessage.opaque().length);
         }
         if (callMessage.busy().isPresent()) {
             var busyMessage = callMessage.busy().get();
@@ -230,16 +271,16 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
             var hangupMessage = callMessage.hangup().get();
             writer.println("Hangup message: {}", hangupMessage.id());
         }
-        if (callMessage.iceUpdate().size() > 0) {
+        if (!callMessage.iceUpdate().isEmpty()) {
             writer.println("Ice update messages:");
             var iceUpdateMessages = callMessage.iceUpdate();
             for (var iceUpdateMessage : iceUpdateMessages) {
-                writer.println("- {}, sdp: {}", iceUpdateMessage.id(), iceUpdateMessage.sdp());
+                writer.println("- {}, opaque length: {}", iceUpdateMessage.id(), iceUpdateMessage.opaque().length);
             }
         }
         if (callMessage.offer().isPresent()) {
             var offerMessage = callMessage.offer().get();
-            writer.println("Offer message: {}, sdp: {}", offerMessage.id(), offerMessage.sdp());
+            writer.println("Offer message: {}, opaque length: {}", offerMessage.id(), offerMessage.opaque().length);
         }
         if (callMessage.opaque().isPresent()) {
             final var opaqueMessage = callMessage.opaque().get();
@@ -249,9 +290,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
         }
     }
 
-    private void printSyncMessage(
-            final PlainTextWriter writer, final MessageEnvelope.Sync syncMessage
-    ) {
+    private void printSyncMessage(final PlainTextWriter writer, final MessageEnvelope.Sync syncMessage) {
         if (syncMessage.contacts().isPresent()) {
             final var contactsMessage = syncMessage.contacts().get();
             var type = contactsMessage.isComplete() ? "complete" : "partial";
@@ -260,7 +299,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
         if (syncMessage.groups().isPresent()) {
             writer.println("Received sync groups.");
         }
-        if (syncMessage.read().size() > 0) {
+        if (!syncMessage.read().isEmpty()) {
             writer.println("Received sync read messages list");
             for (var rm : syncMessage.read()) {
                 writer.println("- From: {} Message timestamp: {}",
@@ -268,7 +307,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
                         DateUtils.formatTimestamp(rm.timestamp()));
             }
         }
-        if (syncMessage.viewed().size() > 0) {
+        if (!syncMessage.viewed().isEmpty()) {
             writer.println("Received sync viewed messages list");
             for (var vm : syncMessage.viewed()) {
                 writer.println("- From: {} Message timestamp: {}",
@@ -282,7 +321,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
             String to;
             if (sentTranscriptMessage.destination().isPresent()) {
                 to = formatContact(sentTranscriptMessage.destination().get());
-            } else if (sentTranscriptMessage.recipients().size() > 0) {
+            } else if (!sentTranscriptMessage.recipients().isEmpty()) {
                 to = sentTranscriptMessage.recipients()
                         .stream()
                         .map(this::formatContact)
@@ -298,8 +337,14 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
                         .println("Expiration started at: {}",
                                 DateUtils.formatTimestamp(sentTranscriptMessage.expirationStartTimestamp()));
             }
-            var message = sentTranscriptMessage.message();
-            printDataMessage(writer.indentedWriter(), message);
+            if (sentTranscriptMessage.message().isPresent()) {
+                var message = sentTranscriptMessage.message().get();
+                printDataMessage(writer.indentedWriter(), message);
+            }
+            if (sentTranscriptMessage.story().isPresent()) {
+                var message = sentTranscriptMessage.story().get();
+                printStoryMessage(writer.indentedWriter(), message);
+            }
         }
         if (syncMessage.blocked().isPresent()) {
             writer.println("Received sync message with block list");
@@ -309,7 +354,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
                 writer.println("- {}", address.getLegacyIdentifier());
             }
             for (var groupId : blockedList.groupIds()) {
-                writer.println("- {}", groupId);
+                writer.println("- {}", groupId.toBase64());
             }
         }
         if (syncMessage.viewOnceOpen().isPresent()) {
@@ -333,9 +378,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
         }
     }
 
-    private void printPreview(
-            final PlainTextWriter writer, final MessageEnvelope.Data.Preview preview
-    ) {
+    private void printPreview(final PlainTextWriter writer, final MessageEnvelope.Data.Preview preview) {
         writer.println("Title: {}", preview.title());
         writer.println("Description: {}", preview.description());
         writer.println("Date: {}", DateUtils.formatTimestamp(preview.date()));
@@ -346,37 +389,31 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
         }
     }
 
-    private void printSticker(
-            final PlainTextWriter writer, final MessageEnvelope.Data.Sticker sticker
-    ) {
+    private void printSticker(final PlainTextWriter writer, final MessageEnvelope.Data.Sticker sticker) {
         writer.println("Pack id: {}", Hex.toStringCondensed(sticker.packId().serialize()));
         writer.println("Sticker id: {}", sticker.stickerId());
     }
 
-    private void printReaction(
-            final PlainTextWriter writer, final MessageEnvelope.Data.Reaction reaction
-    ) {
+    private void printReaction(final PlainTextWriter writer, final MessageEnvelope.Data.Reaction reaction) {
         writer.println("Emoji: {}", reaction.emoji());
         writer.println("Target author: {}", formatContact(reaction.targetAuthor()));
         writer.println("Target timestamp: {}", DateUtils.formatTimestamp(reaction.targetSentTimestamp()));
         writer.println("Is remove: {}", reaction.isRemove());
     }
 
-    private void printQuote(
-            final PlainTextWriter writer, final MessageEnvelope.Data.Quote quote
-    ) {
+    private void printQuote(final PlainTextWriter writer, final MessageEnvelope.Data.Quote quote) {
         writer.println("Id: {}", quote.id());
         writer.println("Author: {}", formatContact(quote.author()));
         if (quote.text().isPresent()) {
             writer.println("Text: {}", quote.text().get());
         }
-        if (quote.mentions() != null && quote.mentions().size() > 0) {
+        if (quote.mentions() != null && !quote.mentions().isEmpty()) {
             writer.println("Mentions:");
             for (var mention : quote.mentions()) {
                 printMention(writer, mention);
             }
         }
-        if (quote.attachments().size() > 0) {
+        if (!quote.attachments().isEmpty()) {
             writer.println("Attachments:");
             for (var attachment : quote.attachments()) {
                 writer.println("- Attachment:");
@@ -389,9 +426,6 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
         writer.println("Name:");
         var name = contact.name();
         writer.indent(w -> {
-            if (name.display().isPresent() && !name.display().get().isBlank()) {
-                w.println("Display name: {}", name.display().get());
-            }
             if (name.given().isPresent() && !name.given().get().isBlank()) {
                 w.println("First name: {}", name.given().get());
             }
@@ -407,6 +441,9 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
             if (name.suffix().isPresent() && !name.suffix().get().isBlank()) {
                 w.println("Suffix name: {}", name.suffix().get());
             }
+            if (name.nickname().isPresent() && !name.nickname().get().isBlank()) {
+                w.println("Display name: {}", name.nickname().get());
+            }
         });
 
         if (contact.avatar().isPresent()) {
@@ -419,7 +456,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
             writer.println("Organisation: {}", contact.organization().get());
         }
 
-        if (contact.phone().size() > 0) {
+        if (!contact.phone().isEmpty()) {
             writer.println("Phone details:");
             for (var phone : contact.phone()) {
                 writer.println("- Phone:");
@@ -433,7 +470,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
             }
         }
 
-        if (contact.email().size() > 0) {
+        if (!contact.email().isEmpty()) {
             writer.println("Email details:");
             for (var email : contact.email()) {
                 writer.println("- Email:");
@@ -447,7 +484,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
             }
         }
 
-        if (contact.address().size() > 0) {
+        if (!contact.address().isEmpty()) {
             writer.println("Address details:");
             for (var address : contact.address()) {
                 writer.println("- Address:");
@@ -482,14 +519,17 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
         }
     }
 
-    private void printGroupContext(
-            final PlainTextWriter writer, final MessageEnvelope.Data.GroupContext groupContext
-    ) {
+    private void printGroupContext(final PlainTextWriter writer, final MessageEnvelope.Data.GroupContext groupContext) {
         printGroupInfo(writer, groupContext.groupId());
         writer.println("Revision: {}", groupContext.revision());
         writer.println("Type: {}", groupContext.isGroupUpdate() ? "UPDATE" : "DELIVER");
     }
 
+    private void printStoryContext(final PlainTextWriter writer, final MessageEnvelope.Data.StoryContext storyContext) {
+        writer.println("Sender: {}", formatContact(storyContext.author()));
+        writer.println("Sent timestamp: {}", storyContext.sentTimestamp());
+    }
+
     private void printGroupInfo(final PlainTextWriter writer, final GroupId groupId) {
         writer.println("Id: {}", groupId.toBase64());
 
@@ -501,12 +541,14 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
         }
     }
 
-    private void printMention(
-            PlainTextWriter writer, MessageEnvelope.Data.Mention mention
-    ) {
+    private void printMention(PlainTextWriter writer, MessageEnvelope.Data.Mention mention) {
         writer.println("- {}: {} (length: {})", formatContact(mention.recipient()), mention.start(), mention.length());
     }
 
+    private void printTextStyle(PlainTextWriter writer, TextStyle textStyle) {
+        writer.println("- {}: {} (length: {})", textStyle.style().name(), textStyle.start(), textStyle.length());
+    }
+
     private void printAttachment(PlainTextWriter writer, MessageEnvelope.Data.Attachment attachment) {
         writer.println("Content-Type: {}", attachment.contentType());
         writer.println("Type: {}", attachment.id().isPresent() ? "Pointer" : "Stream");
@@ -543,7 +585,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
         if (attachment.isGif()) {
             flags.add("video gif");
         }
-        if (flags.size() > 0) {
+        if (!flags.isEmpty()) {
             writer.println("Flags: {}", String.join(", ", flags));
         }
         if (attachment.width().isPresent() || attachment.height().isPresent()) {