Send mime type in sims and get from there too sometimes

Stephen Paul Weber created

Change summary

src/main/java/eu/siacs/conversations/entities/Message.java            | 22 
src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java |  5 
src/main/java/eu/siacs/conversations/persistance/FileBackend.java     |  1 
3 files changed, 27 insertions(+), 1 deletion(-)

Detailed changes

src/main/java/eu/siacs/conversations/entities/Message.java 🔗

@@ -1344,6 +1344,28 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable
             }
         }
 
+        public String getMediaType() {
+            Element file = getFileElement();
+            if (file == null) return null;
+
+            return file.findChildContent("media-type", file.getNamespace());
+        }
+
+        public void setMediaType(final String mime) {
+            if (sims == null) toSims();
+            Element file = getFileElement();
+
+            for (Element child : file.getChildren()) {
+                if (child.getName().equals("media-type") && child.getNamespace().equals(file.getNamespace())) {
+                    file.removeChild(child);
+                }
+            }
+
+            if (mime != null) {
+                file.addChild("media-type", file.getNamespace()).setContent(mime);
+            }
+        }
+
         public Element toSims() {
             if (sims == null) sims = new Element("reference", "urn:xmpp:reference:0");
             sims.setAttribute("type", "data");

src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java 🔗

@@ -94,7 +94,10 @@ public class HttpDownloadConnection implements Transferable {
                     && message.getEncryption() != Message.ENCRYPTION_AXOLOTL) {
                 this.message.setEncryption(Message.ENCRYPTION_NONE);
             }
-            final String ext = extension.getExtension();
+            String ext = extension.getExtension();
+            if (ext == null && fileParams.getMediaType() != null) {
+                ext = MimeUtils.guessExtensionFromMimeType(fileParams.getMediaType());
+            }
             final String filename = Strings.isNullOrEmpty(ext) ? message.getUuid() : String.format("%s.%s", message.getUuid(), ext);
             mXmppConnectionService.getFileBackend().setupRelativeFilePath(message, filename);
             setupFile();

src/main/java/eu/siacs/conversations/persistance/FileBackend.java 🔗

@@ -1763,6 +1763,7 @@ public class FileBackend {
             fileParams.url = url;
         }
         fileParams.setName(file.getName());
+        fileParams.setMediaType(mime);
         if (encrypted && !file.exists()) {
             Log.d(Config.LOGTAG, "skipping updateFileParams because file is encrypted");
             final DownloadableFile encryptedFile = getFile(message, false);