}
public List<SignalServiceAttachment> uploadAttachments(final List<String> attachments) throws AttachmentInvalidException, IOException {
- var attachmentStreams = createAttachmentStreams(attachments);
+ final var attachmentStreams = createAttachmentStreams(attachments);
- // Upload attachments here, so we only upload once even for multiple recipients
- var attachmentPointers = new ArrayList<SignalServiceAttachment>(attachmentStreams.size());
- for (var attachmentStream : attachmentStreams) {
- attachmentPointers.add(uploadAttachment(attachmentStream));
+ try {
+ // Upload attachments here, so we only upload once even for multiple recipients
+ final var attachmentPointers = new ArrayList<SignalServiceAttachment>(attachmentStreams.size());
+ for (final var attachmentStream : attachmentStreams) {
+ attachmentPointers.add(uploadAttachment(attachmentStream));
+ }
+ return attachmentPointers;
+ } finally {
+ for (final var attachmentStream : attachmentStreams) {
+ attachmentStream.close();
+ }
}
- return attachmentPointers;
}
private List<SignalServiceAttachmentStream> createAttachmentStreams(List<String> attachments) throws AttachmentInvalidException, IOException {
retrieveAttachment(attachment, input -> IOUtils.copyStream(input, outputStream));
}
- public void retrieveAttachment(
- SignalServiceAttachment attachment, AttachmentHandler consumer
- ) throws IOException {
+ public void retrieveAttachment(SignalServiceAttachment attachment, AttachmentHandler consumer) throws IOException {
if (attachment.isStream()) {
var input = attachment.asStream().getInputStream();
// don't close input stream here, it might be reused later (e.g. with contact sync messages ...)
}
private InputStream retrieveAttachmentAsStream(
- SignalServiceAttachmentPointer pointer, File tmpFile
+ SignalServiceAttachmentPointer pointer,
+ File tmpFile
) throws IOException {
try {
return dependencies.getMessageReceiver()