Upload attachment before sending to fix sending attachments to multiple recipients

Fixes #259
This commit is contained in:
AsamK 2020-01-21 20:32:45 +01:00
parent 4bafc7212a
commit eca1737d28
2 changed files with 18 additions and 5 deletions

View file

@ -647,7 +647,20 @@ public class Manager implements Signal {
throws IOException, EncapsulatedExceptions, AttachmentInvalidException { throws IOException, EncapsulatedExceptions, AttachmentInvalidException {
final SignalServiceDataMessage.Builder messageBuilder = SignalServiceDataMessage.newBuilder().withBody(messageText); final SignalServiceDataMessage.Builder messageBuilder = SignalServiceDataMessage.newBuilder().withBody(messageText);
if (attachments != null) { 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()); messageBuilder.withProfileKey(account.getProfileKey());
sendMessageLegacy(messageBuilder, recipients); sendMessageLegacy(messageBuilder, recipients);

View file

@ -47,18 +47,18 @@ import static org.whispersystems.signalservice.internal.util.Util.isEmpty;
class Utils { class Utils {
static List<SignalServiceAttachment> getSignalServiceAttachments(List<String> attachments) throws AttachmentInvalidException { static List<SignalServiceAttachment> getSignalServiceAttachments(List<String> attachments) throws AttachmentInvalidException {
List<SignalServiceAttachment> SignalServiceAttachments = null; List<SignalServiceAttachment> signalServiceAttachments = null;
if (attachments != null) { if (attachments != null) {
SignalServiceAttachments = new ArrayList<>(attachments.size()); signalServiceAttachments = new ArrayList<>(attachments.size());
for (String attachment : attachments) { for (String attachment : attachments) {
try { try {
SignalServiceAttachments.add(createAttachment(new File(attachment))); signalServiceAttachments.add(createAttachment(new File(attachment)));
} catch (IOException e) { } catch (IOException e) {
throw new AttachmentInvalidException(attachment, e); throw new AttachmentInvalidException(attachment, e);
} }
} }
} }
return SignalServiceAttachments; return signalServiceAttachments;
} }
private static String getFileMimeType(File file) throws IOException { private static String getFileMimeType(File file) throws IOException {