changeset 48e2fb49ba02 in /home/hg/repos/gajim
author: Yann Leboulanger asterix@lagaule.org branches: gajim_0.16 details:http://hg.gajim.org/gajim?cmd=changeset;node=48e2fb49ba02 description: better timestamp handling. Fixes #3818
diffstat:
src/common/connection_handlers_events.py | 6 +++++- src/common/helpers.py | 27 +++++++++++++++++++++------ 2 files changed, 26 insertions(+), 7 deletions(-)
diffs (60 lines):
diff -r 29ffa6a30d77 -r 48e2fb49ba02 src/common/connection_handlers_events.py --- a/src/common/connection_handlers_events.py Sun Mar 27 18:09:58 2016 +0200 +++ b/src/common/connection_handlers_events.py Thu Mar 31 22:46:44 2016 +0200 @@ -96,7 +96,11 @@ self.gc_control = minimized.get(self.jid)
def _generate_timestamp(self, tag): - tim = helpers.datetime_tuple(tag) + try: + tim = helpers.datetime_tuple(tag) + except Exception: + log.error('wrong timestamp, ignoring it: ' + tag) + tim = localtime() self.timestamp = localtime(timegm(tim))
def get_chatstate(self): diff -r 29ffa6a30d77 -r 48e2fb49ba02 src/common/helpers.py --- a/src/common/helpers.py Sun Mar 27 18:09:58 2016 +0200 +++ b/src/common/helpers.py Thu Mar 31 22:46:44 2016 +0200 @@ -46,6 +46,7 @@ import caps_cache import socket import time +import datetime
from encodings.punycode import punycode_encode from string import Template @@ -628,12 +629,26 @@ - XEP-082 datetime strings have all '-' cahrs removed to meet the above format. """ - timestamp = timestamp.split('.')[0] - timestamp = timestamp.replace('-', '') - timestamp = timestamp.replace('z', '') - timestamp = timestamp.replace('Z', '') - from time import strptime - return strptime(timestamp, '%Y%m%dT%H:%M:%S') + date, tim = timestamp.split('T', 1) + date = date.replace('-', '') + tim = tim.replace('z', '') + tim = tim.replace('Z', '') + zone = None + if '+' in tim: + sign = -1 + tim, zone = tim.split('+', 1) + if '-' in tim: + sign = 1 + tim, zone = tim.split('-', 1) + tim = tim.split('.')[0] + tim = time.strptime(date + 'T' + tim, '%Y%m%dT%H:%M:%S') + if zone: + tim = datetime.datetime.fromtimestamp(time.mktime(t)) + zone = strptime.time(zone, '%H:%M') + zone = datetime.timedelta(hours=zone.tm_hour, minutes=zone.tm_min) + tim += zone * sign + tim = tim.timetuple() + return tim
# import gajim only when needed (after decode_string is defined) see #4764