plugin XEP-0115: fixed caps initial check

This commit is contained in:
Goffi 2018-03-30 17:51:32 +02:00
commit 2422d0a1d7
2 changed files with 14 additions and 8 deletions

View file

@ -190,7 +190,7 @@ class SatXMPPEntity(object):
self._connected.addCallback(self._disconnectionCb)
self._connected.addErrback(self._disconnectionEb)
log.info(_("********** [%s] CONNECTED **********") % self.profile)
log.info(_(u"********** [{profile}] CONNECTED **********").format(profile=self.profile))
self.streamInitialized()
self.host_app.bridge.connected(self.profile, unicode(self.jid)) # we send the signal to the clients
@ -234,7 +234,7 @@ class SatXMPPEntity(object):
self.host_app.bridge.disconnected(self.profile) # we send the signal to the clients
self._connected.callback(None)
self.host_app.purgeEntity(self.profile) # and we remove references to this client
log.info(_("********** [%s] DISCONNECTED **********") % self.profile)
log.info(_(u"********** [{profile}] DISCONNECTED **********").format(profile=self.profile))
if not self.conn_deferred.called:
# FIXME: real error is not gotten here (e.g. if jid is not know by Prosody,
# we should have the real error)
@ -968,9 +968,10 @@ class SatPresenceProtocol(xmppim.PresenceClientProtocol):
self.host = host
def send(self, obj):
if not self.host.trigger.point("Presence send", self.parent, obj):
presence_d = defer.succeed(None)
if not self.host.trigger.point("Presence send", self.parent, obj, presence_d):
return
super(SatPresenceProtocol, self).send(obj)
presence_d.addCallback(lambda __: super(SatPresenceProtocol, self).send(obj))
def availableReceived(self, entity, show=None, statuses=None, priority=0):
log.debug(_(u"presence update for [%(entity)s] (available, show=%(show)s statuses=%(statuses)s priority=%(priority)d)") % {'entity': entity, C.PRESENCE_SHOW: show, C.PRESENCE_STATUSES: statuses, C.PRESENCE_PRIORITY: priority})

View file

@ -56,14 +56,13 @@ class XEP_0115(object):
def __init__(self, host):
log.info(_("Plugin XEP_0115 initialization"))
self.host = host
host.trigger.add("Disco handled", self._checkHash)
host.trigger.add("Presence send", self._presenceTrigger)
def getHandler(self, client):
return XEP_0115_handler(self, client.profile)
@defer.inlineCallbacks
def profileConnected(self, client):
def _prepareCaps(self, client):
# we have to calculate hash for client
# because disco infos/identities may change between clients
@ -96,12 +95,18 @@ class XEP_0115(object):
self.host.memory.disco.hashes[cap_hash] = disco_infos
self.host.memory.updateEntityData(client.jid, C.ENTITY_CAP_HASH, cap_hash, profile_key=client.profile)
def _presenceTrigger(self, client, obj):
def _presenceAddElt(self, client, obj):
if client._caps_optimize:
if client._caps_sent:
return True
return
client.caps_sent = True
obj.addChild(client._caps_elt)
def _presenceTrigger(self, client, obj, presence_d):
if not hasattr(client, "_caps_optimize"):
presence_d.addCallback(lambda __: self._prepareCaps(client))
presence_d.addCallback(lambda __: self._presenceAddElt(client, obj))
return True