plugin XEP-0203, core (xmpp): leave the management of delay element to XEP-0203 (fix bug 59):
- this patch reveals a bug in primitivus Chat.printMessage relative to MUC history (the test to discard duplicates is wrong)
This commit is contained in:
parent
a6a967b2f0
commit
ab7ae07a83
2 changed files with 32 additions and 8 deletions
|
|
@ -26,7 +26,6 @@ from wokkel import client, disco, xmppim, generic, delay, iwokkel
|
|||
from sat.core.log import getLogger
|
||||
log = getLogger(__name__)
|
||||
from sat.core import exceptions
|
||||
from calendar import timegm
|
||||
from zope.interface import implements
|
||||
from twisted.words.protocols.jabber.xmlstream import XMPPHandler
|
||||
|
||||
|
|
@ -160,17 +159,15 @@ class SatMessageProtocol(xmppim.MessageProtocol):
|
|||
return data
|
||||
|
||||
def addToHistory(data):
|
||||
# set message body to empty string by default, and later
|
||||
# also forward message without body (chat state notification...)
|
||||
try:
|
||||
_delay = delay.Delay.fromElement(filter(lambda elm: elm.name == 'delay', message.elements())[0])
|
||||
timestamp = timegm(_delay.stamp.utctimetuple())
|
||||
data['extra']['archive'] = str(timestamp)
|
||||
timestamp = data['extra']['timestamp'] # timestamp added by XEP-0203
|
||||
except KeyError:
|
||||
self.host.memory.addToHistory(jid.JID(data['from']), jid.JID(data['to']), data['body'], data['type'], data['extra'], profile=self.parent.profile)
|
||||
else:
|
||||
if data['type'] != 'groupchat': # XXX: we don't save delayed messages in history for groupchats
|
||||
#TODO: add delayed messages to history if they aren't already in it
|
||||
data['extra']['archive'] = timestamp # FIXME: this "archive" is actually never used
|
||||
self.host.memory.addToHistory(jid.JID(data['from']), jid.JID(data['to']), data['body'], data['type'], data['extra'], timestamp, profile=self.parent.profile)
|
||||
except IndexError:
|
||||
self.host.memory.addToHistory(jid.JID(data['from']), jid.JID(data['to']), data['body'], data['type'], data['extra'], profile=self.parent.profile)
|
||||
return data
|
||||
|
||||
def treatmentsEb(failure):
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ from sat.core.i18n import _
|
|||
from sat.core.log import getLogger
|
||||
log = getLogger(__name__)
|
||||
|
||||
from calendar import timegm
|
||||
from wokkel import disco, iwokkel, delay
|
||||
try:
|
||||
from twisted.words.protocols.xmlstream import XMPPHandler
|
||||
|
|
@ -48,6 +49,8 @@ class XEP_0203(object):
|
|||
def __init__(self, host):
|
||||
log.info(_("Delayed Delivery plugin initialization"))
|
||||
self.host = host
|
||||
host.trigger.add("MessageReceived", self.messageReceivedTrigger)
|
||||
|
||||
|
||||
def getHandler(self, profile):
|
||||
return XEP_0203_handler(self, profile)
|
||||
|
|
@ -68,6 +71,30 @@ class XEP_0203(object):
|
|||
parent.addChild(elt)
|
||||
return elt
|
||||
|
||||
def messagePostTreat(self, data, timestamp):
|
||||
"""Set the timestamp of a received message.
|
||||
|
||||
@param data (dict): data send by MessageReceived trigger through post_treat deferred
|
||||
@param timestamp (int): original timestamp of a delayed message
|
||||
@return: dict
|
||||
"""
|
||||
data['extra']['timestamp'] = unicode(timestamp)
|
||||
return data
|
||||
|
||||
def messageReceivedTrigger(self, message, post_treat, profile):
|
||||
"""Process a delay element from incoming message.
|
||||
|
||||
@param message (domish.Element): message element
|
||||
@param post_treat (Deferred): deferred instance to add post treatments
|
||||
"""
|
||||
try:
|
||||
delay_ = delay.Delay.fromElement([elm for elm in message.elements() if elm.name == 'delay'][0])
|
||||
except IndexError:
|
||||
return True
|
||||
else:
|
||||
timestamp = timegm(delay_.stamp.utctimetuple())
|
||||
post_treat.addCallback(self.messagePostTreat, timestamp)
|
||||
return True
|
||||
|
||||
class XEP_0203_handler(XMPPHandler):
|
||||
implements(iwokkel.IDisco)
|
||||
|
|
|
|||
Loading…
Reference in a new issue