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;
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;
return numbers.stream().collect(Collectors.toMap(n -> n, n -> {
final var number = canonicalizedNumbers.get(n);
- final var aci = registeredUsers.get(number);
- final var profile = aci == null
+ final var user = registeredUsers.get(number);
+ final var serviceId = user == null ? null : user.getServiceId();
+ final var profile = serviceId == null
? null
: context.getProfileHelper()
- .getRecipientProfile(account.getRecipientResolver().resolveRecipient(aci));
+ .getRecipientProfile(account.getRecipientResolver().resolveRecipient(serviceId));
return new UserStatus(number.isEmpty() ? null : number,
- aci == null ? null : aci.uuid(),
+ serviceId == null ? null : serviceId.uuid(),
profile != null
&& profile.getUnidentifiedAccessMode() == Profile.UnidentifiedAccessMode.UNRESTRICTED);
}));
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()));
}