Philipp Hörist pushed to branch master at gajim / gajim
Commits: 53ec34a9 by Philipp Hörist at 2018-10-19T18:37:18Z Use parse_datetime for parsing idle time
Fixes #9393
- - - - - abf19093 by Philipp Hörist at 2018-10-19T18:38:44Z Remove support for XEP-0091
- - - - - e44cedf0 by Philipp Hörist at 2018-10-19T18:43:04Z Use parse_delay also for presences
- - - - -
2 changed files:
- gajim/common/connection_handlers_events.py - gajim/common/modules/misc.py
Changes:
===================================== gajim/common/connection_handlers_events.py ===================================== @@ -17,7 +17,6 @@ # pylint: disable=no-init # pylint: disable=attribute-defined-outside-init
-from calendar import timegm import logging from time import time as time_time
@@ -30,6 +29,8 @@ from gajim.common import app from gajim.common import i18n from gajim.common.i18n import _ from gajim.common.modules import dataforms +from gajim.common.modules.misc import parse_idle +from gajim.common.modules.misc import parse_delay from gajim.common.const import KindConstant, SSLError from gajim.common.pep import SUPPORTED_PERSONAL_USER_EVENTS from gajim.common.jingle_transport import JingleTransportSocks5 @@ -87,18 +88,6 @@ class HelperEvent: minimized = app.interface.minimized_controls[self.conn.name] self.gc_control = minimized.get(self.jid)
- def _generate_timestamp(self, tag): - # Make sure we use only int/float Epoch time - if tag is None: - self.timestamp = time_time() - return - try: - tim = helpers.datetime_tuple(tag) - self.timestamp = timegm(tim) - except Exception: - log.error('wrong timestamp, ignoring it: %s', tag) - self.timestamp = time_time() - def get_oob_data(self, stanza): oob_node = stanza.getTag('x', namespace=nbxmpp.NS_X_OOB) if oob_node is not None: @@ -249,17 +238,14 @@ PresenceHelperEvent): self.user_nick = self.stanza.getTagData('nick') or '' self.contact_nickname = None self.transport_auto_auth = False + # XEP-0203 - delay_tag = self.stanza.getTag('delay', namespace=nbxmpp.NS_DELAY2) - if delay_tag: - self._generate_timestamp(self.stanza.timestamp) + self.timestamp = parse_delay(self.stanza) + if self.timestamp is None: + self.timestamp = time_time() + # XEP-0319 - self.idle_time = None - idle_tag = self.stanza.getTag('idle', namespace=nbxmpp.NS_IDLE) - if idle_tag: - time_str = idle_tag.getAttr('since') - tim = helpers.datetime_tuple(time_str) - self.idle_time = timegm(tim) + self.idle_time = parse_idle(self.stanza)
xtags = self.stanza.getTags('x') for x in xtags: @@ -268,9 +254,6 @@ PresenceHelperEvent): self.is_gc = True elif namespace == nbxmpp.NS_SIGNED: sig_tag = x - elif namespace == nbxmpp.NS_DELAY and not self.timestamp: - # XEP-0091 - self._generate_timestamp(self.stanza.timestamp)
self.status = self.stanza.getStatus() or '' self._generate_show()
===================================== gajim/common/modules/misc.py ===================================== @@ -139,3 +139,24 @@ def parse_xhtml(stanza): if app.config.get('ignore_incoming_xhtml'): return None return stanza.getXHTML() + + +# XEP-0319: Last User Interaction in Presence + +def parse_idle(stanza): + idle_tag = stanza.getTag('idle', namespace=nbxmpp.NS_IDLE) + if idle_tag is None: + return + + since = idle_tag.getAttr('since') + if since is None: + log.warning('No since attr in idle node') + log.warning(stanza) + return + + timestamp = parse_datetime(since, convert='utc', epoch=True) + if timestamp is None: + log.warning('Invalid timestamp received: %s', since) + log.warning(stanza) + + return timestamp
View it on GitLab: https://dev.gajim.org/gajim/gajim/compare/dbd3165c00bcb6100d6605e46b69f0ef45...