Philipp Hörist pushed to branch master at gajim / gajim

Commits:

2 changed files:

Changes:

  • gajim/common/connection_handlers_events.py
    ... ... @@ -17,7 +17,6 @@
    17 17
     # pylint: disable=no-init
    
    18 18
     # pylint: disable=attribute-defined-outside-init
    
    19 19
     
    
    20
    -from calendar import timegm
    
    21 20
     import logging
    
    22 21
     from time import time as time_time
    
    23 22
     
    
    ... ... @@ -30,6 +29,8 @@ from gajim.common import app
    30 29
     from gajim.common import i18n
    
    31 30
     from gajim.common.i18n import _
    
    32 31
     from gajim.common.modules import dataforms
    
    32
    +from gajim.common.modules.misc import parse_idle
    
    33
    +from gajim.common.modules.misc import parse_delay
    
    33 34
     from gajim.common.const import KindConstant, SSLError
    
    34 35
     from gajim.common.pep import SUPPORTED_PERSONAL_USER_EVENTS
    
    35 36
     from gajim.common.jingle_transport import JingleTransportSocks5
    
    ... ... @@ -87,18 +88,6 @@ class HelperEvent:
    87 88
                 minimized = app.interface.minimized_controls[self.conn.name]
    
    88 89
                 self.gc_control = minimized.get(self.jid)
    
    89 90
     
    
    90
    -    def _generate_timestamp(self, tag):
    
    91
    -        # Make sure we use only int/float Epoch time
    
    92
    -        if tag is None:
    
    93
    -            self.timestamp = time_time()
    
    94
    -            return
    
    95
    -        try:
    
    96
    -            tim = helpers.datetime_tuple(tag)
    
    97
    -            self.timestamp = timegm(tim)
    
    98
    -        except Exception:
    
    99
    -            log.error('wrong timestamp, ignoring it: %s', tag)
    
    100
    -            self.timestamp = time_time()
    
    101
    -
    
    102 91
         def get_oob_data(self, stanza):
    
    103 92
             oob_node = stanza.getTag('x', namespace=nbxmpp.NS_X_OOB)
    
    104 93
             if oob_node is not None:
    
    ... ... @@ -249,17 +238,14 @@ PresenceHelperEvent):
    249 238
             self.user_nick = self.stanza.getTagData('nick') or ''
    
    250 239
             self.contact_nickname = None
    
    251 240
             self.transport_auto_auth = False
    
    241
    +
    
    252 242
             # XEP-0203
    
    253
    -        delay_tag = self.stanza.getTag('delay', namespace=nbxmpp.NS_DELAY2)
    
    254
    -        if delay_tag:
    
    255
    -            self._generate_timestamp(self.stanza.timestamp)
    
    243
    +        self.timestamp = parse_delay(self.stanza)
    
    244
    +        if self.timestamp is None:
    
    245
    +            self.timestamp = time_time()
    
    246
    +
    
    256 247
             # XEP-0319
    
    257
    -        self.idle_time = None
    
    258
    -        idle_tag = self.stanza.getTag('idle', namespace=nbxmpp.NS_IDLE)
    
    259
    -        if idle_tag:
    
    260
    -            time_str = idle_tag.getAttr('since')
    
    261
    -            tim = helpers.datetime_tuple(time_str)
    
    262
    -            self.idle_time = timegm(tim)
    
    248
    +        self.idle_time = parse_idle(self.stanza)
    
    263 249
     
    
    264 250
             xtags = self.stanza.getTags('x')
    
    265 251
             for x in xtags:
    
    ... ... @@ -268,9 +254,6 @@ PresenceHelperEvent):
    268 254
                     self.is_gc = True
    
    269 255
                 elif namespace == nbxmpp.NS_SIGNED:
    
    270 256
                     sig_tag = x
    
    271
    -            elif namespace == nbxmpp.NS_DELAY and not self.timestamp:
    
    272
    -                # XEP-0091
    
    273
    -                self._generate_timestamp(self.stanza.timestamp)
    
    274 257
     
    
    275 258
             self.status = self.stanza.getStatus() or ''
    
    276 259
             self._generate_show()
    

  • gajim/common/modules/misc.py
    ... ... @@ -139,3 +139,24 @@ def parse_xhtml(stanza):
    139 139
         if app.config.get('ignore_incoming_xhtml'):
    
    140 140
             return None
    
    141 141
         return stanza.getXHTML()
    
    142
    +
    
    143
    +
    
    144
    +# XEP-0319: Last User Interaction in Presence
    
    145
    +
    
    146
    +def parse_idle(stanza):
    
    147
    +    idle_tag = stanza.getTag('idle', namespace=nbxmpp.NS_IDLE)
    
    148
    +    if idle_tag is None:
    
    149
    +        return
    
    150
    +
    
    151
    +    since = idle_tag.getAttr('since')
    
    152
    +    if since is None:
    
    153
    +        log.warning('No since attr in idle node')
    
    154
    +        log.warning(stanza)
    
    155
    +        return
    
    156
    +
    
    157
    +    timestamp = parse_datetime(since, convert='utc', epoch=True)
    
    158
    +    if timestamp is None:
    
    159
    +        log.warning('Invalid timestamp received: %s', since)
    
    160
    +        log.warning(stanza)
    
    161
    +
    
    162
    +    return timestamp