From: Christian Heller Date: Sat, 6 Sep 2025 07:57:13 +0000 (+0200) Subject: Some channel users/topic logging refactoring. X-Git-Url: https://plomlompom.com/repos/day?a=commitdiff_plain;h=bf5ff98fc7670d6fcfa32dc0b394b9203cea5278;p=ircplom Some channel users/topic logging refactoring. --- diff --git a/ircplom/client_tui.py b/ircplom/client_tui.py index 54005e2..c79a456 100644 --- a/ircplom/client_tui.py +++ b/ircplom/client_tui.py @@ -204,19 +204,19 @@ class _UpdatingChannel(_UpdatingNode): def set_and_check_for_change(self, update: _Update ) -> Optional[tuple[LogScope, Any]]: - msg: str | dict[str, tuple[str, ...]] - if update.path == ('user_ids',): - assert isinstance(update.value, tuple) - msg = {} - if not self.user_ids: - msg['nicks:residents'] = tuple(update.value) - else: - msg['nuhs:joining'] = tuple(id_ for id_ in update.value - if id_ not in self.user_ids) + scope = self._scope(update.path) + if update.path[-1] == 'topic': + if super().set_and_check_for_change(update): + return (scope, + f'RAW:{self.topic.who} set topic: {self.topic.what}') + return None + assert update.path[-1] == 'user_ids' + assert isinstance(update.value, tuple) + d = {'nuhs:joining': tuple(id_ for id_ in update.value + if id_ not in self.user_ids) + } if self.user_ids else {'nicks:residents': tuple(update.value)} if super().set_and_check_for_change(update): - if update.path == ('topic',): - msg = f'raw:{self.topic.who} set topic to: {self.topic.what}' - return self._scope(update.path), msg + return scope, d return None @@ -229,16 +229,20 @@ class _UpdatingUser(_UpdatingNode, NickUserHost): def set_and_check_for_change(self, update: _Update ) -> Optional[tuple[LogScope, Any]]: - if update.path == ('exit_msg',): - assert isinstance(update.value, str) - if super().set_and_check_for_change(update) and update.value: - return self._scope(update.path), { - 'user': str(self), - 'msg': (f': {update.value[1:]}' if len(update.value) > 1 - else ''), - 'verb': 'quits' if update.value[0] == 'Q' else 'parts'} - return None - return super().set_and_check_for_change(update) + assert isinstance(update.value, str) + if update.path[-1] == 'modes': + return super().set_and_check_for_change(update) + if super().set_and_check_for_change(update): + scope = self._scope(update.path) + msg = f'RAW:{self} ' + if update.path[-1] == 'nick': + return scope, msg + f'renames {update.value}' + if update.path[-1] == 'exit_msg' and update.value: + msg += 'quits' if update.value[0] == 'Q' else 'parts' + if len(update.value) > 1: + msg += ': ' + update.value[1:] + return scope, msg + return None @property def prev(self) -> str: @@ -347,12 +351,6 @@ class _ClientWindowsManager: log_kwargs |= {'target': update.path[1]} if value is None: self.log(f'{log_path} cleared', **log_kwargs) - elif scope is LogScope.USER: - if update.path[-1] == 'nick': - msg = f'{self.db.users[update.path[1]].prev} renames {value}' - elif update.path[-1] == 'exit_msg': - msg = f'{value["user"]} {value["verb"]}{value["msg"]}' - self.log(msg, **log_kwargs) elif isinstance(value, dict): for verb, item in [(k, v) for k, v in value.items() if v]: toks = verb.split(':', maxsplit=1) @@ -364,7 +362,7 @@ class _ClientWindowsManager: (str(nuh) if transform == 'nuhs' else nuh.nick) for nuh in nuhs]) self.log(f'{verb}: {item}', **log_kwargs) - elif isinstance(value, str) and value.startswith('raw:'): + elif isinstance(value, str) and value.startswith('RAW:'): self.log(value.split(':', maxsplit=1)[1], **log_kwargs) else: announcement = f'{log_path} set to:'