X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/9075cc1a309fbc90276d2878d480d1e9e9c81887..24069c8277cca7f8e94aa3f083980e85dca25269:/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 0b1ea5be..faea75dc 100644 --- a/src/main/java/org/asamk/signal/ReceiveMessageHandler.java +++ b/src/main/java/org/asamk/signal/ReceiveMessageHandler.java @@ -1,16 +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 { @@ -25,10 +27,17 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler { @Override public void handleMessage(MessageEnvelope envelope, Throwable exception) { + synchronized (writer) { + handleMessageInternal(envelope, exception); + } + } + + 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()), @@ -43,13 +52,13 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler { "The user’s key is untrusted, either the user has reinstalled Signal or a third party sent this message."); final var recipientName = e.getSender().getLegacyIdentifier(); writer.println( - "Use 'signal-cli -u {} listIdentities -n {}', verify the key and run 'signal-cli -u {} trust -v \"FINGER_PRINT\" {}' to mark it as trusted", + "Use 'signal-cli -a {} listIdentities -n {}', verify the key and run 'signal-cli -a {} trust -v \"FINGER_PRINT\" {}' to mark it as trusted", m.getSelfNumber(), recipientName, m.getSelfNumber(), recipientName); writer.println( - "If you don't care about security, use 'signal-cli -u {} trust -a {}' to trust it without verification", + "If you don't care about security, use 'signal-cli -a {} trust -a {}' to trust it without verification", m.getSelfNumber(), recipientName); } else { @@ -61,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(); @@ -100,6 +117,11 @@ 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(); @@ -134,9 +156,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(); @@ -157,6 +182,12 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler { printMention(writer, mention); } } + if (message.textStyles().size() > 0) { + writer.println("Text styles:"); + for (var textStyle : message.textStyles()) { + printTextStyle(writer, textStyle); + } + } if (message.attachments().size() > 0) { writer.println("Attachments:"); for (var attachment : message.attachments()) { @@ -166,6 +197,35 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler { } } + 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 ) { @@ -291,8 +351,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"); @@ -302,7 +368,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()) { @@ -342,8 +408,7 @@ 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())); + writer.println("Pack id: {}", Hex.toStringCondensed(sticker.packId().serialize())); writer.println("Sticker id: {}", sticker.stickerId()); } @@ -361,7 +426,9 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler { ) { writer.println("Id: {}", quote.id()); writer.println("Author: {}", formatContact(quote.author())); - writer.println("Text: {}", quote.text()); + if (quote.text().isPresent()) { + writer.println("Text: {}", quote.text().get()); + } if (quote.mentions() != null && quote.mentions().size() > 0) { writer.println("Mentions:"); for (var mention : quote.mentions()) { @@ -371,14 +438,8 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler { if (quote.attachments().size() > 0) { writer.println("Attachments:"); for (var attachment : quote.attachments()) { - writer.println("- Filename: {}", attachment.fileName()); - writer.indent(w -> { - w.println("Type: {}", attachment.contentType()); - w.println("Thumbnail:"); - if (attachment.thumbnail().isPresent()) { - printAttachment(w, attachment.thumbnail().get()); - } - }); + writer.println("- Attachment:"); + printAttachment(writer.indentedWriter(), attachment); } } } @@ -488,6 +549,13 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler { 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()); @@ -505,6 +573,12 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler { 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"); @@ -527,6 +601,10 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler { + attachment.preview().get().length + " bytes)" : ""); } + if (attachment.thumbnail().isPresent()) { + writer.println("Thumbnail:"); + printAttachment(writer.indentedWriter(), attachment.thumbnail().get()); + } final var flags = new ArrayList(); if (attachment.isVoiceNote()) { flags.add("voice note"); @@ -543,8 +621,8 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler { if (attachment.width().isPresent() || attachment.height().isPresent()) { writer.println("Dimensions: {}x{}", attachment.width().orElse(0), attachment.height().orElse(0)); } - if (attachment.id().isPresent()) { - var file = m.getAttachmentFile(attachment.id().get()); + if (attachment.file().isPresent()) { + var file = attachment.file().get(); if (file.exists()) { writer.println("Stored plaintext in: {}", file); }