diff --git a/gajim/common/connection_handlers_events.py b/gajim/common/connection_handlers_events.py index 78711cdb0054d5d5d72742de04cd3a435ac4b068..40c0bb6961d6acdfb4bebbfcd3552f4d660f458b 100644 --- a/gajim/common/connection_handlers_events.py +++ b/gajim/common/connection_handlers_events.py @@ -30,6 +30,7 @@ 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.const import KindConstant, SSLError from gajim.common.pep import SUPPORTED_PERSONAL_USER_EVENTS from gajim.common.jingle_transport import JingleTransportSocks5 @@ -254,12 +255,7 @@ PresenceHelperEvent): if delay_tag: self._generate_timestamp(self.stanza.timestamp) # 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: diff --git a/gajim/common/modules/misc.py b/gajim/common/modules/misc.py index b0719caa72b9e9f839b662a544d247910d5ad4e7..1c8633e109c9db7a044b9264420c3e9418cb547b 100644 --- a/gajim/common/modules/misc.py +++ b/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