Network/IRC/IrcChannelWidget.py

changeset 6532
f253f0f9ea7f
parent 6514
f11a703e4664
child 6534
1a3e3d857467
--- a/Network/IRC/IrcChannelWidget.py	Wed Oct 03 18:22:26 2018 +0200
+++ b/Network/IRC/IrcChannelWidget.py	Wed Oct 03 19:22:07 2018 +0200
@@ -397,123 +397,133 @@
         """
         msg = self.messageEdit.text()
         if msg:
-            self.messages.append(
-                '<font color="{0}">{2} <b>&lt;</b><font color="{1}">{3}</font>'
-                '<b>&gt;</b> {4}</font>'.format(
-                    Preferences.getIrc("ChannelMessageColour"),
-                    Preferences.getIrc("OwnNickColour"),
-                    ircTimestamp(), self.__userName,
-                    Utilities.html_encode(msg)))
-            
-            if msg.startswith("/"):
-                if self.__private:
-                    E5MessageBox.information(
-                        self,
-                        self.tr("Send Message"),
-                        self.tr(
-                            """Messages starting with a '/' are not allowed"""
-                            """ in private chats."""))
-                else:
-                    sendData = True
-                    # flag set to False, if command was handled
-                    
-                    msgList = msg.split()
-                    cmd = msgList[0][1:].upper()
-                    if cmd in ["MSG", "QUERY"]:
-                        cmd = "PRIVMSG"
-                        if len(msgList) > 1:
-                            if msgList[1].strip().lower() in \
-                                    self.__serviceNamesLower:
-                                msg = "PRIVMSG " + \
-                                    msgList[1].strip().lower() + \
-                                    " :" + " ".join(msgList[2:])
-                            else:
-                                msg = "PRIVMSG {0} :{1}".format(
-                                    msgList[1], " ".join(msgList[2:]))
+            self.__processUserMessage(msg)
+
+    def __processUserMessage(self, msg):
+        """
+        Private method to process a message entered by the user or via the
+        user list context menu.
+        
+        @param msg message to be processed
+        @type str
+        """
+        self.messages.append(
+            '<font color="{0}">{2} <b>&lt;</b><font color="{1}">{3}</font>'
+            '<b>&gt;</b> {4}</font>'.format(
+                Preferences.getIrc("ChannelMessageColour"),
+                Preferences.getIrc("OwnNickColour"),
+                ircTimestamp(), self.__userName,
+                Utilities.html_encode(msg)))
+
+        if msg.startswith("/"):
+            if self.__private:
+                E5MessageBox.information(
+                    self,
+                    self.tr("Send Message"),
+                    self.tr(
+                        """Messages starting with a '/' are not allowed"""
+                        """ in private chats."""))
+            else:
+                sendData = True
+                # flag set to False, if command was handled
+
+                msgList = msg.split()
+                cmd = msgList[0][1:].upper()
+                if cmd in ["MSG", "QUERY"]:
+                    cmd = "PRIVMSG"
+                    if len(msgList) > 1:
+                        if msgList[1].strip().lower() in \
+                                self.__serviceNamesLower:
+                            msg = "PRIVMSG " + \
+                                msgList[1].strip().lower() + \
+                                " :" + " ".join(msgList[2:])
                         else:
-                            msgList[0] = cmd
-                            msg = " ".join(msgList)
-                    elif cmd == "NOTICE":
-                        if len(msgList) > 2:
-                            msg = "NOTICE {0} :{1}".format(
+                            msg = "PRIVMSG {0} :{1}".format(
                                 msgList[1], " ".join(msgList[2:]))
-                        else:
-                            msg = "NOTICE {0}".format(" ".join(msgList[1:]))
-                    elif cmd == "PING":
-                        receiver = msgList[1]
-                        msg = "PING {0} "
-                        self.sendCtcpRequest.emit(receiver, "PING", "")
-                        sendData = False
-                    elif cmd == "IGNORE":
-                        sendData = False
-                        if len(msgList) > 1:
-                            if msgList[1] == "-r":
-                                ignored = False
-                                userNamesList = msgList[2:]
-                            else:
-                                ignored = True
-                                userNamesList = msgList[1:]
+                    else:
+                        msgList[0] = cmd
+                        msg = " ".join(msgList)
+                elif cmd == "NOTICE":
+                    if len(msgList) > 2:
+                        msg = "NOTICE {0} :{1}".format(
+                            msgList[1], " ".join(msgList[2:]))
+                    else:
+                        msg = "NOTICE {0}".format(" ".join(msgList[1:]))
+                elif cmd == "PING":
+                    receiver = msgList[1]
+                    msg = "PING {0} "
+                    self.sendCtcpRequest.emit(receiver, "PING", "")
+                    sendData = False
+                elif cmd == "IGNORE":
+                    sendData = False
+                    if len(msgList) > 1:
+                        if msgList[1] == "-r":
+                            ignored = False
+                            userNamesList = msgList[2:]
                         else:
-                            userNamesList = []
-                        userNames = ",".join(
-                            u.rstrip(",") for u in userNamesList).split(",")
-                        for userName in userNames:
-                            itm = self.__findUser(userName)
-                            if itm:
-                                itm.setIgnored(ignored)
-                    elif cmd == "UNIGNORE":
-                        sendData = False
-                        if len(msgList) > 1:
+                            ignored = True
                             userNamesList = msgList[1:]
-                        else:
-                            userNamesList = []
-                        userNames = ",".join(
-                            u.rstrip(",") for u in userNamesList).split(",")
-                        for userName in userNames:
-                            itm = self.__findUser(userName)
-                            if itm:
-                                itm.setIgnored(False)
-                    elif cmd == "AWAY":
-                        sendData = False
-                        if len(msgList) > 1:
-                            msg = " ".join(msgList[1:])
+                    else:
+                        userNamesList = []
+                    userNames = ",".join(
+                        u.rstrip(",") for u in userNamesList).split(",")
+                    for userName in userNames:
+                        itm = self.__findUser(userName)
+                        if itm:
+                            itm.setIgnored(ignored)
+                elif cmd == "UNIGNORE":
+                    sendData = False
+                    if len(msgList) > 1:
+                        userNamesList = msgList[1:]
+                    else:
+                        userNamesList = []
+                    userNames = ",".join(
+                        u.rstrip(",") for u in userNamesList).split(",")
+                    for userName in userNames:
+                        itm = self.__findUser(userName)
+                        if itm:
+                            itm.setIgnored(False)
+                elif cmd == "AWAY":
+                    sendData = False
+                    if len(msgList) > 1:
+                        msg = " ".join(msgList[1:])
+                    else:
+                        msg = ""
+                    self.awayCommand.emit(msg)
+                elif cmd == "JOIN":
+                    sendData = False
+                    if len(msgList) > 1:
+                        channels = msgList[1].split(",")
+                        if len(msgList) > 2:
+                            keys = msgList[2].split(",")
                         else:
-                            msg = ""
-                        self.awayCommand.emit(msg)
-                    elif cmd == "JOIN":
-                        sendData = False
-                        if len(msgList) > 1:
-                            channels = msgList[1].split(",")
-                            if len(msgList) > 2:
-                                keys = msgList[2].split(",")
-                            else:
-                                keys = []
-                            for channel, key in zip_longest(
-                                    channels, keys, fillvalue=""):
-                                self.__ircWidget.joinChannel(channel, key)
-                    elif cmd == "PART":
-                        sendData = False
-                        if len(msgList) == 1:
-                            self.leaveChannel()
-                        else:
-                            self.leaveChannels.emit(msgList[1:])
-                    elif cmd == "PARTALL":
-                        sendData = False
-                        self.leaveAllChannels.emit()
+                            keys = []
+                        for channel, key in zip_longest(
+                                channels, keys, fillvalue=""):
+                            self.__ircWidget.joinChannel(channel, key)
+                elif cmd == "PART":
+                    sendData = False
+                    if len(msgList) == 1:
+                        self.leaveChannel()
                     else:
-                        msg = msg[1:]
-                    if sendData:
-                        self.sendData.emit(msg)
+                        self.leaveChannels.emit(msgList[1:])
+                elif cmd == "PARTALL":
+                    sendData = False
+                    self.leaveAllChannels.emit()
+                else:
+                    msg = msg[1:]
+                if sendData:
+                    self.sendData.emit(msg)
+        else:
+            if self.__private:
+                self.sendData.emit(
+                    "PRIVMSG " + self.__privatePartner + " :" + msg)
             else:
-                if self.__private:
-                    self.sendData.emit(
-                        "PRIVMSG " + self.__privatePartner + " :" + msg)
-                else:
-                    self.sendData.emit(
-                        "PRIVMSG " + self.__name + " :" + msg)
-            
-            self.messageEdit.clear()
-            self.unsetMarkerLine()
+                self.sendData.emit(
+                    "PRIVMSG " + self.__name + " :" + msg)
+
+        self.messageEdit.clear()
+        self.unsetMarkerLine()
     
     def requestLeave(self):
         """
