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
@@ -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");
@@ -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();
@@ -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);