
In a single commit, because it isn’t that interesting to detail each change. List of reverts: Revert "XEP-0030: allow get_info and get_items to return a coroutine" This reverts commit 506ca6991790cffb90c5b6e3b765237ccc136e1a. Revert "XEP-0060: wrap all iq-sending functions with coroutine_wrapper" This reverts commit e85fa4203e0ee7108d8d37f73913c21628e3d6fc. Revert "XEP-0163: wrap publish() with coroutine_wrapper" This reverts commit 69da1c1d7cf7a1c0dbbeeb83f528b4e5f5b5be0c. Revert "XEP-0084: wrap functions with coroutine_wrapper" This reverts commit ea5615f236bd80fb4217398977833ca790cbef71. Partially revert 3d243f7 (XEP-0054) - continue wrapping functions but with future_wrapper Partially revert 115fe95 (xep-0153) - use callbacks rather than coroutine callbacks, and propagate iqtimeouts in set_avatar. Revert "XEP-0049: wrap functions with coroutine_wrapper" This reverts commit e68135f59f9a224688679eb91e8063041d6f000b. Revert "XEP-0077: wrap functions with coroutine_wrapper" This reverts commit 1e4944d47e8296fdaa792a8b3fc87ea99acc217c. Partially revert cd7ff685 (XEP-0199) - remove the iq.send wrapping but keep ping() as a coroutine Revert "XEP-0257: wrap functions with coroutine_wrapper" This reverts commit 4da870fd191697d010e677eee32ef86439967353. Revert "XEP-0092: wrap get_version() with coroutine_wrapper" This reverts commit 6e35948276c36ea2696f0de64dc179a1073ee3a6. Revert "XEP-0191: wrap functions with coroutine_wrapper" This reverts commit 6e8235544cc1bdefea75a8d93e5e3a48a13552ba. Revert "XEP-0280: wrap functions with coroutine_wrapper" This reverts commit f795ac02e322445be13077463638924d1f22d313. Revert "XEP-0012: wrap get_last_activity() with coroutine_wrapper" This reverts commit 2ee05d9616d2959d19a7a87d21c58e6aae1db56e. Revert "XEP-0202: wrap get_entity_time() with coroutine_wrapper" This reverts commit 6fb3ecd414f24374f17811d7ad2fd01e4924e311. Revert "XEP-0231: wrap get_bob() with coroutine_wrapper" This reverts commit 17464b10a42d9b3c4daba763e06e53c429478abd. Revert "XEP-0258: wrap get_catalog() with coroutine_wrapper" This reverts commit 18a4978456a33e6ea38de1e07b1aa43bcc10d45f. Revert "XEP-0050: wrap send_command() and get_commands() with coroutine_wrapper" This reverts commit e034b31d6bc34f43578456e9c6527bc56dff78e3. Revert "XEP-0279: wrap check_ip() with coroutine_wrapper" This reverts commit e112e864756f1222a044ee28e3c13c5925618b0c.
106 lines
3.6 KiB
Python
106 lines
3.6 KiB
Python
"""
|
|
Slixmpp: The Slick XMPP Library
|
|
Copyright (C) 2012 Nathanael C. Fritz, Lance J.T. Stout
|
|
This file is part of Slixmpp.
|
|
|
|
See the file LICENSE for copying permission.
|
|
"""
|
|
|
|
import hashlib
|
|
import logging
|
|
|
|
from slixmpp import Iq
|
|
from slixmpp.plugins import BasePlugin
|
|
from slixmpp.xmlstream.handler import Callback
|
|
from slixmpp.xmlstream.matcher import StanzaPath
|
|
from slixmpp.xmlstream import register_stanza_plugin, JID
|
|
from slixmpp.plugins.xep_0084 import stanza, Data, MetaData
|
|
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
class XEP_0084(BasePlugin):
|
|
|
|
name = 'xep_0084'
|
|
description = 'XEP-0084: User Avatar'
|
|
dependencies = set(['xep_0163', 'xep_0060'])
|
|
stanza = stanza
|
|
|
|
def plugin_init(self):
|
|
pubsub_stanza = self.xmpp['xep_0060'].stanza
|
|
register_stanza_plugin(pubsub_stanza.Item, Data)
|
|
register_stanza_plugin(pubsub_stanza.EventItem, Data)
|
|
|
|
self.xmpp['xep_0060'].map_node_event(Data.namespace, 'avatar_data')
|
|
|
|
def plugin_end(self):
|
|
self.xmpp['xep_0030'].del_feature(feature=MetaData.namespace)
|
|
self.xmpp['xep_0163'].remove_interest(MetaData.namespace)
|
|
|
|
def session_bind(self, jid):
|
|
self.xmpp['xep_0163'].register_pep('avatar_metadata', MetaData)
|
|
|
|
def generate_id(self, data):
|
|
return hashlib.sha1(data).hexdigest()
|
|
|
|
def retrieve_avatar(self, jid, id, url=None, ifrom=None,
|
|
callback=None, timeout=None):
|
|
return self.xmpp['xep_0060'].get_item(jid, Data.namespace, id,
|
|
ifrom=ifrom,
|
|
callback=callback,
|
|
timeout=timeout)
|
|
|
|
def publish_avatar(self, data, ifrom=None, callback=None,
|
|
timeout=None):
|
|
payload = Data()
|
|
payload['value'] = data
|
|
return self.xmpp['xep_0163'].publish(payload,
|
|
id=self.generate_id(data),
|
|
ifrom=ifrom,
|
|
callback=callback,
|
|
timeout=timeout)
|
|
|
|
def publish_avatar_metadata(self, items=None, pointers=None,
|
|
ifrom=None,
|
|
callback=None, timeout=None):
|
|
metadata = MetaData()
|
|
if items is None:
|
|
items = []
|
|
if not isinstance(items, (list, set)):
|
|
items = [items]
|
|
for info in items:
|
|
metadata.add_info(info['id'], info['type'], info['bytes'],
|
|
height=info.get('height', ''),
|
|
width=info.get('width', ''),
|
|
url=info.get('url', ''))
|
|
|
|
if pointers is not None:
|
|
for pointer in pointers:
|
|
metadata.add_pointer(pointer)
|
|
|
|
return self.xmpp['xep_0163'].publish(metadata,
|
|
id=info['id'],
|
|
ifrom=ifrom,
|
|
callback=callback,
|
|
timeout=timeout)
|
|
|
|
def stop(self, ifrom=None, callback=None, timeout=None):
|
|
"""
|
|
Clear existing avatar metadata information to stop notifications.
|
|
|
|
Arguments:
|
|
ifrom -- Specify the sender's JID.
|
|
timeout -- The length of time (in seconds) to wait for a response
|
|
before exiting the send call if blocking is used.
|
|
Defaults to slixmpp.xmlstream.RESPONSE_TIMEOUT
|
|
callback -- Optional reference to a stream handler function. Will
|
|
be executed when a reply stanza is received.
|
|
"""
|
|
metadata = MetaData()
|
|
return self.xmpp['xep_0163'].publish(metadata,
|
|
node=MetaData.namespace,
|
|
ifrom=ifrom,
|
|
callback=callback,
|
|
timeout=timeout)
|