diff --git a/src/l10n.py b/src/l10n.py index c04b5cdb..d097f2f9 100644 --- a/src/l10n.py +++ b/src/l10n.py @@ -8,24 +8,54 @@ import shared #logger = logging.getLogger(__name__) logger = logging.getLogger('file_only') + +DEFAULT_ENCODING = 'ISO8859-1' +DEFAULT_LANGUAGE = 'en_US' +DEFAULT_TIME_FORMAT = '%Y-%m-%d %H:%M:%S' + +encoding = DEFAULT_ENCODING +language = DEFAULT_LANGUAGE + try: import locale - encoding = locale.getpreferredencoding(False) - language = locale.getlocale()[0] or locale.getdefaultlocale()[0] + encoding = locale.getpreferredencoding(False) or DEFAULT_ENCODING + language = locale.getlocale()[0] or locale.getdefaultlocale()[0] or DEFAULT_LANGUAGE except: logger.exception('Could not determine language or encoding') - if not encoding: - encoding = 'ISO8859-1' - language = 'en_US' -time_format = shared.config.get('bitmessagesettings', 'timeformat') +if shared.config.has_option('bitmessagesettings', 'timeformat'): + time_format = shared.config.get('bitmessagesettings', 'timeformat') + #Test the format string + try: + time.strftime(time_format) + except: + time_format = DEFAULT_TIME_FORMAT +else: + time_format = DEFAULT_TIME_FORMAT + def formatTimestamp(timestamp = None, as_unicode = True): - if timestamp and isinstance(timestamp, (float, int)): - timestring = time.strftime(time_format, time.localtime(timestamp)) - else: + #For some reason some timestamps are strings so we need to sanitize. + if timestamp is not None and not isinstance(timestamp, int): + try: + timestamp = int(timestamp) + except: + timestamp = None + + #timestamp can't be less than 0. + if timestamp is not None and timestamp < 0: + timestamp = None + + if timestamp is None: timestring = time.strftime(time_format) + else: + #In case timestamp is too far in the future + try: + timestring = time.strftime(time_format, time.localtime(timestamp)) + except ValueError: + timestring = time.strftime(time_format) + if as_unicode: return unicode(timestring, encoding) return timestring