diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java index 1feecbea87f585e2160bfbb3b3f6119a392c035a..956c5724454a12994f227ec5967e368c96e817a5 100644 --- a/src/main/java/eu/siacs/conversations/entities/Message.java +++ b/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"); diff --git a/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java b/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java index 28685bfe9b799f5d50594a0b0f9a13e07954912f..29e7fc3fca2bd75f42b49c2617c1c693b9bc2bcf 100644 --- a/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java +++ b/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(); diff --git a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java index 6c5d81ec89347881ea6ef9fb82b5ebc2c60091e7..2472503f8eb407d9cc2ce21d6a991e3f23f3d4a5 100644 --- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java +++ b/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);