conn: Optional[IrcConnection] = None
_cls_conn: type[IrcConnection] = IrcConnection
- def __init__(self, conn_setup: IrcConnSetup, **kwargs) -> None:
+ def __init__(self, conn_setup: IrcConnSetup, channels: set[str], **kwargs
+ ) -> None:
self.client_id = conn_setup.hostname
+ self._autojoins = channels
super().__init__(client_id=self.client_id, **kwargs)
self.db = _ClientDb(on_update=self._on_update)
self.db.clear()
self.db.port = PORT_SSL
if not self.db.user_wanted:
self.db.user_wanted = getuser()
- self._autojoins: set[str] = set()
def connect(self) -> None:
'Attempt to open connection, on success perform session init steps.'
from enum import Enum, auto
from getpass import getuser
from pathlib import Path
+from tomllib import load as toml_load
from typing import Any, Callable, Optional, Sequence
# ourselves
from ircplom.tui_base import (BaseTui, PromptWidget, TuiEvent, Window,
_LOG_PREFIX_IN = '<'
_PATH_LOGS = Path.home().joinpath('.local', 'share', 'ircplom', 'logs')
+_PATH_CONFIG = Path.home().joinpath('.config', 'ircplom', 'ircplom.toml')
class _LogScope(Enum):
class ClientTui(BaseTui):
'TUI expanded towards Client features.'
+ _path_config: Optional[Path] = _PATH_CONFIG
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self._client_mngrs: dict[str, _ClientWindowsManager] = {}
+ config = {}
+ if self._path_config is not None:
+ if self._path_config.exists():
+ self.log(f'Found config at {self._path_config}, reading …')
+ assert self._path_config.is_file()
+ with open(self._path_config, 'rb') as f:
+ config = toml_load(f)
+ else:
+ self.log(
+ f'No config at {self._path_config}, proceeding without.')
+ for server_conf in config.get('server', []):
+ self.log(f'Connecting: {server_conf}')
+ hostname = server_conf['hostname']
+ port = server_conf.get('port', -1)
+ nickname = server_conf.get('nickname', getuser())
+ password = server_conf.get('password', '')
+ username = server_conf.get('username', '')
+ realname = server_conf.get('realname', nickname)
+ setup = IrcConnSetup(
+ hostname, port, nickname, username, realname, password)
+ self._put(NewClientEvent(self._new_client(
+ setup, set(server_conf.get('channels', [])))))
+ self.redraw_affected()
def _log_target_wins(self, **kwargs) -> Sequence[Window]:
if (scope := kwargs.get('scope', None)):
if getattr(self._client_mngrs[client_id], todo)(**kwargs) is not False:
self.redraw_affected()
- def _new_client(self, conn_setup: IrcConnSetup) -> 'ClientKnowingTui':
- return ClientKnowingTui(_q_out=self._q_out, conn_setup=conn_setup)
+ def _new_client(self, conn_setup: IrcConnSetup, channels: set[str]
+ ) -> 'ClientKnowingTui':
+ return ClientKnowingTui(
+ _q_out=self._q_out, conn_setup=conn_setup, channels=channels)
def cmd__connect(self,
host_port: str,
else:
username = ''
realname = username_realname
- self._put(NewClientEvent(self._new_client(IrcConnSetup(
- hostname, port, nickname, username, realname, password))))
+ setup = IrcConnSetup(
+ hostname, port, nickname, username, realname, password)
+ self._put(NewClientEvent(self._new_client(setup, set())))
return None
class TestingClientTui(ClientTui):
'Collects keypresses via TestTerminal and test file, compares log results.'
+ _path_config = None
_clients: list[_TestClientKnowingTui]
def __init__(self, **kwargs) -> None:
self._playbook_idx = -1
self._play_till_next_log()
- def _new_client(self, conn_setup: IrcConnSetup) -> _TestClientKnowingTui:
+ def _new_client(self, conn_setup: IrcConnSetup, channels: set[str]
+ ) -> _TestClientKnowingTui:
self._clients += [_TestClientKnowingTui(_q_out=self._q_out,
- conn_setup=conn_setup)]
+ conn_setup=conn_setup,
+ channels=channels)]
return self._clients[-1]
def log(self, msg: str, **kwargs) -> tuple[tuple[int, ...], str]: