X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/fc8b6d0fcbedd6a4c9ae394a0640e79690e28337..e1f4dae5c20b2cb98975e6ba16bc73f2a45423e6:/src/main/java/org/asamk/signal/ReceiveMessageHandler.java diff --git a/src/main/java/org/asamk/signal/ReceiveMessageHandler.java b/src/main/java/org/asamk/signal/ReceiveMessageHandler.java index b76817c3..d7fd1104 100644 --- a/src/main/java/org/asamk/signal/ReceiveMessageHandler.java +++ b/src/main/java/org/asamk/signal/ReceiveMessageHandler.java @@ -1,17 +1,18 @@ package org.asamk.signal; import org.asamk.signal.manager.Manager; -import org.asamk.signal.manager.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; import org.slf4j.helpers.MessageFormatter; import java.util.ArrayList; -import java.util.Base64; import java.util.stream.Collectors; public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler { @@ -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,38 +389,31 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler { } } - private void printSticker( - final PlainTextWriter writer, final MessageEnvelope.Data.Sticker sticker - ) { - writer.println("Pack id: {}", Base64.getEncoder().encodeToString(sticker.packId())); - writer.println("Pack key: {}", Base64.getEncoder().encodeToString(sticker.packKey())); + 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:"); @@ -390,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()); } @@ -408,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()) { @@ -420,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:"); @@ -434,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:"); @@ -448,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:"); @@ -483,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()); @@ -502,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"); @@ -544,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()) {