From: Christian Heller Date: Tue, 5 Aug 2025 01:39:41 +0000 (+0200) Subject: Use hostnames for Client.id_ rather than UUIDs. X-Git-Url: https://plomlompom.com/repos/booking/%7B%7B%20web_path%20%7D%7D/decks/static/balance?a=commitdiff_plain;ds=inline;p=ircplom Use hostnames for Client.id_ rather than UUIDs. --- diff --git a/ircplom/client.py b/ircplom/client.py index 6c9ebc2..a80d3d8 100644 --- a/ircplom/client.py +++ b/ircplom/client.py @@ -6,14 +6,13 @@ from dataclasses import dataclass from getpass import getuser from threading import Thread from typing import Callable, Optional -from uuid import UUID, uuid4 # ourselves from ircplom.events import (AffectiveEvent, ExceptionEvent, Logger, PayloadMixin, QueueMixin) from ircplom.irc_conn import (BaseIrcConnection, IrcConnAbortException, IrcMessage, PORT_SSL) -ClientsDb = dict[UUID, 'Client'] +ClientsDb = dict[str, 'Client'] CHAT_GLOB = '*' _LOG_PREFIX_PRIVMSG = '' @@ -27,7 +26,7 @@ _NAMES_DESIRED_SERVER_CAPS = ('server-time', 'account-tag', 'sasl') @dataclass class ClientIdMixin: 'Collects a Client\'s ID at .client_id.' - client_id: UUID + client_id: str @dataclass @@ -37,7 +36,7 @@ class ClientEvent(AffectiveEvent, ClientIdMixin): class _IrcConnection(BaseIrcConnection): - def __init__(self, client_id: UUID, **kwargs) -> None: + def __init__(self, client_id: str, **kwargs) -> None: # TODO: find out why I can't just ClientIdMixin here self.client_id = client_id super().__init__(**kwargs) @@ -179,7 +178,7 @@ class Client(ABC, ClientQueueMixin): self.conn_setup = conn_setup if self.conn_setup.port <= 0: self.conn_setup.port = PORT_SSL - self.id_ = uuid4() + self.id_ = self.conn_setup.hostname self.log = Logger(self._log) self.update_login(nick_confirmed=False, nickname=self.conn_setup.nickname) diff --git a/ircplom/client_tui.py b/ircplom/client_tui.py index eed3137..b1243eb 100644 --- a/ircplom/client_tui.py +++ b/ircplom/client_tui.py @@ -1,7 +1,6 @@ 'TUI adaptions to Client.' # built-ins from dataclasses import dataclass -from uuid import UUID # ourselves from ircplom.events import PayloadMixin from ircplom.tui_base import (BaseTui, PromptWidget, TuiEvent, Window, @@ -39,7 +38,7 @@ class _ClientWindow(Window, ClientQueueMixin): client_id_name = 'client_id' prompt: _ClientPromptWidget - def __init__(self, client_id: UUID, chat: str = '', **kwargs) -> None: + def __init__(self, client_id: str, chat: str = '', **kwargs) -> None: self.client_id = client_id self.chat = chat super().__init__(**kwargs) @@ -88,7 +87,7 @@ class _PrivmsgWindow(_ClientWindow): class ClientTui(BaseTui): 'TUI expanded towards Client features.' - def _new_client_window(self, client_id: UUID, chat: str = '' + def _new_client_window(self, client_id: str, chat: str = '' ) -> _ClientWindow: new_idx = len(self.windows) win_class = (_PrivmsgWindow if (chat and chat[0].isalpha()) @@ -99,16 +98,18 @@ class ClientTui(BaseTui): self._switch_window(new_idx) return win - def client_wins(self, client_id: UUID) -> list[_ClientWindow]: + @property + def _all_client_wins(self) -> list[_ClientWindow]: + return [win for win in self.windows if isinstance(win, _ClientWindow)] + + def client_wins(self, client_id: str = '') -> list[_ClientWindow]: 'All _ClientWindows matching client_id; if none, create one.' - wins = [win for win in self.windows - if isinstance(win, _ClientWindow) - and win.client_id == client_id] # pylint: disable=no-member + wins = [w for w in self._all_client_wins if client_id == w.client_id] if not wins: wins = [self._new_client_window(client_id=client_id)] return wins - def client_win(self, client_id: UUID, chat: str = '') -> _ClientWindow: + def client_win(self, client_id: str, chat: str = '') -> _ClientWindow: '''That _ClientWindow matching client_id and chat; create if none. In case of creation, copy prompt prefix from client's first window. @@ -127,6 +128,9 @@ class ClientTui(BaseTui): 'Create Client and pass it via NewClientEvent.' split = host_port.split(':', maxsplit=1) hostname = split[0] + if hostname in [win.client_id for win in self._all_client_wins]: + self.log.alert(f'already set up connection to {hostname}') + return port = -1 if len(split) > 1: to_int = split[1]