Add initial XEP-0084 support.

It does not auto-retrieve and store avatars yet, but everything is there
to do so.
This commit is contained in:
Lance Stout
2012-06-17 16:26:19 -07:00
parent 378a42889f
commit 0b7f134021
6 changed files with 200 additions and 0 deletions

View File

@@ -0,0 +1,78 @@
"""
SleekXMPP: The Sleek XMPP Library
Copyright (C) 2012 Nathanael C. Fritz, Lance J.T. Stout
This file is part of SleekXMPP.
See the file LICENSE for copying permission.
"""
from base64 import b64encode, b64decode
from sleekxmpp.thirdparty.suelta.util import bytes
from sleekxmpp.xmlstream import ET, ElementBase, register_stanza_plugin
class Data(ElementBase):
name = 'data'
namespace = 'urn:xmpp:avatar:data'
plugin_attrib = 'avatar_data'
interfaces = set(['value'])
def get_value(self):
if self.xml.text:
return b64decode(bytes(self.xml.text))
return ''
def set_value(self, value):
if value:
self.xml.text = b64encode(bytes(value))
else:
self.xml.text = ''
def del_value(self):
self.xml.text = ''
class MetaData(ElementBase):
name = 'metadata'
namespace = 'urn:xmpp:avatar:metadata'
plugin_attrib = 'avatar_metadata'
interfaces = set()
def add_info(self, id, itype, ibytes, height=None, width=None, url=None):
info = Info()
info.values = {'id': id,
'type': itype,
'bytes': ibytes,
'height': height,
'width': width,
'url': url}
self.append(info)
def add_pointer(self, xml):
if not isinstance(xml, Pointer):
pointer = Pointer()
pointer.append(xml)
self.append(pointer)
else:
self.append(xml)
class Info(ElementBase):
name = 'info'
namespace = 'urn:xmpp:avatar:metadata'
plugin_attrib = 'info'
plugin_multi_attrib = 'items'
interfaces = set(['bytes', 'height', 'id', 'type', 'url', 'width'])
class Pointer(ElementBase):
name = 'pointer'
namespace = 'urn:xmpp:avatar:metadata'
plugin_attrib = 'pointer'
multi_plugin_attrib = 'pointers'
interfaces = set()
register_stanza_plugin(MetaData, Info, iterable=True)
register_stanza_plugin(MetaData, Pointer, iterable=True)