plugin XEP-0033: bug fix for sending messages with the addressing feature to several servers
This commit is contained in:
parent
d98b470117
commit
d12cf069f8
1 changed files with 11 additions and 4 deletions
|
|
@ -29,10 +29,11 @@ except ImportError:
|
|||
from wokkel.subprotocols import XMPPHandler
|
||||
from threading import Timer
|
||||
from twisted.words.xish import domish
|
||||
from twisted.internet import defer
|
||||
from twisted.internet import defer, threads
|
||||
|
||||
from sat.core.sat_main import MessageSentAndStored, AbortSendMessage
|
||||
from sat.tools.misc import TriggerManager
|
||||
from time import time
|
||||
|
||||
# TODO: fix Prosody "addressing" plugin to leave the concerned bcc according to the spec:
|
||||
#
|
||||
|
|
@ -69,6 +70,7 @@ class XEP_0033(object):
|
|||
def __init__(self, host):
|
||||
logging.info(_("Extended Stanza Addressing plugin initialization"))
|
||||
self.host = host
|
||||
self.internal_data = {}
|
||||
host.trigger.add("sendMessage", self.sendMessageTrigger, TriggerManager.MIN_PRIORITY)
|
||||
host.trigger.add("MessageReceived", self.messageReceivedTrigger)
|
||||
|
||||
|
|
@ -119,10 +121,9 @@ class XEP_0033(object):
|
|||
new_data['to'] = JID(to_jid)
|
||||
new_data['xml']['to'] = to_jid
|
||||
if entity:
|
||||
if 'address' in mess_data['extra']:
|
||||
if entity not in self.internal_data[timestamp]:
|
||||
self.host.sendAndStoreMessage(mess_data, False, profile)
|
||||
# just to remember that the message has been sent
|
||||
del mess_data['extra']['address']
|
||||
self.internal_data[timestamp].append(entity)
|
||||
# we still need to fill the history and signal the echo...
|
||||
self.host.sendAndStoreMessage(new_data, True, profile)
|
||||
else:
|
||||
|
|
@ -132,11 +133,17 @@ class XEP_0033(object):
|
|||
def errback(failure, to_jid):
|
||||
discoCallback(None, to_jid)
|
||||
|
||||
timestamp = time()
|
||||
self.internal_data[timestamp] = []
|
||||
defer_list = []
|
||||
for type_, jid_ in entries:
|
||||
d = defer.Deferred()
|
||||
d.addCallback(self.host.requestServerDisco, JID(JID(jid_).host), profile_key=profile)
|
||||
d.addCallbacks(discoCallback, errback, callbackArgs=[jid_], errbackArgs=[jid_])
|
||||
d.callback(NS_ADDRESS)
|
||||
defer_list.append(d)
|
||||
d = defer.Deferred().addCallback(lambda dummy: self.internal_data.pop(timestamp))
|
||||
defer.DeferredList(defer_list).chainDeferred(d)
|
||||
|
||||
raise MessageSentAndStored("XEP-0033 took over")
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue