home · contact · privacy
Minor code reorganization. master
authorChristian Heller <c.heller@plomlompom.de>
Sat, 26 Jul 2025 23:30:43 +0000 (01:30 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Sat, 26 Jul 2025 23:30:43 +0000 (01:30 +0200)
ircplom/irc_conn.py

index f7a692ce82bbc564835379be11599b59d496b4e0..36be5f9c87bcbd584d7d28c700d0e5255268a34e 100644 (file)
@@ -203,8 +203,8 @@ class Client(ABC, ClientQueueMixin):
         self._hostname = hostname
         self._socket: Optional[socket] = None
         self._recv_loop: Optional[Loop] = None
-        self._caps_available: list[str] = []
-        self._caps_enabled: list[str] = []
+        self._caps: dict[str, set[str]] = {
+                'available': set(), 'enabled': set(), 'finished': set()}
         self.id_ = uuid4()
         self.assumed_open = False
         self.realname = realname
@@ -234,21 +234,17 @@ class Client(ABC, ClientQueueMixin):
 
         Thread(target=connect, daemon=True, args=(self,)).start()
 
-    def set_caps(self,
-                 caps: list[str],
-                 final_line: bool,
-                 enabled: bool = False
+    def set_caps(self, caps: set[str], final_line: bool, enabled: bool
                  ) -> None:
         'Record available or enabled server capabilities.'
-        finished_marker = '\0'
-        caps_list = self._caps_enabled if enabled else self._caps_available
-        if caps_list[-1:] == [finished_marker]:
-            caps_list.clear()
-        caps_list += caps
+        category = 'enabled' if enabled else 'available'
+        if category in self._caps['finished']:
+            self._caps[category].clear()
+            self._caps['finished'].remove(category)
+        self._caps[category] |= caps
         if final_line:
-            caps_list += [finished_marker]
-            self.log(f'# server caps {"enabled" if enabled else "available"}'
-                     f': {caps_list[:-1]}')
+            self._caps['finished'].add(category)
+            self.log(f'# server caps {category}: {self._caps[category]}')
 
     @abstractmethod
     def log(self, msg: str, chat: str = '') -> None:
@@ -344,4 +340,4 @@ class _RecvEvent(ClientEvent, PayloadMixin):
             if subverb in {'LS', 'LIST'}:
                 target.set_caps(final_line=msg.params[2] != '*',
                                 enabled=subverb == 'LIST',
-                                caps=msg.params[-1].strip().split())
+                                caps=set(msg.params[-1].strip().split()))