summaryrefslogtreecommitdiff
path: root/sleekxmpp/plugins/xep_0115/caps.py
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2012-01-11 16:39:55 -0800
committerLance Stout <lancestout@gmail.com>2012-01-11 16:39:55 -0800
commitc0074f95b160f4766168ed2cae955709bf38d124 (patch)
treea81d265d3aedb235d65be59f1fdea173c42818cd /sleekxmpp/plugins/xep_0115/caps.py
parenta79ce1c35e041c168af72f051829c5576713a186 (diff)
downloadslixmpp-c0074f95b160f4766168ed2cae955709bf38d124.tar.gz
slixmpp-c0074f95b160f4766168ed2cae955709bf38d124.tar.bz2
slixmpp-c0074f95b160f4766168ed2cae955709bf38d124.tar.xz
slixmpp-c0074f95b160f4766168ed2cae955709bf38d124.zip
update_caps() can now do presence broadcasting.
As part of adding this feature: - fixed bug in update_caps() not assigning verstrings - fixed xep_0004 typo - can now use None as a roster key which will map to boundjid.bare - fixed using JID objects in disco node handlers - fixed failing test related to get_roster Several of these bugs I've fixed before, so I either didn't push them earlier, or I clobbered something when merging. *shrug*
Diffstat (limited to 'sleekxmpp/plugins/xep_0115/caps.py')
-rw-r--r--sleekxmpp/plugins/xep_0115/caps.py24
1 files changed, 20 insertions, 4 deletions
diff --git a/sleekxmpp/plugins/xep_0115/caps.py b/sleekxmpp/plugins/xep_0115/caps.py
index d3e62abb..289bb8d1 100644
--- a/sleekxmpp/plugins/xep_0115/caps.py
+++ b/sleekxmpp/plugins/xep_0115/caps.py
@@ -65,10 +65,11 @@ class xep_0115(base_plugin):
self.xmpp.add_event_handler('entity_caps', self._process_caps,
threaded=True)
- self.xmpp.register_feature('caps',
- self._handle_caps_feature,
- restart=False,
- order=10010)
+ if not self.xmpp.is_component:
+ self.xmpp.register_feature('caps',
+ self._handle_caps_feature,
+ restart=False,
+ order=10010)
def post_init(self):
base_plugin.post_init(self)
@@ -256,6 +257,21 @@ class xep_0115(base_plugin):
info=info)
self.cache_caps(ver, info)
self.assign_verstring(jid, ver)
+
+ if self.broadcast:
+ # Check if we've sent directed presence. If we haven't, we
+ # can just send a normal presence stanza. If we have, then
+ # we will send presence to each contact individually so
+ # that we don't clobber existing statuses.
+ directed = False
+ for contact in self.xmpp.roster[jid]:
+ if self.xmpp.roster[jid][contact].last_status is not None:
+ directed = True
+ if not directed:
+ self.xmpp.roster[jid].send_last_presence()
+ else:
+ for contact in self.xmpp.roster[jid]:
+ self.xmpp.roster[jid][contact].send_last_presence()
except XMPPError:
return