diff --git a/slixmpp/plugins/__init__.py b/slixmpp/plugins/__init__.py index 0b281439..6db22ed2 100644 --- a/slixmpp/plugins/__init__.py +++ b/slixmpp/plugins/__init__.py @@ -76,6 +76,7 @@ PLUGINS = [ 'xep_0256', # Last Activity in Presence 'xep_0257', # Client Certificate Management for SASL EXTERNAL 'xep_0258', # Security Labels in XMPP + 'xep_0264', # Jingle Content Thumbnails # 'xep_0270', # XMPP Compliance Suites 2010. Don’t automatically load 'xep_0279', # Server IP Check 'xep_0280', # Message Carbons diff --git a/slixmpp/plugins/xep_0264/__init__.py b/slixmpp/plugins/xep_0264/__init__.py new file mode 100644 index 00000000..8e4e4272 --- /dev/null +++ b/slixmpp/plugins/xep_0264/__init__.py @@ -0,0 +1,5 @@ +from slixmpp.plugins.base import register_plugin + +from .thumbnail import XEP_0264 + +register_plugin(XEP_0264) diff --git a/slixmpp/plugins/xep_0264/stanza.py b/slixmpp/plugins/xep_0264/stanza.py new file mode 100644 index 00000000..34d14fd0 --- /dev/null +++ b/slixmpp/plugins/xep_0264/stanza.py @@ -0,0 +1,36 @@ +from typing import Optional + +from slixmpp import register_stanza_plugin +from slixmpp.plugins.xep_0234.stanza import File +from slixmpp.xmlstream import ElementBase + +NS = "urn:xmpp:thumbs:1" + + +class Thumbnail(ElementBase): + name = plugin_attrib = "thumbnail" + namespace = NS + interfaces = {"uri", "media-type", "width", "height"} + + def get_width(self) -> int: + return _int_or_none(self._get_attr("width")) + + def get_height(self) -> int: + return _int_or_none(self._get_attr("height")) + + def set_width(self, v: int) -> None: + self._set_attr("width", str(v)) + + def set_height(self, v: int) -> None: + self._set_attr("height", str(v)) + + +def _int_or_none(v) -> Optional[int]: + try: + return int(v) + except ValueError: + return None + + +def register_plugin(): + register_stanza_plugin(File, Thumbnail) diff --git a/slixmpp/plugins/xep_0264/thumbnail.py b/slixmpp/plugins/xep_0264/thumbnail.py new file mode 100644 index 00000000..f4e3005b --- /dev/null +++ b/slixmpp/plugins/xep_0264/thumbnail.py @@ -0,0 +1,24 @@ +import logging + +from slixmpp.plugins import BasePlugin + +from . import stanza + +log = logging.getLogger(__name__) + + +class XEP_0264(BasePlugin): + + """ + XEP-0264: Jingle Content Thumbnails + + Can also be used with 0385 (Stateless inline media sharing) + """ + + name = "xep_0264" + description = "XEP-0264: Jingle Content Thumbnails" + dependencies = {"xep_0234"} + stanza = stanza + + def plugin_init(self): + stanza.register_plugin() diff --git a/slixmpp/pluginsdict.py b/slixmpp/pluginsdict.py index 96c6cb21..58fd8123 100644 --- a/slixmpp/pluginsdict.py +++ b/slixmpp/pluginsdict.py @@ -69,6 +69,7 @@ from slixmpp.plugins.xep_0249 import XEP_0249 from slixmpp.plugins.xep_0256 import XEP_0256 from slixmpp.plugins.xep_0257 import XEP_0257 from slixmpp.plugins.xep_0258 import XEP_0258 +from slixmpp.plugins.xep_0264 import XEP_0264 from slixmpp.plugins.xep_0279 import XEP_0279 from slixmpp.plugins.xep_0280 import XEP_0280 from slixmpp.plugins.xep_0297 import XEP_0297 @@ -163,6 +164,7 @@ class PluginsDict(TypedDict): xep_0256: XEP_0256 xep_0257: XEP_0257 xep_0258: XEP_0258 + xep_0264: XEP_0264 xep_0279: XEP_0279 xep_0280: XEP_0280 xep_0297: XEP_0297