diff src/plugins/plugin_xep_0059.py @ 1267:ea692d51a0ee

plugins XEP-0059, XEP-0060: leave internal wokkel extensions to sat.tmp.wokkel
author souliane <souliane@mailoo.org>
date Mon, 15 Dec 2014 14:03:13 +0100
parents 16484ebb695b
children 069ad98b360d
line wrap: on
line diff
--- a/src/plugins/plugin_xep_0059.py	Mon Dec 15 12:46:58 2014 +0100
+++ b/src/plugins/plugin_xep_0059.py	Mon Dec 15 14:03:13 2014 +0100
@@ -22,7 +22,6 @@
 from sat.core.log import getLogger
 log = getLogger(__name__)
 
-from twisted.words.xish import domish
 from wokkel import disco, iwokkel
 try:
     from twisted.words.protocols.xmlstream import XMPPHandler
@@ -45,93 +44,10 @@
 
 
 class XEP_0059(object):
+    # XXX: RSM management is done directly in Wokkel.
 
     def __init__(self, host):
         log.info(_("Result Set Management plugin initialization"))
-        self.host = host
-
-    def requestPage(self, stanza, limit=10, index=None, after=None, before=None):
-        """Embed a RSM page request in the given stanza.
-
-        @param stanza (domish.Element): any stanza to which RSM applies
-        @param limit (int): the maximum number of items in the page
-        @param index (int): the starting index of the requested page
-        @param after (str, int): the element immediately preceding the page
-        @param before (str, int): the element immediately following the page
-        """
-        main_elt = None
-        try:
-            main_elt = domish.generateElementsNamed(stanza.elements(), name="query").next()
-        except StopIteration:
-            try:
-                main_elt = domish.generateElementsNamed(stanza.elements(), name="pubsub").next()
-            except StopIteration:
-                log.warning("Injection of a RSM element only applies to query or pubsub stanzas")
-                return
-        limit = str(int(limit))
-
-        # in case the service doesn't support RSM, do this at least
-        main_elt.items.attributes['max_items'] = limit
-
-        set_elt = main_elt.addElement('set', NS_RSM)
-        set_elt.addElement('max').addContent(limit)
-        if index:
-            assert(after is None and before is None)
-            set_elt.addElement('index').addContent(str(int(index)))
-        if after:
-            assert(before is None)  # could not specify both at the same time
-            set_elt.addElement('after').addContent(str(after))
-        if before is not None:
-            if before == '':  # request the last page, according to http://xmpp.org/extensions/xep-0059.html#last
-                set_elt.addElement('before')
-            else:
-                set_elt.addElement('before').addContent(str(before))
-
-    def countItems(self, stanza):
-        """Count the items without retrieving any of them.
-
-        @param stanza (domish.Element): any stanza to which RSM applies
-        """
-        self.requestPage(stanza, limit=0)
-
-    def extractMetadata(self, stanza):
-        """Extract the RSM metadata from the given stanza.
-
-        @param stanza (domish.Element, wokkel.pubsub.PubSubRequest):
-           any stanza to which RSM applies. When used by XEP-0060,
-           wokkel's PubSubRequest instance is also accepted.
-        @return: dict containing the page metadata
-        """
-        try:
-            main_elt = domish.generateElementsNamed(stanza.elements(), name="query").next()
-        except StopIteration:
-            try:
-                main_elt = domish.generateElementsNamed(stanza.elements(), name="pubsub").next()
-            except StopIteration:
-                log.warning("Extracting data from a RSM element only applies to query or pubsub stanzas")
-                return {}
-        try:
-            set_elt = domish.generateElementsQNamed(main_elt.elements(), name="set", uri=NS_RSM).next()
-        except StopIteration:
-            log.debug("There's no RSM element in the stanza")
-            return {}
-
-        data = {}
-        elts = set_elt.elements()
-        try:
-            elt = elts.next()
-            if elt.name == "first":
-                data["first"] = "".join(elt.children)
-                data["first_index"] = int(elt.getAttribute("index"))
-            elif elt.name == "last":
-                data["last"] = "".join(elt.children)
-            elif elt.name == "count":
-                data["count"] = int("".join(elt.children))
-        except StopIteration:
-            pass
-        if "count" not in data:
-            log.warning("There's no 'count' element in the RSM element!")
-        return data
 
 
 class XEP_0059_handler(XMPPHandler):