diff options
-rw-r--r-- | src/common.py | 47 | ||||
-rw-r--r-- | src/logger.py | 14 | ||||
-rw-r--r-- | src/tabs/basetabs.py | 1 |
3 files changed, 57 insertions, 5 deletions
diff --git a/src/common.py b/src/common.py index 8fbf34fb..5467c985 100644 --- a/src/common.py +++ b/src/common.py @@ -218,6 +218,53 @@ def datetime_tuple(timestamp): ret += tz return ret +def get_utc_time(local_time=None): + """ + Get the current time in UTC + + :param datetime local_time: The current local time + :return: The current UTC time + >>> delta = timedelta(seconds=-3600) + >>> d = datetime.now() + >>> time.timezone = -3600; time.altzone = -3600 + >>> get_utc_time(local_time=d) == d + delta + True + """ + if local_time is None: + local_time = datetime.now() + isdst = time.localtime().tm_isdst + else: + isdst = time.localtime(int(local_time.timestamp())).tm_isdst + + if time.daylight and isdst: + tz = timedelta(seconds=time.altzone) + else: + tz = timedelta(seconds=time.timezone) + + utc_time = local_time + tz + + return utc_time + +def get_local_time(utc_time): + """ + Get the local time from an UTC time + + >>> delta = timedelta(seconds=-3600) + >>> d = datetime.now() + >>> time.timezone = -3600; time.altzone = -3600 + >>> get_local_time(d) == d - delta + True + """ + isdst = time.localtime(int(utc_time.timestamp())).tm_isdst + if time.daylight and isdst: + tz = timedelta(seconds=time.altzone) + else: + tz = timedelta(seconds=time.timezone) + + local_time = utc_time - tz + + return local_time + def find_delayed_tag(message): """ Check if a message is delayed or not. diff --git a/src/logger.py b/src/logger.py index c05cc4a6..2c878606 100644 --- a/src/logger.py +++ b/src/logger.py @@ -5,11 +5,13 @@ # Poezio is free software: you can redistribute it and/or modify # it under the terms of the zlib license. See the COPYING file. -from os import environ, makedirs import mmap import os import re +from os import environ, makedirs from datetime import datetime + +import common from config import config from xhtml import clean_text from theming import dump_tuple, get_theme @@ -155,7 +157,9 @@ class Logger(object): log.debug('format? %s', tup) continue time = [int(i) for index, i in enumerate(tup) if index < 6] - message = {'lines': [], 'history': True, 'time': datetime(*time)} + message = {'lines': [], + 'history': True, + 'time': common.get_local_time(datetime(*time))} size = int(tup[6]) if len(tup) == 8: #info line message['lines'].append(color+tup[7]) @@ -195,9 +199,9 @@ class Logger(object): try: msg = clean_text(msg) if date is None: - str_time = datetime.now().strftime('%Y%m%dT%H:%M:%SZ') + str_time = common.get_utc_time().strftime('%Y%m%dT%H:%M:%SZ') else: - str_time = date.strftime('%Y%m%dT%H:%M:%SZ') + str_time = common.get_utc_time(date).strftime('%Y%m%dT%H:%M:%SZ') if typ == 1: prefix = 'MR' else: @@ -244,7 +248,7 @@ class Logger(object): exc_info=True) return False try: - str_time = datetime.now().strftime('%Y%m%dT%H:%M:%SZ') + str_time = common.get_utc_time().strftime('%Y%m%dT%H:%M:%SZ') message = clean_text(message) lines = message.split('\n') first_line = lines.pop(0) diff --git a/src/tabs/basetabs.py b/src/tabs/basetabs.py index 00f924b0..7b300b18 100644 --- a/src/tabs/basetabs.py +++ b/src/tabs/basetabs.py @@ -455,6 +455,7 @@ class ChatTab(Tab): def load_logs(self, log_nb): logs = logger.get_logs(safeJID(self.get_name()).bare, log_nb) + return logs def log_message(self, txt, nickname, time=None, typ=1): """ |