@@ -1463,6 +1473,42 @@
         user = self.usersList.selectedItems()[0].text()
         self.openPrivateChat.emit(user)
     
+    def __sendUserMessage(self):
+        """
+        Private slot to send a private message to a specific user.
+        """
+        # TODO: code me
+        user = self.usersList.selectedItems()[0].text()
+        
+    
+    def __sendUserQuery(self):
+        """
+        Private slot to send a query message to a specific user.
+        """
+        # TODO: code me
+        user = self.usersList.selectedItems()[0].text()
+    
+    def __sendUserNotice(self):
+        """
+        Private slot to send a notice message to a specific user.
+        """
+        # TODO: code me
+        user = self.usersList.selectedItems()[0].text()
+    
+    def __pingUser(self):
+        """
+        Private slot to send a ping to a specific user.
+        """
+        user = self.usersList.selectedItems()[0].text()
+        self.__processUserMessage("/PING {0}".format(user))
+    
+    def __ignoreUser(self):
+        """
+        Private slot to ignore a specific user.
+        """
+        user = self.usersList.selectedItems()[0].text()
+        self.__processUserMessage("/IGNORE {0}".format(user))
+    
     def __initUsersMenu(self):
         """
         Private slot to initialize the users list context menu.
@@ -1474,6 +1520,18 @@
         self.__privateChatAct = self.__usersMenu.addAction(
             self.tr("Private Chat"), self.__openPrivateChat)
         self.__usersMenu.addSeparator()
+        self.__sendUserMessageAct = self.__usersMenu.addAction(
+            self.tr("Send Message"), self.__sendUserMessage)
+        self.__sendUserQueryAct = self.__usersMenu.addAction(
+            self.tr("Send Query"), self.__sendUserQuery)
+        self.__sendUserNoticeAct = self.__usersMenu.addAction(
+            self.tr("Send Notice"), self.__sendUserNotice)
+        self.__usersMenu.addSeparator()
+        self.__pingUserAct = self.__usersMenu.addAction(
+            self.tr("Send Ping"), self.__pingUser)
+        self.__ignoreUserAct = self.__usersMenu.addAction(
+            self.tr("Ignore User"), self.__ignoreUser)
+        self.__usersMenu.addSeparator()
         self.__usersListRefreshAct = self.__usersMenu.addAction(
             self.tr("Refresh"), self.__sendAutoWhoCommand)
     

eric ide

mercurial