From 576c319d6e6f5666f74c3306a99ba011322c08e8 Mon Sep 17 00:00:00 2001 From: Goffi Date: Tue, 18 Feb 2020 18:17:18 +0100 Subject: [PATCH] core (xmpp): add `name` and `media_type` in attachements if they are missing. --- sat/core/xmpp.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/sat/core/xmpp.py b/sat/core/xmpp.py index 57006891..055ca401 100644 --- a/sat/core/xmpp.py +++ b/sat/core/xmpp.py @@ -21,6 +21,7 @@ import time import calendar import uuid import mimetypes +from urllib.parse import urlparse, unquote from functools import partial import shortuuid from sat.core.i18n import _ @@ -1102,6 +1103,7 @@ class SatMessageProtocol(xmppim.MessageProtocol): if not cont: return data = self.parseMessage(message_elt) + post_treat.addCallback(self.completeAttachments) post_treat.addCallback(self.skipEmptyMessage) post_treat.addCallback(self.addToHistory) post_treat.addCallback(self.bridgeSignal, data) @@ -1125,6 +1127,18 @@ class SatMessageProtocol(xmppim.MessageProtocol): d.addCallback(self._onMessageStartWorkflow, client, message_elt, post_treat) + def completeAttachments(self, data): + """Complete missing metadata of attachments""" + for attachment in data['extra'].get(C.MESS_KEY_ATTACHMENTS, []): + if "name" not in attachment: + name = unquote(urlparse(attachment['url']).path.rsplit('/', 1)[-1]) + attachment["name"] = name + if C.MESS_KEY_MEDIA_TYPE not in attachment: + media_type = mimetypes.guess_type(attachment['url'], strict=False)[0] + if media_type: + attachment[C.MESS_KEY_MEDIA_TYPE] = media_type + return data + def skipEmptyMessage(self, data): if not data["message"] and not data["extra"] and not data["subject"]: raise failure.Failure(exceptions.CancelError("Cancelled empty message"))