Mercurial > libervia-backend
diff sat/core/xmpp.py @ 3175:b9a2dd4d750a
core (xmpp): add `name` and `media_type` in attachements if they are missing.
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 18 Feb 2020 18:17:18 +0100 |
parents | 343b8076e967 |
children | 84a94b385760 |
line wrap: on
line diff
--- a/sat/core/xmpp.py Tue Feb 18 18:17:18 2020 +0100 +++ b/sat/core/xmpp.py Tue Feb 18 18:17:18 2020 +0100 @@ -21,6 +21,7 @@ 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 @@ 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 @@ 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"))