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:version1.1</xmpp:version> </xmpp:SupportedXep> </implements> + <implements> + xmpp:SupportedXep + <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0083.html" /> + xmpp:statuscomplete</xmpp:status> + xmpp:version1.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/355e3076fdcf231b467a01f1f...