# built-ins
from enum import Enum, auto
from getpass import getuser
+from os import makedirs
+from os.path import exists
from typing import Any, Callable, Optional, Sequence
# ourselves
from ircplom.tui_base import (BaseTui, PromptWidget, TuiEvent, Window,
_LOG_PREFIX_OUT = '>'
_LOG_PREFIX_IN = '<'
+_PATH_LOGS = 'logs'
+
class _LogScope(Enum):
'Where log messages should go.'
super().__init__(**kwargs)
self._title = f'{self.client_id} :DEBUG'
+ def log(self, msg: str) -> None:
+ super().log(msg)
+ if not exists(_PATH_LOGS):
+ makedirs(_PATH_LOGS)
+ with open(f'{_PATH_LOGS}/{self._title}.txt', 'a', encoding='utf8'
+ ) as f:
+ f.write(msg + '\n')
+
def _send_msg(self, verb: str, params: tuple[str, ...]) -> None:
self._client_trigger('send_w_params_tuple', verb=verb, params=params)
scope, kwargs.get('target', ''))
return super()._log_target_wins(**kwargs)
- def log(self, msg: str, **kwargs) -> tuple[tuple[int, ...], str]:
- win_ids, logged_msg = super().log(msg, **kwargs)
- if kwargs.get('scope', None) == _LogScope.DEBUG\
- and kwargs['prefix'] in {_LOG_PREFIX_IN, _LOG_PREFIX_OUT}:
- with open(f'{kwargs["client_id"]}.log', 'a', encoding='utf8') as f:
- f.write(f'{logged_msg}\n')
- return win_ids, logged_msg
-
def for_client_do(self, client_id: str, todo: str, **kwargs) -> None:
'Forward todo to appropriate _ClientWindowsManager.'
if client_id not in self._client_mngrs:
if hasattr(self._term, 'size'):
self.set_geometry()
+ def log(self, msg: str) -> None:
+ 'Append msg to .history.'
+ self.history.append(msg)
+
def taint(self) -> None:
'Declare all widgets as in need of re-drawing.'
self.history.taint()
affected_win_indices = []
for win in self._log_target_wins(**kwargs):
affected_win_indices += [win.idx]
- win.history.append(msg)
+ win.log(msg)
if win != self.window:
self._status_line.taint()
return tuple(affected_win_indices), msg