home · contact · privacy
Simplify translation from events into TUI logging.
authorChristian Heller <c.heller@plomlompom.de>
Fri, 13 Jun 2025 16:26:01 +0000 (18:26 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Fri, 13 Jun 2025 16:26:01 +0000 (18:26 +0200)
ircplom/events.py
ircplom/irc_conn.py
ircplom/tui.py

index ae0f33c82687346cacc7c0c4e68ca726ec69345d..93d20d69e2537127c9b3b2d504957e8afe694a45 100644 (file)
@@ -7,8 +7,6 @@ from typing import Any, Iterator, Literal, NamedTuple, Optional, Self
 
 class EventType(Enum):
     'Differentiate Events for different treatment.'
-    ALERT = auto()
-    CONN_ALERT = auto()
     CONNECTED = auto()
     CONN_WINDOW = auto()
     DISCONNECTED = auto()
@@ -16,11 +14,12 @@ class EventType(Enum):
     INIT_CONNECT = auto()
     INIT_RECONNECT = auto()
     KEYBINDING = auto()
+    LOG = auto()
+    LOG_CONN = auto()
     NICK_SET = auto()
     PING = auto()
     PROMPT_ADD = auto()
     QUIT = auto()
-    RECV = auto()
     SEND = auto()
     SET_SCREEN = auto()
 
index eb3c575d69d48c4935f6b0a2ed95b7b2630440aa..0473c6489db0c46a35401a534f2947e46bd7eb90 100644 (file)
@@ -51,13 +51,13 @@ class IrcConnection:
 
         def connect(self) -> None:
             self._socket = socket()
-            self._broadcast(EventType.CONN_ALERT,
+            self._broadcast(EventType.LOG_CONN,
                             f'Connecting to {self._hostname} …')
             self._socket.settimeout(_TIMEOUT_CONNECT)
             try:
                 self._socket.connect((self._hostname, _PORT))
             except (TimeoutError, socket_gaierror) as e:
-                self._broadcast(EventType.CONN_ALERT, str(e))
+                self._broadcast(EventType.LOG_CONN, f'ALERT: {e}')
                 return
             self._socket.settimeout(TIMEOUT_LOOP)
             self._assumed_open = True
@@ -115,8 +115,8 @@ class IrcConnection:
     def _write_line(self, line: str) -> None:
         'Send line-separator-delimited message over socket.'
         if not (self._socket and self._assumed_open):
-            self._broadcast(EventType.CONN_ALERT,
-                            'cannot send, assuming connection closed')
+            self._broadcast(EventType.LOG_CONN,
+                            'ALERT: cannot send, assuming connection closed')
             return
         self._socket.sendall(line.encode('utf-8') + _IRCSPEC_LINE_SEPARATOR)
 
@@ -124,9 +124,9 @@ class IrcConnection:
         'Process connection-directed Event into further steps.'
         if event.type_ == EventType.INIT_RECONNECT:
             if self._assumed_open:
-                self._broadcast(EventType.CONN_ALERT,
-                                'Reconnect called, but still seem connected, '
-                                'so nothing to do.')
+                self._broadcast(EventType.LOG_CONN,
+                                'ALERT: Reconnect called, but still seem '
+                                'connected, so nothing to do.')
             else:
                 self._start_connecting()
         elif event.type_ == EventType.CONNECTED:
@@ -250,20 +250,25 @@ class _ConnectionLoop(Loop):
         self.broadcast(type_, (self._conn_idx, *args))
 
     def _send(self, verb: str, parameters: tuple[str, ...]) -> None:
-        self._broadcast_conn(EventType.SEND, IrcMessage(verb, parameters))
+        msg = IrcMessage(verb, parameters)
+        self._broadcast_conn(EventType.LOG_CONN, f'->: {msg.raw}')
+        self._broadcast_conn(EventType.SEND, msg)
 
     def process_main(self, event: Event) -> bool:
         if not super().process_main(event):
             return False
         if event.type_ == EventType.CONNECTED:
             login = event.payload[1]
+            # self._send('CAP', ('LS', '302'))
             self._send('USER', (login.user, '0', '*', login.real))
             self._send('NICK', (login.nick,))
+            # self._send('CAP', ('LIST',))
+            # self._send('CAP', ('END',))
         return True
 
     def process_bonus(self, yielded: str) -> None:
         msg = IrcMessage.from_raw(yielded)
-        self._broadcast_conn(EventType.RECV, msg)
+        self._broadcast_conn(EventType.LOG_CONN, f'<-: {msg}')
         if msg.verb == 'PING':
             self._send('PONG', (msg.parameters[0],))
         elif msg.verb == 'ERROR'\
index b7fcbd31e085360a0a75266c914f3bde38950da7..f4b1b4bcd2ca5dd80b0feff81c15be4711c35bf0 100644 (file)
@@ -342,8 +342,8 @@ class _KeyboardLoop(Loop):
         elif len(yielded) == 1:
             self.broadcast(EventType.PROMPT_ADD, yielded)
         else:
-            self.broadcast(EventType.ALERT,
-                           f'unknown keyboard input: {yielded}')
+            self.broadcast(EventType.LOG,
+                           f'ALERT: unknown keyboard input: {yielded}')
 
 
 class _TuiLoop(Loop):
@@ -391,18 +391,12 @@ class _TuiLoop(Loop):
             self._windows += [conn_win]
             self._conn_windows += [conn_win]
             self._switch_window(conn_win.idx)
-        elif event.type_ == EventType.ALERT:
-            self.window.log.append(f'ALERT {event.payload}')
+        elif event.type_ == EventType.LOG:
+            self.window.log.append(event.payload)
             self.window.log.draw()
-        elif event.type_ in {EventType.RECV, EventType.SEND,
-                             EventType.CONN_ALERT}:
+        elif event.type_ == EventType.LOG_CONN:
             conn_win = self._conn_windows[event.payload[0]]
-            if event.type_ == EventType.CONN_ALERT:
-                msg = f'ALERT {event.payload[1]}'
-            else:
-                msg = (('<-' if event.type_ == EventType.RECV else '->')
-                       + event.payload[1].raw)
-            conn_win.log.append(msg)
+            conn_win.log.append(event.payload[1])
             if conn_win == self.window:
                 self.window.log.draw()
         elif event.type_ == EventType.NICK_SET:
@@ -478,7 +472,7 @@ class _TuiLoop(Loop):
         else:
             alert = 'not prefixed by /'
         if alert:
-            self.broadcast(EventType.ALERT, f'invalid prompt command: {alert}')
+            self.broadcast(EventType.LOG, f'invalid prompt command: {alert}')
 
     def cmd__quit(self) -> None:
         'Send QUIT to all threads.'