]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/manager/util/AttachmentUtils.java
b9a97073cd41fbca5d9088e183a4c23066f69cf9
[signal-cli] / src / main / java / org / asamk / signal / manager / util / AttachmentUtils.java
1 package org.asamk.signal.manager.util;
2
3 import org.asamk.signal.manager.AttachmentInvalidException;
4 import org.whispersystems.libsignal.util.guava.Optional;
5 import org.whispersystems.signalservice.api.messages.SignalServiceAttachment;
6 import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentStream;
7 import org.whispersystems.signalservice.internal.push.http.ResumableUploadSpec;
8
9 import java.io.File;
10 import java.io.FileInputStream;
11 import java.io.FileNotFoundException;
12 import java.io.FileOutputStream;
13 import java.io.IOException;
14 import java.io.InputStream;
15 import java.io.OutputStream;
16 import java.util.ArrayList;
17 import java.util.List;
18
19 public class AttachmentUtils {
20
21 public static List<SignalServiceAttachment> getSignalServiceAttachments(List<String> attachments) throws AttachmentInvalidException {
22 List<SignalServiceAttachment> signalServiceAttachments = null;
23 if (attachments != null) {
24 signalServiceAttachments = new ArrayList<>(attachments.size());
25 for (String attachment : attachments) {
26 try {
27 signalServiceAttachments.add(createAttachment(new File(attachment)));
28 } catch (IOException e) {
29 throw new AttachmentInvalidException(attachment, e);
30 }
31 }
32 }
33 return signalServiceAttachments;
34 }
35
36 public static SignalServiceAttachmentStream createAttachment(File attachmentFile) throws IOException {
37 InputStream attachmentStream = new FileInputStream(attachmentFile);
38 final long attachmentSize = attachmentFile.length();
39 final String mime = Utils.getFileMimeType(attachmentFile, "application/octet-stream");
40 // TODO mabybe add a parameter to set the voiceNote, borderless, preview, width, height and caption option
41 final long uploadTimestamp = System.currentTimeMillis();
42 Optional<byte[]> preview = Optional.absent();
43 Optional<String> caption = Optional.absent();
44 Optional<String> blurHash = Optional.absent();
45 final Optional<ResumableUploadSpec> resumableUploadSpec = Optional.absent();
46 return new SignalServiceAttachmentStream(attachmentStream,
47 mime,
48 attachmentSize,
49 Optional.of(attachmentFile.getName()),
50 false,
51 false,
52 preview,
53 0,
54 0,
55 uploadTimestamp,
56 caption,
57 blurHash,
58 null,
59 null,
60 resumableUploadSpec);
61 }
62
63 public static File retrieveAttachment(SignalServiceAttachmentStream stream, File outputFile) throws IOException {
64 InputStream input = stream.getInputStream();
65
66 try (OutputStream output = new FileOutputStream(outputFile)) {
67 byte[] buffer = new byte[4096];
68 int read;
69
70 while ((read = input.read(buffer)) != -1) {
71 output.write(buffer, 0, read);
72 }
73 } catch (FileNotFoundException e) {
74 e.printStackTrace();
75 return null;
76 }
77 return outputFile;
78 }
79 }