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*
This commit is contained in:
@@ -93,7 +93,7 @@ class FormField(ElementBase):
|
||||
if valXML.text is None:
|
||||
valXML.text = ''
|
||||
values.append(valXML.text)
|
||||
if self._type == 'text-multi' and condense:
|
||||
if self._type == 'text-multi' and convert:
|
||||
values = "\n".join(values)
|
||||
return values
|
||||
else:
|
||||
|
@@ -357,6 +357,7 @@ class xep_0030(base_plugin):
|
||||
else:
|
||||
if str(jid) == str(self.xmpp.boundjid):
|
||||
local = True
|
||||
jid = jid.full
|
||||
|
||||
if local or jid in (None, ''):
|
||||
log.debug("Looking up local disco#info data " + \
|
||||
@@ -626,6 +627,9 @@ class xep_0030(base_plugin):
|
||||
node -- The node requested.
|
||||
data -- Optional, custom data to pass to the handler.
|
||||
"""
|
||||
if isinstance(jid, JID):
|
||||
jid = jid.full
|
||||
|
||||
if jid in (None, ''):
|
||||
if self.xmpp.is_component:
|
||||
jid = self.xmpp.boundjid.full
|
||||
|
@@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user