]> nmode's Git Repositories - signal-cli/commitdiff
Upload attachment before sending to fix sending attachments to multiple recipients
authorAsamK <asamk@gmx.de>
Tue, 21 Jan 2020 19:32:45 +0000 (20:32 +0100)
committerAsamK <asamk@gmx.de>
Tue, 21 Jan 2020 19:32:52 +0000 (20:32 +0100)
Fixes #259

src/main/java/org/asamk/signal/manager/Manager.java
src/main/java/org/asamk/signal/manager/Utils.java

index 5c6a210b1dc05ce227ac3b5ca345d5a22c4930f3..5e0ad75f4c57140bcf0f316a1dc676c71e165a3e 100644 (file)
@@ -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<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);
index 4a22c1e7f9d5a2fda2fa871884610eac2dfdcdaa..b253a2ee45b7b7a42eb90392212dec9c8ea0a912 100644 (file)
@@ -47,18 +47,18 @@ import static org.whispersystems.signalservice.internal.util.Util.isEmpty;
 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 {