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:
78
sleekxmpp/plugins/xep_0084/stanza.py
Normal file
78
sleekxmpp/plugins/xep_0084/stanza.py
Normal 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)
|
||||
Reference in New Issue
Block a user