From: AsamK Date: Tue, 21 Jan 2020 19:32:45 +0000 (+0100) Subject: Upload attachment before sending to fix sending attachments to multiple recipients X-Git-Tag: v0.6.6~41 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/eca1737d285d8452474c72ecb302af387c467536 Upload attachment before sending to fix sending attachments to multiple recipients Fixes #259 --- diff --git a/src/main/java/org/asamk/signal/manager/Manager.java b/src/main/java/org/asamk/signal/manager/Manager.java index 5c6a210b..5e0ad75f 100644 --- a/src/main/java/org/asamk/signal/manager/Manager.java +++ b/src/main/java/org/asamk/signal/manager/Manager.java @@ -647,7 +647,20 @@ public class Manager implements Signal { throws IOException, EncapsulatedExceptions, AttachmentInvalidException { final SignalServiceDataMessage.Builder messageBuilder = SignalServiceDataMessage.newBuilder().withBody(messageText); if (attachments != null) { - messageBuilder.withAttachments(Utils.getSignalServiceAttachments(attachments)); + List attachmentStreams = Utils.getSignalServiceAttachments(attachments); + + // Upload attachments here, so we only upload once even for multiple recipients + SignalServiceMessageSender messageSender = getMessageSender(); + List 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); diff --git a/src/main/java/org/asamk/signal/manager/Utils.java b/src/main/java/org/asamk/signal/manager/Utils.java index 4a22c1e7..b253a2ee 100644 --- a/src/main/java/org/asamk/signal/manager/Utils.java +++ b/src/main/java/org/asamk/signal/manager/Utils.java @@ -47,18 +47,18 @@ import static org.whispersystems.signalservice.internal.util.Util.isEmpty; class Utils { static List getSignalServiceAttachments(List attachments) throws AttachmentInvalidException { - List SignalServiceAttachments = null; + List 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 {