From: AsamK Date: Fri, 27 Jan 2023 20:46:39 +0000 (+0100) Subject: Print text styles in plain text output X-Git-Tag: v0.11.7~8 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/15da210de7d3540fef3603d71514a1283c503450 Print text styles in plain text output --- diff --git a/lib/src/main/java/org/asamk/signal/manager/api/MessageEnvelope.java b/lib/src/main/java/org/asamk/signal/manager/api/MessageEnvelope.java index 9b6a476e..c1726c1a 100644 --- a/lib/src/main/java/org/asamk/signal/manager/api/MessageEnvelope.java +++ b/lib/src/main/java/org/asamk/signal/manager/api/MessageEnvelope.java @@ -39,6 +39,8 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import static org.whispersystems.signalservice.internal.push.SignalServiceProtos.BodyRange; + public record MessageEnvelope( Optional sourceAddress, int sourceDevice, @@ -113,7 +115,8 @@ public record MessageEnvelope( Optional sticker, List sharedContacts, List mentions, - List previews + List previews, + List textStyles ) { static Data from( @@ -154,6 +157,9 @@ public record MessageEnvelope( .orElse(List.of()), dataMessage.getPreviews() .map(a -> a.stream().map(preview -> Preview.from(preview, fileProvider)).toList()) + .orElse(List.of()), + dataMessage.getBodyRanges() + .map(a -> a.stream().filter(BodyRange::hasStyle).map(TextStyle::from).toList()) .orElse(List.of())); } @@ -216,7 +222,8 @@ public record MessageEnvelope( RecipientAddress author, Optional text, List mentions, - List attachments + List attachments, + List textStyles ) { static Quote from( @@ -237,7 +244,14 @@ public record MessageEnvelope( .toList(), quote.getAttachments() == null ? List.of() - : quote.getAttachments().stream().map(a -> Attachment.from(a, fileProvider)).toList()); + : quote.getAttachments().stream().map(a -> Attachment.from(a, fileProvider)).toList(), + quote.getBodyRanges() == null + ? List.of() + : quote.getBodyRanges() + .stream() + .filter(BodyRange::hasStyle) + .map(TextStyle::from) + .toList()); } } @@ -498,6 +512,33 @@ public record MessageEnvelope( preview.getImage().map(as -> Attachment.from(as, fileProvider))); } } + + public record TextStyle(Style style, int start, int length) { + + public enum Style { + NONE, + BOLD, + ITALIC, + SPOILER, + STRIKETHROUGH, + MONOSPACE; + + static Style from(BodyRange.Style style) { + return switch (style) { + case NONE -> NONE; + case BOLD -> BOLD; + case ITALIC -> ITALIC; + case SPOILER -> SPOILER; + case STRIKETHROUGH -> STRIKETHROUGH; + case MONOSPACE -> MONOSPACE; + }; + } + } + + static TextStyle from(BodyRange bodyRange) { + return new TextStyle(Style.from(bodyRange.getStyle()), bodyRange.getStart(), bodyRange.getLength()); + } + } } public record Sync( diff --git a/src/main/java/org/asamk/signal/ReceiveMessageHandler.java b/src/main/java/org/asamk/signal/ReceiveMessageHandler.java index 87753b05..c5270030 100644 --- a/src/main/java/org/asamk/signal/ReceiveMessageHandler.java +++ b/src/main/java/org/asamk/signal/ReceiveMessageHandler.java @@ -177,6 +177,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()) { @@ -555,6 +561,12 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler { writer.println("- {}: {} (length: {})", formatContact(mention.recipient()), mention.start(), mention.length()); } + private void printTextStyle( + PlainTextWriter writer, MessageEnvelope.Data.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"); diff --git a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java index d2a08131..0ccff735 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java @@ -778,6 +778,7 @@ public class DbusManagerImpl implements Manager { Optional.empty(), List.of(), List.of(), + List.of(), List.of())), Optional.empty(), Optional.empty(), @@ -852,6 +853,7 @@ public class DbusManagerImpl implements Manager { Optional.empty(), List.of(), List.of(), + List.of(), List.of())), Optional.empty())), Optional.empty(),