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/355e3076fdcf231b467a01f1…
--
View it on GitLab: https://dev.gajim.org/gajim/python-nbxmpp/-/commit/355e3076fdcf231b467a01f1…
You're receiving this email because of your account on dev.gajim.org.
Philipp Hörist pushed to branch master at gajim / gajim
Commits:
ce68aa99 by lovetox at 2020-10-26T20:47:57+01:00
ChatControl: Show displaymarking correctly
- - - - -
1 changed file:
- gajim/chat_control.py
Changes:
=====================================
gajim/chat_control.py
=====================================
@@ -623,7 +623,7 @@ def _on_message_sent(self, event):
message_id = event.message_id
if event.label:
- displaymarking = event.label.getTag('displaymarking')
+ displaymarking = event.label.displaymarking
else:
displaymarking = None
if self.correcting:
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/ce68aa9979ae3bbec1a7f59b2c184607…
--
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/ce68aa9979ae3bbec1a7f59b2c184607…
You're receiving this email because of your account on dev.gajim.org.
Philipp Hörist pushed to branch master at gajim / python-nbxmpp
Commits:
5e63a080 by lovetox at 2020-10-26T11:12:50+01:00
Client: Revert ping timeout
- - - - -
1 changed file:
- nbxmpp/client.py
Changes:
=====================================
nbxmpp/client.py
=====================================
@@ -560,7 +560,7 @@ class Client(Observable):
self._ping_source_id = None
self._log.info('Start ping timer')
- self._ping_source_id = GLib.timeout_add_seconds(5, self._ping)
+ self._ping_source_id = GLib.timeout_add_seconds(180, self._ping)
def _remove_ping_timer(self):
if self._ping_source_id is None:
View it on GitLab: https://dev.gajim.org/gajim/python-nbxmpp/-/commit/5e63a080e160078237ccf67c…
--
View it on GitLab: https://dev.gajim.org/gajim/python-nbxmpp/-/commit/5e63a080e160078237ccf67c…
You're receiving this email because of your account on dev.gajim.org.
Philipp Hörist pushed to branch master at gajim / gajim
Commits:
5e3e0ad3 by lovetox at 2020-10-26T08:40:48+01:00
MAM: Handle errors better
- - - - -
2 changed files:
- gajim/common/modules/mam.py
- gajim/groupchat_control.py
Changes:
=====================================
gajim/common/modules/mam.py
=====================================
@@ -341,11 +341,17 @@ def request_archive_on_signin(self):
mam_id, start_date = self._get_query_params()
result = yield self._execute_query(own_jid, mam_id, start_date)
- if is_error(result) and result.condition == 'item-not-found':
+ if is_error(result):
+ if result.condition != 'item-not-found':
+ self._log.warning(result)
+ return
+
app.storage.archive.reset_archive_infos(result.jid)
_, start_date = self._get_query_params()
result = yield self._execute_query(result.jid, None, start_date)
- raise_if_error(result)
+ if is_error(result):
+ self._log.warning(result)
+ return
if result.rsm.last is not None:
# <last> is not provided if the requested page was empty
@@ -386,11 +392,17 @@ def request_archive_on_muc_join(self, jid):
mam_id, start_date = self._get_muc_query_params(jid, threshold)
result = yield self._execute_query(jid, mam_id, start_date)
- if is_error(result) and result.condition == 'item-not-found':
+ if is_error(result):
+ if result.condition != 'item-not-found':
+ self._log.warning(result)
+ return
+
app.storage.archive.reset_archive_infos(result.jid)
_, start_date = self._get_muc_query_params(jid, threshold)
result = yield self._execute_query(result.jid, None, start_date)
- raise_if_error(result)
+ if is_error(result):
+ self._log.warning(result)
+ return
if result.rsm.last is not None:
# <last> is not provided if the requested page was empty
=====================================
gajim/groupchat_control.py
=====================================
@@ -1095,7 +1095,7 @@ def is_connected(self, value: bool) -> None:
def got_connected(self):
self.roster.initial_draw()
- if self.disco_info.has_mam:
+ if self.disco_info.has_mam_2:
# Request MAM
con = app.connections[self.account]
con.get_module('MAM').request_archive_on_muc_join(
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/5e3e0ad3905f4987a3bb83de30781d05…
--
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/5e3e0ad3905f4987a3bb83de30781d05…
You're receiving this email because of your account on dev.gajim.org.