Network/IRC/IrcWidget.py

changeset 3022
57179e4cdadd
parent 3020
542e97d4ecb3
child 3034
7ce719013078
child 3058
0a02c433f52d
equal deleted inserted replaced
3021:801289962f4e 3022:57179e4cdadd
238 self.trUtf8("""<p>Do you really want to disconnect from""" 238 self.trUtf8("""<p>Do you really want to disconnect from"""
239 """ <b>{0}</b>?</p><p>All channels will be""" 239 """ <b>{0}</b>?</p><p>All channels will be"""
240 """ closed.</p>""")\ 240 """ closed.</p>""")\
241 .format(self.__server.getName())) 241 .format(self.__server.getName()))
242 if ok: 242 if ok:
243 self.networkWidget.addServerMessage(self.trUtf8("Info"), 243 self.networkWidget.addServerMessage(
244 self.trUtf8("Info"),
244 self.trUtf8("Disconnecting from server {0}...").format( 245 self.trUtf8("Disconnecting from server {0}...").format(
245 self.__server.getName())) 246 self.__server.getName()))
246 self.__closeAllChannels() 247 self.__closeAllChannels()
247 self.__send("QUIT :" + self.__quitMessage) 248 self.__send("QUIT :" + self.__quitMessage)
248 self.__socket and self.__socket.flush() 249 self.__socket and self.__socket.flush()
435 436
436 def __hostFound(self): 437 def __hostFound(self):
437 """ 438 """
438 Private slot to indicate the host was found. 439 Private slot to indicate the host was found.
439 """ 440 """
440 self.networkWidget.addServerMessage(self.trUtf8("Info"), 441 self.networkWidget.addServerMessage(
442 self.trUtf8("Info"),
441 self.trUtf8("Server found,connecting...")) 443 self.trUtf8("Server found,connecting..."))
442 444
443 def __hostConnected(self): 445 def __hostConnected(self):
444 """ 446 """
445 Private slot to log in to the server after the connection was 447 Private slot to log in to the server after the connection was
446 established. 448 established.
447 """ 449 """
448 self.networkWidget.addServerMessage(self.trUtf8("Info"), 450 self.networkWidget.addServerMessage(
451 self.trUtf8("Info"),
449 self.trUtf8("Connected,logging in...")) 452 self.trUtf8("Connected,logging in..."))
450 self.networkWidget.setConnected(True) 453 self.networkWidget.setConnected(True)
451 454
452 self.__registering = True 455 self.__registering = True
453 serverPassword = self.__server.getPassword() 456 serverPassword = self.__server.getPassword()
476 """ 479 """
477 Private slot to indicate the host was disconnected. 480 Private slot to indicate the host was disconnected.
478 """ 481 """
479 if self.networkWidget.isConnected(): 482 if self.networkWidget.isConnected():
480 self.__closeAllChannels() 483 self.__closeAllChannels()
481 self.networkWidget.addServerMessage(self.trUtf8("Info"), 484 self.networkWidget.addServerMessage(
485 self.trUtf8("Info"),
482 self.trUtf8("Server disconnected.")) 486 self.trUtf8("Server disconnected."))
483 self.networkWidget.setRegistered(False) 487 self.networkWidget.setRegistered(False)
484 self.networkWidget.setConnected(False) 488 self.networkWidget.setConnected(False)
485 self.__server = None 489 self.__server = None
486 self.__nickName = "" 490 self.__nickName = ""
496 def __readyRead(self): 500 def __readyRead(self):
497 """ 501 """
498 Private slot to read data from the socket. 502 Private slot to read data from the socket.
499 """ 503 """
500 if self.__socket: 504 if self.__socket:
501 self.__buffer += str(self.__socket.readAll(), 505 self.__buffer += str(
502 Preferences.getSystem("IOEncoding"), 506 self.__socket.readAll(),
503 'replace') 507 Preferences.getSystem("IOEncoding"),
508 'replace')
504 if self.__buffer.endswith("\r\n"): 509 if self.__buffer.endswith("\r\n"):
505 for line in self.__buffer.splitlines(): 510 for line in self.__buffer.splitlines():
506 line = line.strip() 511 line = line.strip()
507 if line: 512 if line:
508 logging.debug("<IRC> " + line) 513 logging.debug("<IRC> " + line)
660 message = self.trUtf8("Message of the day") 665 message = self.trUtf8("Message of the day")
661 elif code == 376: 666 elif code == 376:
662 message = self.trUtf8("End of message of the day") 667 message = self.trUtf8("End of message of the day")
663 elif code == 4: 668 elif code == 4:
664 parts = message.strip().split() 669 parts = message.strip().split()
665 message = self.trUtf8("Server {0} (Version {1}), User-Modes: {2}," 670 message = self.trUtf8(
671 "Server {0} (Version {1}), User-Modes: {2},"
666 " Channel-Modes: {3}").format( 672 " Channel-Modes: {3}").format(
667 parts[1], parts[2], parts[3], parts[4]) 673 parts[1], parts[2], parts[3], parts[4])
668 elif code == 265: 674 elif code == 265:
669 parts = message.strip().split() 675 parts = message.strip().split()
670 message = self.trUtf8( 676 message = self.trUtf8(
737 (QAbstractSocket.SocketError) 743 (QAbstractSocket.SocketError)
738 """ 744 """
739 if error == QAbstractSocket.RemoteHostClosedError: 745 if error == QAbstractSocket.RemoteHostClosedError:
740 # ignore this one, it's a disconnect 746 # ignore this one, it's a disconnect
741 if self.__sslErrorLock: 747 if self.__sslErrorLock:
742 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"), 748 self.networkWidget.addErrorMessage(
749 self.trUtf8("SSL Error"),
743 self.trUtf8( 750 self.trUtf8(
744 """Connection to server {0} (port {1}) lost while""" 751 """Connection to server {0} (port {1}) lost while"""
745 """ waiting for user response to an SSL error.""") 752 """ waiting for user response to an SSL error.""")
746 .format(self.__server.getName(), self.__server.getPort())) 753 .format(self.__server.getName(), self.__server.getPort()))
747 self.__connectionState = IrcWidget.ServerDisconnected 754 self.__connectionState = IrcWidget.ServerDisconnected
748 elif error == QAbstractSocket.HostNotFoundError: 755 elif error == QAbstractSocket.HostNotFoundError:
749 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"), 756 self.networkWidget.addErrorMessage(
757 self.trUtf8("Socket Error"),
750 self.trUtf8( 758 self.trUtf8(
751 "The host was not found. Please check the host name" 759 "The host was not found. Please check the host name"
752 " and port settings.")) 760 " and port settings."))
753 elif error == QAbstractSocket.ConnectionRefusedError: 761 elif error == QAbstractSocket.ConnectionRefusedError:
754 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"), 762 self.networkWidget.addErrorMessage(
763 self.trUtf8("Socket Error"),
755 self.trUtf8( 764 self.trUtf8(
756 "The connection was refused by the peer. Please check the" 765 "The connection was refused by the peer. Please check the"
757 " host name and port settings.")) 766 " host name and port settings."))
758 elif error == QAbstractSocket.SslHandshakeFailedError: 767 elif error == QAbstractSocket.SslHandshakeFailedError:
759 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"), 768 self.networkWidget.addErrorMessage(
769 self.trUtf8("Socket Error"),
760 self.trUtf8("The SSL handshake failed.")) 770 self.trUtf8("The SSL handshake failed."))
761 else: 771 else:
762 if self.__socket: 772 if self.__socket:
763 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"), 773 self.networkWidget.addErrorMessage(
774 self.trUtf8("Socket Error"),
764 self.trUtf8( 775 self.trUtf8(
765 "The following network error occurred:<br/>{0}") 776 "The following network error occurred:<br/>{0}")
766 .format(self.__socket.errorString())) 777 .format(self.__socket.errorString()))
767 else: 778 else:
768 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"), 779 self.networkWidget.addErrorMessage(
780 self.trUtf8("Socket Error"),
769 self.trUtf8("A network error occurred.")) 781 self.trUtf8("A network error occurred."))
770 782
771 def __sslErrors(self, errors): 783 def __sslErrors(self, errors):
772 """ 784 """
773 Private slot to handle SSL errors. 785 Private slot to handle SSL errors.
775 @param errors list of SSL errors (list of QSslError) 787 @param errors list of SSL errors (list of QSslError)
776 """ 788 """
777 ignored, defaultChanged = self.__sslErrorHandler.sslErrors( 789 ignored, defaultChanged = self.__sslErrorHandler.sslErrors(
778 errors, self.__server.getName(), self.__server.getPort()) 790 errors, self.__server.getName(), self.__server.getPort())
779 if ignored == E5SslErrorHandler.NotIgnored: 791 if ignored == E5SslErrorHandler.NotIgnored:
780 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"), 792 self.networkWidget.addErrorMessage(
793 self.trUtf8("SSL Error"),
781 self.trUtf8( 794 self.trUtf8(
782 """Could not connect to {0} (port {1}) using an SSL""" 795 """Could not connect to {0} (port {1}) using an SSL"""
783 """ encrypted connection. Either the server does not""" 796 """ encrypted connection. Either the server does not"""
784 """ support SSL (did you use the correct port?) or""" 797 """ support SSL (did you use the correct port?) or"""
785 """ you rejected the certificate.""").format( 798 """ you rejected the certificate.""").format(
788 else: 801 else:
789 if defaultChanged: 802 if defaultChanged:
790 self.__socket.setSslConfiguration( 803 self.__socket.setSslConfiguration(
791 QSslConfiguration.defaultConfiguration()) 804 QSslConfiguration.defaultConfiguration())
792 if ignored == E5SslErrorHandler.UserIgnored: 805 if ignored == E5SslErrorHandler.UserIgnored:
793 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"), 806 self.networkWidget.addErrorMessage(
807 self.trUtf8("SSL Error"),
794 self.trUtf8( 808 self.trUtf8(
795 """The SSL certificate for the server {0} (port {1})""" 809 """The SSL certificate for the server {0} (port {1})"""
796 """ failed the authenticity check. SSL errors""" 810 """ failed the authenticity check. SSL errors"""
797 """ were accepted by you.""").format( 811 """ were accepted by you.""").format(
798 self.__server.getName(), self.__server.getPort())) 812 self.__server.getName(), self.__server.getPort()))
845 if Version.startswith("@@"): 859 if Version.startswith("@@"):
846 vers = "" 860 vers = ""
847 else: 861 else:
848 vers = " " + Version 862 vers = " " + Version
849 msg = "Eric IRC client{0}, {1}".format(vers, Copyright) 863 msg = "Eric IRC client{0}, {1}".format(vers, Copyright)
850 self.networkWidget.addServerMessage(self.trUtf8("CTCP"), 864 self.networkWidget.addServerMessage(
865 self.trUtf8("CTCP"),
851 self.trUtf8("Received Version request from {0}.").format( 866 self.trUtf8("Received Version request from {0}.").format(
852 match.group(1))) 867 match.group(1)))
853 self.__sendCtcpReply(match.group(1), "VERSION " + msg) 868 self.__sendCtcpReply(match.group(1), "VERSION " + msg)
854 elif ctcpRequest == "ping": 869 elif ctcpRequest == "ping":
855 self.networkWidget.addServerMessage(self.trUtf8("CTCP"), 870 self.networkWidget.addServerMessage(
856 self.trUtf8("Received CTCP-PING request from {0}," 871 self.trUtf8("CTCP"),
857 " sending answer.").format(match.group(1))) 872 self.trUtf8(
873 "Received CTCP-PING request from {0},"
874 " sending answer.").format(match.group(1)))
858 self.__sendCtcpReply( 875 self.__sendCtcpReply(
859 match.group(1), "PING {0}".format(ctcpArg)) 876 match.group(1), "PING {0}".format(ctcpArg))
860 elif ctcpRequest == "clientinfo": 877 elif ctcpRequest == "clientinfo":
861 self.networkWidget.addServerMessage(self.trUtf8("CTCP"), 878 self.networkWidget.addServerMessage(
862 self.trUtf8("Received CTCP-CLIENTINFO request from {0}," 879 self.trUtf8("CTCP"),
880 self.trUtf8(
881 "Received CTCP-CLIENTINFO request from {0},"
863 " sending answer.").format(match.group(1))) 882 " sending answer.").format(match.group(1)))
864 self.__sendCtcpReply(match.group(1), 883 self.__sendCtcpReply(
884 match.group(1),
865 "CLIENTINFO CLIENTINFO PING VERSION") 885 "CLIENTINFO CLIENTINFO PING VERSION")
866 else: 886 else:
867 self.networkWidget.addServerMessage(self.trUtf8("CTCP"), 887 self.networkWidget.addServerMessage(
888 self.trUtf8("CTCP"),
868 self.trUtf8( 889 self.trUtf8(
869 "Received unknown CTCP-{0} request from {1}.").format( 890 "Received unknown CTCP-{0} request from {1}.").format(
870 ctcpRequest, match.group(1))) 891 ctcpRequest, match.group(1)))
871 return True 892 return True
872 893
876 """ 897 """
877 Private method to update the users count on the channel tabs. 898 Private method to update the users count on the channel tabs.
878 """ 899 """
879 for channel in self.__channelList: 900 for channel in self.__channelList:
880 index = self.channelsWidget.indexOf(channel) 901 index = self.channelsWidget.indexOf(channel)
881 self.channelsWidget.setTabText(index, 902 self.channelsWidget.setTabText(
903 index,
882 self.trUtf8("{0} ({1})", "channel name, users count").format( 904 self.trUtf8("{0} ({1})", "channel name, users count").format(
883 channel.name(), channel.getUsersCount())) 905 channel.name(), channel.getUsersCount()))
884 906
885 def __handleNickInUseLogin(self): 907 def __handleNickInUseLogin(self):
886 """ 908 """
909 931
910 def __handleNickInUse(self): 932 def __handleNickInUse(self):
911 """ 933 """
912 Private method to handle a 443 server error. 934 Private method to handle a 443 server error.
913 """ 935 """
914 self.networkWidget.addServerMessage(self.trUtf8("Critical"), 936 self.networkWidget.addServerMessage(
937 self.trUtf8("Critical"),
915 self.trUtf8("The given nickname is already in use.")) 938 self.trUtf8("The given nickname is already in use."))
916 939
917 def __changeNick(self, nick): 940 def __changeNick(self, nick):
918 """ 941 """
919 Private slot to use a new nick name. 942 Private slot to use a new nick name.

eric ide

mercurial