plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port

This commit is contained in:
Goffi 2019-10-20 19:34:26 +02:00
commit 7e92cb1b1c

View file

@ -17,23 +17,24 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from collections import namedtuple
import urllib.request, urllib.parse, urllib.error
from functools import reduce
from sat.core.i18n import _
from sat.core.constants import Const as C
from sat.core.log import getLogger
log = getLogger(__name__)
from sat.core import exceptions
from sat.tools import sat_defer
from sat.tools.common import data_format
from twisted.words.protocols.jabber import jid, error
from twisted.internet import reactor, defer
from zope.interface import implementer
from wokkel import disco
from wokkel import data_form
from wokkel import generic
from zope.interface import implementer
from collections import namedtuple
import urllib.request, urllib.parse, urllib.error
# XXX: sat_tmp.wokkel.pubsub is actually use instead of wokkel version
# mam and rsm come from sat_tmp.wokkel too
@ -41,6 +42,11 @@ from wokkel import pubsub
from wokkel import rsm
from wokkel import mam
from twisted.words.protocols.jabber import jid, error
from twisted.internet import reactor, defer
log = getLogger(__name__)
PLUGIN_INFO = {
C.PI_NAME: "Publish-Subscribe",
@ -537,14 +543,16 @@ class XEP_0060(object):
def _unwrapMAMMessage(self, message_elt):
try:
item_elt = (
next(message_elt.elements(mam.NS_MAM, "result").next()
.elements(C.NS_FORWARD, "forwarded").next()
.elements(C.NS_CLIENT, "message").next()
.elements("http://jabber.org/protocol/pubsub#event", "event").next()
.elements("http://jabber.org/protocol/pubsub#event", "items").next()
.elements("http://jabber.org/protocol/pubsub#event", "item"))
)
item_elt = reduce(
lambda elt, ns_name: next(elt.elements(*ns_name)),
(message_elt,
(mam.NS_MAM, "result"),
(C.NS_FORWARD, "forwarded"),
(C.NS_CLIENT, "message"),
("http://jabber.org/protocol/pubsub#event", "event"),
("http://jabber.org/protocol/pubsub#event", "items"),
("http://jabber.org/protocol/pubsub#event", "item"),
))
except StopIteration:
raise exceptions.DataError("Can't find Item in MAM message element")
return item_elt