home · contact · privacy
Simplify MOTD processing.
authorChristian Heller <c.heller@plomlompom.de>
Mon, 25 Aug 2025 17:35:10 +0000 (19:35 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Mon, 25 Aug 2025 17:35:10 +0000 (19:35 +0200)
ircplom/client.py
ircplom/client_tui.py

index 8b0288069ebebd4bd88a16483aa9cc1efdbf48f9..4784507d837fe3c80e248eb0980949845b862342 100644 (file)
@@ -620,39 +620,6 @@ class _Db(Db):
         if key[0] != '_':
             self._on_update(key)
 
-    def __getattribute__(self, key: str):
-        if key[0] != '_':
-            compl_key = self._completable_key(key)
-            if hasattr(self, compl_key):
-                return getattr(self, compl_key).visible
-        return super().__getattribute__(key)
-
-    @staticmethod
-    def _completable_key(key):
-        return f'_completable_{key}'
-
-    def _on_completable(self, method: str, key: str, value: str, stay_complete
-                        ) -> None:
-        completable = getattr(self, self._completable_key(key))
-        getattr(completable, method)(value, stay_complete)
-        if stay_complete:
-            self._on_update(key)
-
-    def append_completable(self, key: str, value: str, stay_complete=False
-                           ) -> None:
-        'To completable list of key append value.'
-        self._on_completable('append', key, value, stay_complete)
-
-    def remove_completable(self, key: str, value: str, stay_complete=False
-                           ) -> None:
-        'From completable list of key remove value.'
-        self._on_completable('remove', key, value, stay_complete)
-
-    def declare_complete(self, key: str) -> None:
-        'Declare completable at key complete.'
-        getattr(self, self._completable_key(key)).is_complete = True
-        self._on_update(key)
-
 
 class SharedChannelDbFields:
     'API for fields shared directly in name and type with TUI.'
@@ -685,6 +652,7 @@ class _ChannelDb(_Db, SharedChannelDbFields):
 class SharedClientDbFields(IrcConnSetup, Generic[_ChannelDbFields]):
     'API for fields shared directly in name and type with TUI.'
     connection_state: str
+    motd: tuple[str, ...]
     sasl_account: str
     sasl_auth_state: str
     user_modes: str
@@ -738,9 +706,22 @@ class _ClientDb(_Db, SharedClientDbFields):
     caps: _UpdatingDict
     isupports: _UpdatingDict
     users: _UpdatingDict
-    _completable_motd: _CompletableStringsList
+    _completable_motd: list[str]
     _channels: dict[str, _ChannelDb]
 
+    def _get_completable(self, key) -> list[str]:
+        return getattr(self, f'_completable_{key}')
+
+    def append_completable(self, key: str, value: str) -> None:
+        'To completable list of key append value.'
+        self._get_completable(key).append(value)
+
+    def declare_complete(self, key: str) -> None:
+        'Declare completable at key complete.'
+        completable = self._get_completable(key)
+        setattr(self, key, tuple(completable))
+        completable.clear()
+
     def user_id(self, query: str | _NickUserHost) -> str:
         'Return user_id for nickname of entire NickUserHost, create if none.'
         nick = query if isinstance(query, str) else query.nick
index 7528cb233b977507bd29b730c37a4afc61e186b3..fae8c6acc77e11d3f73a1b880de1e357ea00d5df 100644 (file)
@@ -178,7 +178,6 @@ class _ChannelDb(_Db, SharedChannelDbFields):
 class _TuiClientDb(_Db, SharedClientDbFields):
     caps: dict[str, str]
     isupports: dict[str, str]
-    motd: tuple[str]
     users: dict[str, NickUserHost]
     _channels: dict[str, _ChannelDb]