Philipp Hörist pushed to branch master at gajim / python-nbxmpp


Commits:
355e3076 by lovetox at 2020-10-26T21:15:48+01:00
Add Nested Roster Groups (XEP-0083) support

- - - - -


4 changed files:

- nbxmpp/dispatcher.py
- + nbxmpp/modules/delimiter.py
- nbxmpp/namespaces.py
- python-nbxmpp.doap


Changes:

=====================================
nbxmpp/dispatcher.py
=====================================
@@ -80,6 +80,7 @@ from nbxmpp.modules.mam import MAM
 from nbxmpp.modules.vcard_temp import VCardTemp
 from nbxmpp.modules.vcard4 import VCard4
 from nbxmpp.modules.ping import Ping
+from nbxmpp.modules.delimiter import Delimiter
 from nbxmpp.modules.misc import unwrap_carbon
 from nbxmpp.modules.misc import unwrap_mam
 from nbxmpp.util import get_properties_struct
@@ -189,6 +190,7 @@ class StanzaDispatcher(Observable):
         self._modules['VCardTemp'] = VCardTemp(self._client)
         self._modules['VCard4'] = VCard4(self._client)
         self._modules['Ping'] = Ping(self._client)
+        self._modules['Delimiter'] = Delimiter(self._client)
 
         for instance in self._modules.values():
             for handler in instance.handlers:


=====================================
nbxmpp/modules/delimiter.py
=====================================
@@ -0,0 +1,63 @@
+# Copyright (C) 2020 Philipp Hörist <philipp AT hoerist.com>
+#
+# This file is part of nbxmpp.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 3
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; If not, see <http://www.gnu.org/licenses/>.
+
+from nbxmpp.namespaces import Namespace
+from nbxmpp.protocol import Iq
+from nbxmpp.protocol import Node
+from nbxmpp.errors import StanzaError
+from nbxmpp.task import iq_request_task
+from nbxmpp.modules.base import BaseModule
+from nbxmpp.modules.util import process_response
+
+
+class Delimiter(BaseModule):
+    def __init__(self, client):
+        BaseModule.__init__(self, client)
+
+        self._client = client
+        self.handlers = []
+
+    @iq_request_task
+    def request_delimiter(self):
+        _task = yield
+
+        response = yield _make_request()
+        if response.isError():
+            raise StanzaError(response)
+
+        delimiter = response.getQuery().getTagData('roster') or None
+        yield delimiter
+
+    @iq_request_task
+    def set_delimiter(self, delimiter):
+        _task = yield
+
+        response = yield _make_set_request(delimiter)
+        yield process_response(response)
+
+
+def _make_request():
+    node = Node('storage', attrs={'xmlns': Namespace.DELIMITER})
+    iq = Iq('get', Namespace.PRIVATE, payload=node)
+    return iq
+
+
+def _make_set_request(delimiter):
+    iq = Iq('set', Namespace.PRIVATE)
+    roster = iq.getQuery().addChild('roster', namespace=Namespace.DELIMITER)
+    roster.setData(delimiter)
+    return iq


=====================================
nbxmpp/namespaces.py
=====================================
@@ -55,6 +55,7 @@ class _Namespaces:
     DATA_VALIDATE: str = 'http://jabber.org/protocol/xdata-validate'
     DELAY: str = 'jabber:x:delay'
     DELAY2: str = 'urn:xmpp:delay'
+    DELIMITER: str = 'roster:delimiter'
     DISCO: str = 'http://jabber.org/protocol/disco'
     DISCO_INFO: str = 'http://jabber.org/protocol/disco#info'
     DISCO_ITEMS: str = 'http://jabber.org/protocol/disco#items'


=====================================
python-nbxmpp.doap
=====================================
@@ -144,6 +144,13 @@
         <xmpp:version>1.1</xmpp:version>
       </xmpp:SupportedXep>
     </implements>
+    <implements>
+      <xmpp:SupportedXep>
+        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0083.html"; />
+        <xmpp:status>complete</xmpp:status>
+        <xmpp:version>1.0</xmpp:version>
+      </xmpp:SupportedXep>
+    </implements>
     <implements>
       <xmpp:SupportedXep>
         <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0084.html"; />



View it on GitLab: 
https://dev.gajim.org/gajim/python-nbxmpp/-/commit/355e3076fdcf231b467a01f1fbc4a29e9331d2f5

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/python-nbxmpp/-/commit/355e3076fdcf231b467a01f1fbc4a29e9331d2f5
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to