From f35d5935ce9a8e66f556c204fbc3565065617c7f Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Thu, 11 Sep 2025 22:40:04 +0200 Subject: [PATCH] Strengthen hierarchical class relations. --- ircplom/client.py | 19 +++++++++++++++---- ircplom/client_tui.py | 13 +++++-------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/ircplom/client.py b/ircplom/client.py index bd6ad5b..d125aa7 100644 --- a/ircplom/client.py +++ b/ircplom/client.py @@ -298,6 +298,7 @@ class SharedClientDbFields(IrcConnSetup): 'API for fields shared directly in name and type with TUI.' connection_state: str = '' isupport: Dict[str] + motd: Iterable[str] sasl_account: str = '' sasl_auth_state: str = '' @@ -317,6 +318,12 @@ class NickUserHost: return f'{self.nick}!{self.user}@{self.host}' +class User(NickUserHost): + 'Adds to NickUserHost non-naming-specific attributes.' + modes: str = '?' + exit_msg: str = '' + + @dataclass class ServerCapability: 'Public API for CAP data.' @@ -331,6 +338,12 @@ class Topic: who: Optional[NickUserHost] = None +class Channel: + 'Collects .topic, and in .user_ids inhabitant IDs.' + topic: Topic + user_ids: Iterable[str] + + class LogScope(Enum): 'Where log messages should go.' ALL = auto() @@ -385,7 +398,7 @@ class _CompletableTopic(_Completable, Topic): NickUserHost(copy.nick, copy.user, copy.host)) -class _Channel: +class _Channel(Channel): user_ids: _CompletableStringsSet topic: _CompletableTopic @@ -461,9 +474,7 @@ class _NickUserHost(NickUserHost): return name + str(0 if not digits else (int(digits) + 1)) -class _User(_SetNickuserhostMixin, NickUserHost): - modes: str = '?' - exit_msg: str = '' +class _User(_SetNickuserhostMixin, User): def __init__(self, names_channels_of_user: Callable, diff --git a/ircplom/client_tui.py b/ircplom/client_tui.py index f1d5e90..fa6b5a4 100644 --- a/ircplom/client_tui.py +++ b/ircplom/client_tui.py @@ -8,9 +8,9 @@ from typing import Any, Callable, Optional, Self, Sequence from ircplom.tui_base import (BaseTui, PromptWidget, TuiEvent, Window, CMD_SHORTCUTS) from ircplom.client import ( - AutoAttrMixin, Client, ClientQueueMixin, Dict, DictItem, + AutoAttrMixin, Channel, Client, ClientQueueMixin, Dict, DictItem, IntoEndnodeUpdatesMixin, IrcConnSetup, LogScope, NewClientEvent, - NickUserHost, ServerCapability, SharedClientDbFields, Topic) + NickUserHost, ServerCapability, SharedClientDbFields, User) CMD_SHORTCUTS['disconnect'] = 'window.disconnect' CMD_SHORTCUTS['join'] = 'window.join' @@ -215,10 +215,9 @@ class _QueryWindow(_ChatWindow): pass -class _UpdatingChannel(_UpdatingNode): - user_ids: set[str] - topic: Topic +class _UpdatingChannel(_UpdatingNode, Channel): log_scopes = {'': LogScope.CHAT} + user_ids: set[str] def _focused_set_and_report_change( self, old_value: '_UpdatingNode', update: _Update @@ -241,11 +240,9 @@ class _UpdatingChannel(_UpdatingNode): return None -class _UpdatingUser(_UpdatingNode, NickUserHost): +class _UpdatingUser(_UpdatingNode, User): log_scopes = {'nick': LogScope.USER, 'exit_msg': LogScope.USER} prev_nick = '?' - modes = '?' - exit_msg = '' def _focused_set_and_report_change( self, old_value: '_UpdatingNode', update: _Update -- 2.30.2