+
+ if (envelope.data().isPresent()) {
+ var message = envelope.data().get();
+ printDataMessage(writer, message);
+ }
+ if (envelope.sync().isPresent()) {
+ writer.println("Received a sync message");
+ var syncMessage = envelope.sync().get();
+ printSyncMessage(writer, syncMessage);
+ }
+ if (envelope.call().isPresent()) {
+ writer.println("Received a call message");
+ var callMessage = envelope.call().get();
+ printCallMessage(writer.indentedWriter(), callMessage);
+ }
+ if (envelope.receipt().isPresent()) {
+ writer.println("Received a receipt message");
+ var receiptMessage = envelope.receipt().get();
+ printReceiptMessage(writer.indentedWriter(), receiptMessage);
+ }
+ if (envelope.typing().isPresent()) {
+ writer.println("Received a typing message");
+ var typingMessage = envelope.typing().get();
+ printTypingMessage(writer.indentedWriter(), typingMessage);
+ }
+ writer.println();
+ }
+
+ private void printDataMessage(
+ PlainTextWriter writer, MessageEnvelope.Data message
+ ) {
+ writer.println("Message timestamp: {}", DateUtils.formatTimestamp(message.timestamp()));
+ if (message.isViewOnce()) {
+ writer.println("=VIEW ONCE=");
+ }
+
+ if (message.body().isPresent()) {
+ writer.println("Body: {}", message.body().get());
+ }
+ if (message.groupContext().isPresent()) {
+ writer.println("Group info:");
+ final var groupContext = message.groupContext().get();
+ printGroupContext(writer.indentedWriter(), groupContext);
+ }
+ 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) {
+ writer.println("Previews:");
+ final var previews = message.previews();
+ for (var preview : previews) {
+ writer.println("- Preview");
+ printPreview(writer.indentedWriter(), preview);
+ }
+ }
+ if (message.sharedContacts().size() > 0) {
+ writer.println("Contacts:");
+ for (var contact : message.sharedContacts()) {
+ writer.println("- Contact:");
+ printSharedContact(writer.indentedWriter(), contact);
+ }
+ }
+ if (message.sticker().isPresent()) {
+ final var sticker = message.sticker().get();
+ writer.println("Sticker:");
+ printSticker(writer.indentedWriter(), sticker);
+ }
+ if (message.isEndSession()) {
+ writer.println("Is end session");
+ }
+ if (message.isExpirationUpdate()) {
+ writer.println("Is Expiration update: true");
+ }
+ if (message.expiresInSeconds() > 0) {
+ writer.println("Expires in: {} seconds", message.expiresInSeconds());
+ }
+ if (message.hasProfileKey()) {
+ writer.println("Profile key update");
+ }
+ if (message.reaction().isPresent()) {
+ writer.println("Reaction:");
+ final var reaction = message.reaction().get();
+ printReaction(writer.indentedWriter(), reaction);
+ }
+ if (message.quote().isPresent()) {
+ writer.println("Quote:");
+ var quote = message.quote().get();
+ printQuote(writer.indentedWriter(), quote);
+ }
+ if (message.remoteDeleteId().isPresent()) {
+ final var remoteDelete = message.remoteDeleteId().get();
+ writer.println("Remote delete message: timestamp = {}", remoteDelete);
+ }
+ if (message.mentions().size() > 0) {
+ writer.println("Mentions:");
+ for (var mention : message.mentions()) {
+ printMention(writer, mention);
+ }
+ }
+ if (message.attachments().size() > 0) {
+ writer.println("Attachments:");
+ for (var attachment : message.attachments()) {
+ writer.println("- Attachment:");
+ printAttachment(writer.indentedWriter(), attachment);
+ }
+ }
+ }
+
+ 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()) {
+ writer.println("Group Info:");
+ final var groupId = typingMessage.groupId().get();
+ printGroupInfo(writer.indentedWriter(), groupId);
+ }
+ }
+
+ 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");
+ }
+ if (receiptMessage.type() == MessageEnvelope.Receipt.Type.READ) {
+ writer.println("Is read receipt");
+ }
+ if (receiptMessage.type() == MessageEnvelope.Receipt.Type.VIEWED) {
+ writer.println("Is viewed receipt");