home · contact · privacy
Catch _all_ Client.send fails.
authorChristian Heller <c.heller@plomlompom.de>
Wed, 8 Oct 2025 22:23:04 +0000 (00:23 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Wed, 8 Oct 2025 22:23:04 +0000 (00:23 +0200)
src/ircplom/client.py
src/ircplom/client_tui.py

index 6d29e0f597e8160e6d200db3bbc426fa079ba206..67945837f841706c08a9eb0d2de3edf515727c19 100644 (file)
@@ -931,7 +931,7 @@ class Client(ABC, ClientQueueMixin):
     def _alert(self, msg: str) -> None:
         pass
 
-    def send(self, verb: str, *args) -> IrcMessage:
+    def send(self, verb: str, *args) -> Optional[IrcMessage]:
         'Send msg over socket, on success log .raw.'
         if not self.conn:
             raise SendFail('cannot send, connection seems closed')
index 7b5135040017fd7f5af7aa3318180884704ba17b..7c0a4c4c3a22c4d5c11594ed9d5c81efef88f445 100644 (file)
@@ -494,14 +494,10 @@ class ClientKnowingTui(Client):
 
     def privmsg(self, chat_target: str, msg: str) -> None:
         'Catch /privmsg, only allow for channel if in channel, else complain.'
-        try:
-            if self.db.is_chan_name(chat_target)\
-                    and chat_target not in self.db.channels.keys():
-                raise SendFail('not sending, since not in channel')
-            self.send('PRIVMSG', chat_target, msg)
-        except SendFail as e:
-            self._tui_alert_trigger(f'{e}')
-        else:
+        if self.db.is_chan_name(chat_target)\
+                and chat_target not in self.db.channels.keys():
+            self._tui_alert_trigger('not sending, since not in channel')
+        elif self.send('PRIVMSG', chat_target, msg):
             self.db.messaging('').to(chat_target).privmsg = msg  # type: ignore
 
     def reconnect(self) -> None:
@@ -512,8 +508,13 @@ class ClientKnowingTui(Client):
             return
         self.connect()
 
-    def send(self, verb: str, *args) -> IrcMessage:
-        msg = super().send(verb, *args)
+    def send(self, verb: str, *args) -> Optional[IrcMessage]:
+        try:
+            msg = super().send(verb, *args)
+        except SendFail as e:
+            self._tui_alert_trigger(f'{e}')
+            return None
+        assert msg is not None
         self._log(msg.raw, out=True)
         return msg