From: AsamK Date: Sat, 22 Oct 2022 11:39:31 +0000 (+0200) Subject: Send long text messages as attachment instead X-Git-Tag: v0.11.5~35 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/7805622f0717062deff752895ef2fd8cf53b80aa?ds=sidebyside Send long text messages as attachment instead This matches the behavior of the official clients. --- diff --git a/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java index 3e463edf..58863d08 100644 --- a/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java @@ -61,6 +61,7 @@ import org.asamk.signal.manager.storage.stickerPacks.StickerPackStore; import org.asamk.signal.manager.storage.stickers.StickerPack; import org.asamk.signal.manager.util.AttachmentUtils; import org.asamk.signal.manager.util.KeyUtils; +import org.asamk.signal.manager.util.MimeUtils; import org.asamk.signal.manager.util.StickerUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -74,12 +75,15 @@ import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.util.DeviceNameUtil; import org.whispersystems.signalservice.api.util.InvalidNumberException; import org.whispersystems.signalservice.api.util.PhoneNumberFormatter; +import org.whispersystems.signalservice.api.util.StreamDetails; import org.whispersystems.signalservice.internal.util.Hex; import org.whispersystems.signalservice.internal.util.Util; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.net.URI; +import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.ArrayList; import java.util.Collection; @@ -557,7 +561,15 @@ class ManagerImpl implements Manager { private void applyMessage( final SignalServiceDataMessage.Builder messageBuilder, final Message message ) throws AttachmentInvalidException, IOException, UnregisteredRecipientException, InvalidStickerException { - messageBuilder.withBody(message.messageText()); + if (message.messageText().length() > 2000) { + final var messageBytes = message.messageText().getBytes(StandardCharsets.UTF_8); + final var textAttachment = AttachmentUtils.createAttachmentStream(new StreamDetails(new ByteArrayInputStream( + messageBytes), MimeUtils.LONG_TEXT, messageBytes.length), Optional.empty()); + messageBuilder.withBody(message.messageText().substring(0, 2000)); + messageBuilder.withAttachment(textAttachment); + } else { + messageBuilder.withBody(message.messageText()); + } if (message.attachments().size() > 0) { messageBuilder.withAttachments(context.getAttachmentHelper().uploadAttachments(message.attachments())); }