]> nmode's Git Repositories - signal-cli/commitdiff
Use guessContentTypeFromStream as fallback for probeContentType method
authorAsamK <asamk@gmx.de>
Sat, 7 Dec 2019 14:47:57 +0000 (15:47 +0100)
committerAsamK <asamk@gmx.de>
Sat, 7 Dec 2019 14:47:57 +0000 (15:47 +0100)
Fixes #233
Fixes #109

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

index 38dd65b85fcb3a22ef133819ec8bed24fd0973dc..733c4a8752f558bae83ac9113030a522e43cac78 100644 (file)
@@ -18,6 +18,7 @@ import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
 import org.whispersystems.signalservice.api.util.StreamDetails;
 import org.whispersystems.signalservice.internal.util.Base64;
 
+import java.io.BufferedInputStream;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.File;
@@ -29,6 +30,7 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
 import java.net.URI;
+import java.net.URLConnection;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
 import java.nio.file.Files;
@@ -59,13 +61,23 @@ class Utils {
         return SignalServiceAttachments;
     }
 
-    static SignalServiceAttachmentStream createAttachment(File attachmentFile) throws IOException {
-        InputStream attachmentStream = new FileInputStream(attachmentFile);
-        final long attachmentSize = attachmentFile.length();
-        String mime = Files.probeContentType(attachmentFile.toPath());
+    private static String getFileMimeType(File file) throws IOException {
+        String mime = Files.probeContentType(file.toPath());
+        if (mime == null) {
+            try (InputStream bufferedStream = new BufferedInputStream(new FileInputStream(file))) {
+                mime = URLConnection.guessContentTypeFromStream(bufferedStream);
+            }
+        }
         if (mime == null) {
             mime = "application/octet-stream";
         }
+        return mime;
+    }
+
+    static SignalServiceAttachmentStream createAttachment(File attachmentFile) throws IOException {
+        InputStream attachmentStream = new FileInputStream(attachmentFile);
+        final long attachmentSize = attachmentFile.length();
+        final String mime = getFileMimeType(attachmentFile);
         // TODO mabybe add a parameter to set the voiceNote, preview, width, height and caption option
         Optional<byte[]> preview = Optional.absent();
         Optional<String> caption = Optional.absent();