diff --git a/plugins/display_corrections.py b/plugins/display_corrections.py index 69df154f..cf8107ce 100644 --- a/plugins/display_corrections.py +++ b/plugins/display_corrections.py @@ -26,7 +26,7 @@ from poezio.plugin import BasePlugin from poezio.common import shell_split from poezio import tabs from poezio.ui.types import Message -from poezio.ui.consts import SHORT_FORMAT +from poezio.theming import get_theme class Plugin(BasePlugin): @@ -56,6 +56,7 @@ class Plugin(BasePlugin): return None def command_display_corrections(self, args): + theme = get_theme() args = shell_split(args) if len(args) == 1: try: @@ -68,7 +69,7 @@ class Plugin(BasePlugin): if message: display = [] while message: - str_time = message.time.strftime(SHORT_FORMAT) + str_time = message.time.strftime(theme.SHORT_TIME_FORMAT) display.append('%s %s%s%s %s' % (str_time, '* ' if message.me else '', message.nickname, '' diff --git a/poezio/tabs/basetabs.py b/poezio/tabs/basetabs.py index d822ea94..04fc1d8c 100644 --- a/poezio/tabs/basetabs.py +++ b/poezio/tabs/basetabs.py @@ -46,7 +46,6 @@ from poezio.logger import logger from poezio.text_buffer import TextBuffer from poezio.theming import get_theme, dump_tuple from poezio.ui.funcs import truncate_nick -from poezio.ui.consts import LONG_FORMAT_LENGTH from poezio.ui.types import BaseMessage, InfoMessage, Message from slixmpp import JID, InvalidJID, Message as SMessage @@ -802,6 +801,7 @@ class ChatTab(Tab): message_count = 0 timestamp = config.get('show_timestamps') nick_size = config.get('max_nick_length') + theme = get_theme() for message in text_buffer.messages: # Build lines of a message txt = message.txt @@ -821,7 +821,7 @@ class ChatTab(Tab): offset += 1 if timestamp: if message.history: - offset += 1 + LONG_FORMAT_LENGTH + offset += 1 + theme.LONG_TIME_FORMAT_LENGTH lines = poopt.cut_text(txt, self.text_win.width - offset - 1) for line in lines: built_lines.append(line) diff --git a/poezio/theming.py b/poezio/theming.py index 6f1d8226..7752fe15 100755 --- a/poezio/theming.py +++ b/poezio/theming.py @@ -78,6 +78,7 @@ from typing import Dict, List, Union, Tuple, Optional from pathlib import Path from os import path from poezio import colors, xdg +from datetime import datetime from importlib import machinery finder = machinery.PathFinder() @@ -143,6 +144,14 @@ class Theme: return sub_mapping[sub] if sub == keep else '' return sub_mapping.get(sub, '') + # Short date format (only show time) + SHORT_TIME_FORMAT = '%H:%M:%S' + SHORT_TIME_FORMAT_LENGTH = len(datetime.now().strftime(SHORT_TIME_FORMAT)) + + # Long date format (show date and time) + LONG_TIME_FORMAT = '%Y-%m-%d %H:%M:%S' + LONG_TIME_FORMAT_LENGTH = len(datetime.now().strftime(LONG_TIME_FORMAT)) + # Message text color COLOR_NORMAL_TEXT = (-1, -1) COLOR_INFORMATION_TEXT = (5, -1) # TODO diff --git a/poezio/ui/consts.py b/poezio/ui/consts.py index 0838d953..51febf22 100644 --- a/poezio/ui/consts.py +++ b/poezio/ui/consts.py @@ -4,11 +4,3 @@ FORMAT_CHAR = '\x19' # These are non-printable chars, so they should never appear in the input, # I guess. But maybe we can find better chars that are even less risky. FORMAT_CHARS = '\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x1A' - -# Short date format (only show time) -SHORT_FORMAT = '%H:%M:%S' -SHORT_FORMAT_LENGTH = len(datetime.now().strftime(SHORT_FORMAT)) - -# Long date format (show date and time) -LONG_FORMAT = '%Y-%m-%d %H:%M:%S' -LONG_FORMAT_LENGTH = len(datetime.now().strftime(LONG_FORMAT)) diff --git a/poezio/ui/render.py b/poezio/ui/render.py index 633ac2a0..f37ea39e 100644 --- a/poezio/ui/render.py +++ b/poezio/ui/render.py @@ -18,8 +18,6 @@ from poezio.theming import ( ) from poezio.ui.consts import ( FORMAT_CHAR, - LONG_FORMAT, - SHORT_FORMAT, ) from poezio.ui.funcs import ( truncate_nick, @@ -237,11 +235,12 @@ class PreMessageHelpers: """ Write the date on the yth line of the window """ + theme = get_theme() if time: if history and time.date() != date.today(): - format = LONG_FORMAT + format = theme.LONG_TIME_FORMAT else: - format = SHORT_FORMAT + format = theme.SHORT_TIME_FORMAT time_str = time.strftime(format) color = get_theme().COLOR_TIME_STRING with buffer.colored_text(color=color): diff --git a/poezio/ui/types.py b/poezio/ui/types.py index 15117275..e75f8eba 100644 --- a/poezio/ui/types.py +++ b/poezio/ui/types.py @@ -6,11 +6,6 @@ from poezio.ui.funcs import truncate_nick from poezio import poopt from poezio.user import User from poezio.theming import dump_tuple, get_theme -from poezio.ui.consts import ( - SHORT_FORMAT_LENGTH, - LONG_FORMAT_LENGTH, -) - class BaseMessage: @@ -25,7 +20,8 @@ class BaseMessage: self.time = datetime.now() def compute_offset(self, with_timestamps: bool, nick_size: int) -> int: - return SHORT_FORMAT_LENGTH + 1 + theme = get_theme() + return theme.SHORT_TIME_FORMAT_LENGTH + 1 class EndOfArchive(BaseMessage): @@ -68,7 +64,7 @@ class XMLLog(BaseMessage): offset = 0 theme = get_theme() if with_timestamps: - offset += 1 + SHORT_FORMAT_LENGTH + offset += 1 + theme.SHORT_TIME_FORMAT_LENGTH if self.incoming: nick = theme.CHAR_XML_IN else: @@ -178,11 +174,12 @@ class Message(BaseMessage): def compute_offset(self, with_timestamps: bool, nick_size: int) -> int: offset = 0 + theme = get_theme() if with_timestamps: if self.history: - offset += 1 + LONG_FORMAT_LENGTH + offset += 1 + theme.LONG_TIME_FORMAT_LENGTH else: - offset += 1 + SHORT_FORMAT_LENGTH + offset += 1 + theme.SHORT_TIME_FORMAT_LENGTH if not self.nickname: # not a message, nothing to do afterwards return offset diff --git a/test/test_ui/test_render.py b/test/test_ui/test_render.py index e0db5a8f..bdfc1be6 100644 --- a/test/test_ui/test_render.py +++ b/test/test_ui/test_render.py @@ -3,7 +3,6 @@ from contextlib import contextmanager from datetime import datetime from poezio.theming import get_theme from poezio.ui.render import build_lines, Line, write_pre -from poezio.ui.consts import SHORT_FORMAT from poezio.ui.types import BaseMessage, Message, StatusMessage, XMLLog def test_simple_build_basemsg():