throws IOException, EncapsulatedExceptions, AttachmentInvalidException {
final SignalServiceDataMessage.Builder messageBuilder = SignalServiceDataMessage.newBuilder().withBody(messageText);
if (attachments != null) {
- messageBuilder.withAttachments(Utils.getSignalServiceAttachments(attachments));
+ List<SignalServiceAttachment> attachmentStreams = Utils.getSignalServiceAttachments(attachments);
+
+ // Upload attachments here, so we only upload once even for multiple recipients
+ SignalServiceMessageSender messageSender = getMessageSender();
+ List<SignalServiceAttachment> attachmentPointers = new ArrayList<>(attachmentStreams.size());
+ for (SignalServiceAttachment attachment : attachmentStreams) {
+ if (attachment.isStream()) {
+ attachmentPointers.add(messageSender.uploadAttachment(attachment.asStream()));
+ } else if (attachment.isPointer()) {
+ attachmentPointers.add(attachment.asPointer());
+ }
+ }
+
+ messageBuilder.withAttachments(attachmentPointers);
}
messageBuilder.withProfileKey(account.getProfileKey());
sendMessageLegacy(messageBuilder, recipients);
class Utils {
static List<SignalServiceAttachment> getSignalServiceAttachments(List<String> attachments) throws AttachmentInvalidException {
- List<SignalServiceAttachment> SignalServiceAttachments = null;
+ List<SignalServiceAttachment> signalServiceAttachments = null;
if (attachments != null) {
- SignalServiceAttachments = new ArrayList<>(attachments.size());
+ signalServiceAttachments = new ArrayList<>(attachments.size());
for (String attachment : attachments) {
try {
- SignalServiceAttachments.add(createAttachment(new File(attachment)));
+ signalServiceAttachments.add(createAttachment(new File(attachment)));
} catch (IOException e) {
throw new AttachmentInvalidException(attachment, e);
}
}
}
- return SignalServiceAttachments;
+ return signalServiceAttachments;
}
private static String getFileMimeType(File file) throws IOException {