package org.asamk.signal;
import org.asamk.signal.manager.Manager;
+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.api.TextStyle;
import org.asamk.signal.manager.api.UntrustedIdentityException;
-import org.asamk.signal.manager.groups.GroupId;
-import org.asamk.signal.manager.storage.recipients.RecipientAddress;
import org.asamk.signal.output.PlainTextWriter;
import org.asamk.signal.util.DateUtils;
import org.asamk.signal.util.Hex;
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()),
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);
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=");
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) {
printPreview(writer.indentedWriter(), preview);
}
}
- if (message.sharedContacts().size() > 0) {
+ if (!message.sharedContacts().isEmpty()) {
writer.println("Contacts:");
for (var contact : message.sharedContacts()) {
writer.println("- Contact:");
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:");
}
}
- private void printStoryMessage(
- PlainTextWriter writer, MessageEnvelope.Story message
- ) {
+ 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:");
}
}
- private void printTypingMessage(
- final PlainTextWriter writer, final MessageEnvelope.Typing typingMessage
- ) {
+ 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()) {
}
}
- 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");
}
}
- 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);
}
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();
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();
}
}
- 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";
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: {}",
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: {}",
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)
}
}
- 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()));
}
}
- 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:");
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());
}
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()) {
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:");
}
}
- if (contact.email().size() > 0) {
+ if (!contact.email().isEmpty()) {
writer.println("Email details:");
for (var email : contact.email()) {
writer.println("- Email:");
}
}
- if (contact.address().size() > 0) {
+ if (!contact.address().isEmpty()) {
writer.println("Address details:");
for (var address : contact.address()) {
writer.println("- Address:");
}
}
- 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
- ) {
+ 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 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");
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()) {