import org.asamk.signal.manager.api.Pair;
import org.asamk.signal.manager.api.PendingAdminApprovalException;
import org.asamk.signal.manager.api.ReceiveConfig;
+import org.asamk.signal.manager.api.Recipient;
import org.asamk.signal.manager.api.RecipientIdentifier;
import org.asamk.signal.manager.api.SendGroupMessageResults;
import org.asamk.signal.manager.api.SendMessageResult;
import org.asamk.signal.manager.storage.groups.GroupInfo;
import org.asamk.signal.manager.storage.identities.IdentityInfo;
import org.asamk.signal.manager.storage.recipients.Profile;
-import org.asamk.signal.manager.storage.recipients.Recipient;
import org.asamk.signal.manager.storage.recipients.RecipientId;
import org.asamk.signal.manager.storage.stickerPacks.JsonStickerPack;
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;
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()));
}
@Override
public void deleteRecipient(final RecipientIdentifier.Single recipient) {
- account.removeRecipient(account.getRecipientResolver().resolveRecipient(recipient.toPartialRecipientAddress()));
+ account.removeRecipient(account.getRecipientResolver().resolveRecipient(recipient.getIdentifier()));
}
@Override
public void deleteContact(final RecipientIdentifier.Single recipient) {
account.getContactStore()
- .deleteContact(account.getRecipientResolver().resolveRecipient(recipient.toPartialRecipientAddress()));
+ .deleteContact(account.getRecipientResolver().resolveRecipient(recipient.getIdentifier()));
}
@Override
}
// refresh profiles of explicitly given recipients
context.getProfileHelper().refreshRecipientProfiles(recipientIds);
- return account.getRecipientStore().getRecipients(onlyContacts, blocked, recipientIds, name);
+ return account.getRecipientStore()
+ .getRecipients(onlyContacts, blocked, recipientIds, name)
+ .stream()
+ .map(s -> new Recipient(s.getRecipientId(),
+ s.getAddress().toApiRecipientAddress(),
+ s.getContact(),
+ s.getProfileKey(),
+ s.getExpiringProfileKeyCredential(),
+ s.getProfile()))
+ .toList();
}
@Override
.resolveRecipientAddress(account.getRecipientResolver().resolveRecipient(identityInfo.getServiceId()));
final var scannableFingerprint = context.getIdentityHelper()
.computeSafetyNumberForScanning(identityInfo.getServiceId(), identityInfo.getIdentityKey());
- return new Identity(address,
+ return new Identity(address.toApiRecipientAddress(),
identityInfo.getIdentityKey(),
context.getIdentityHelper()
.computeSafetyNumber(identityInfo.getServiceId(), identityInfo.getIdentityKey()),