Network/IRC/IrcWidget.py

changeset 2992
dbdf27746da5
parent 2960
9453efa25fd5
child 3020
542e97d4ecb3
child 3057
10516539f238
equal deleted inserted replaced
2991:226481ff40d1 2992:dbdf27746da5
55 55
56 from .IrcNetworkManager import IrcNetworkManager 56 from .IrcNetworkManager import IrcNetworkManager
57 self.__ircNetworkManager = IrcNetworkManager(self) 57 self.__ircNetworkManager = IrcNetworkManager(self)
58 58
59 self.__leaveButton = QToolButton(self) 59 self.__leaveButton = QToolButton(self)
60 self.__leaveButton.setIcon(UI.PixmapCache.getIcon("ircCloseChannel.png")) 60 self.__leaveButton.setIcon(
61 self.__leaveButton.setToolTip(self.trUtf8("Press to leave the current channel")) 61 UI.PixmapCache.getIcon("ircCloseChannel.png"))
62 self.__leaveButton.setToolTip(
63 self.trUtf8("Press to leave the current channel"))
62 self.__leaveButton.clicked[()].connect(self.__leaveChannel) 64 self.__leaveButton.clicked[()].connect(self.__leaveChannel)
63 self.__leaveButton.setEnabled(False) 65 self.__leaveButton.setEnabled(False)
64 self.channelsWidget.setCornerWidget(self.__leaveButton, Qt.BottomRightCorner) 66 self.channelsWidget.setCornerWidget(
67 self.__leaveButton, Qt.BottomRightCorner)
65 self.channelsWidget.setTabsClosable(False) 68 self.channelsWidget.setTabsClosable(False)
66 if not isMacPlatform(): 69 if not isMacPlatform():
67 self.channelsWidget.setTabPosition(QTabWidget.South) 70 self.channelsWidget.setTabPosition(QTabWidget.South)
68 71
69 height = self.height() 72 height = self.height()
91 else: 94 else:
92 self.__sslErrorHandler = None 95 self.__sslErrorHandler = None
93 96
94 self.__patterns = [ 97 self.__patterns = [
95 # :foo_!n=foo@foohost.bar.net PRIVMSG bar_ :some long message 98 # :foo_!n=foo@foohost.bar.net PRIVMSG bar_ :some long message
96 (re.compile(r":([^!]+)!([^ ]+)\sPRIVMSG\s([^ ]+)\s:(.*)"), self.__query), 99 (re.compile(r":([^!]+)!([^ ]+)\sPRIVMSG\s([^ ]+)\s:(.*)"),
100 self.__query),
97 # :foo.bar.net COMMAND some message 101 # :foo.bar.net COMMAND some message
98 (re.compile(r""":([^ ]+)\s+([A-Z]+)\s+(.+)"""), self.__handleNamedMessage), 102 (re.compile(r""":([^ ]+)\s+([A-Z]+)\s+(.+)"""),
103 self.__handleNamedMessage),
99 # :foo.bar.net 123 * :info 104 # :foo.bar.net 123 * :info
100 (re.compile(r""":([^ ]+)\s+(\d{3})\s+(.+)"""), self.__handleNumericMessage), 105 (re.compile(r""":([^ ]+)\s+(\d{3})\s+(.+)"""),
106 self.__handleNumericMessage),
101 # PING :ping message 107 # PING :ping message
102 (re.compile(r"""PING\s+:(.*)"""), self.__ping), 108 (re.compile(r"""PING\s+:(.*)"""), self.__ping),
103 ] 109 ]
104 self.__prefixRe = re.compile(r""".*\sPREFIX=\((.*)\)([^ ]+).*""") 110 self.__prefixRe = re.compile(r""".*\sPREFIX=\((.*)\)([^ ]+).*""")
105 self.__chanTypesRe = re.compile(r""".*\sCHANTYPES=([^ ]+).*""") 111 self.__chanTypesRe = re.compile(r""".*\sCHANTYPES=([^ ]+).*""")
129 """ 135 """
130 if self.__server: 136 if self.__server:
131 if Preferences.getIrc("AskOnShutdown"): 137 if Preferences.getIrc("AskOnShutdown"):
132 ok = E5MessageBox.yesNo(self, 138 ok = E5MessageBox.yesNo(self,
133 self.trUtf8("Disconnect from Server"), 139 self.trUtf8("Disconnect from Server"),
134 self.trUtf8("""<p>Do you really want to disconnect from""" 140 self.trUtf8(
135 """ <b>{0}</b>?</p><p>All channels will be closed.""" 141 """<p>Do you really want to disconnect from"""
136 """</p>""").format(self.__server.getName())) 142 """ <b>{0}</b>?</p><p>All channels will be closed."""
143 """</p>""").format(self.__server.getName()))
137 else: 144 else:
138 ok = True 145 ok = True
139 if ok: 146 if ok:
140 self.__socket.blockSignals(True) 147 self.__socket.blockSignals(True)
141 148
168 if connect: 175 if connect:
169 network = self.__ircNetworkManager.getNetwork(name) 176 network = self.__ircNetworkManager.getNetwork(name)
170 if network: 177 if network:
171 self.__server = network.getServer() 178 self.__server = network.getServer()
172 self.__identityName = network.getIdentityName() 179 self.__identityName = network.getIdentityName()
173 identity = self.__ircNetworkManager.getIdentity(self.__identityName) 180 identity = self.__ircNetworkManager.getIdentity(
181 self.__identityName)
174 self.__userName = identity.getIdent() 182 self.__userName = identity.getIdent()
175 self.__quitMessage = identity.getQuitMessage() 183 self.__quitMessage = identity.getQuitMessage()
176 if self.__server: 184 if self.__server:
177 useSSL = self.__server.useSSL() 185 useSSL = self.__server.useSSL()
178 if useSSL and not SSL_AVAILABLE: 186 if useSSL and not SSL_AVAILABLE:
179 E5MessageBox.critical(self, 187 E5MessageBox.critical(self,
180 self.trUtf8("SSL Connection"), 188 self.trUtf8("SSL Connection"),
181 self.trUtf8("""An encrypted connection to the IRC network""" 189 self.trUtf8(
182 """ was requested but SSL is not available.""" 190 """An encrypted connection to the IRC"""
183 """ Please change the server configuration.""")) 191 """ network was requested but SSL is not"""
192 """ available. Please change the server"""
193 """ configuration."""))
184 return 194 return
185 195
186 if useSSL: 196 if useSSL:
187 # create SSL socket 197 # create SSL socket
188 self.__socket = QSslSocket(self) 198 self.__socket = QSslSocket(self)
197 self.__socket.readyRead.connect(self.__readyRead) 207 self.__socket.readyRead.connect(self.__readyRead)
198 self.__socket.error.connect(self.__tcpError) 208 self.__socket.error.connect(self.__tcpError)
199 209
200 self.__connectionState = IrcWidget.ServerConnecting 210 self.__connectionState = IrcWidget.ServerConnecting
201 if useSSL: 211 if useSSL:
202 self.networkWidget.addServerMessage(self.trUtf8("Info"), 212 self.networkWidget.addServerMessage(
203 self.trUtf8("Looking for server {0} (port {1}) using" 213 self.trUtf8("Info"),
204 " an SSL encrypted connection...").format( 214 self.trUtf8("Looking for server {0} (port {1})"
205 self.__server.getName(), self.__server.getPort())) 215 " using an SSL encrypted connection"
206 self.__socket.connectToHostEncrypted(self.__server.getName(), 216 "...").format(self.__server.getName(),
207 self.__server.getPort()) 217 self.__server.getPort()))
218 self.__socket.connectToHostEncrypted(
219 self.__server.getName(), self.__server.getPort())
208 else: 220 else:
209 self.networkWidget.addServerMessage(self.trUtf8("Info"), 221 self.networkWidget.addServerMessage(
210 self.trUtf8("Looking for server {0} (port {1})...").format( 222 self.trUtf8("Info"),
211 self.__server.getName(), self.__server.getPort())) 223 self.trUtf8(
224 "Looking for server {0} (port {1})...").format(
225 self.__server.getName(),
226 self.__server.getPort()))
212 self.__socket.connectToHost(self.__server.getName(), 227 self.__socket.connectToHost(self.__server.getName(),
213 self.__server.getPort()) 228 self.__server.getPort())
214 else: 229 else:
215 if silent: 230 if silent:
216 ok = True 231 ok = True
311 326
312 self.__openPrivate(match.group(1)) 327 self.__openPrivate(match.group(1))
313 # the above call sets the new channel as the current widget 328 # the above call sets the new channel as the current widget
314 channel = self.channelsWidget.currentWidget() 329 channel = self.channelsWidget.currentWidget()
315 channel.addMessage(match.group(1), match.group(4)) 330 channel.addMessage(match.group(1), match.group(4))
316 channel.setPrivateInfo("{0} - {1}".format(match.group(1), match.group(2))) 331 channel.setPrivateInfo(
332 "{0} - {1}".format(match.group(1), match.group(2)))
317 333
318 return True 334 return True
319 335
320 @pyqtSlot(str) 336 @pyqtSlot(str)
321 def __openPrivate(self, name): 337 def __openPrivate(self, name):
371 387
372 @param name name of the closed channel (string) 388 @param name name of the closed channel (string)
373 """ 389 """
374 for channel in self.__channelList: 390 for channel in self.__channelList:
375 if channel.name() == name: 391 if channel.name() == name:
376 self.channelsWidget.removeTab(self.channelsWidget.indexOf(channel)) 392 self.channelsWidget.removeTab(
393 self.channelsWidget.indexOf(channel))
377 self.__channelList.remove(channel) 394 self.__channelList.remove(channel)
378 channel.deleteLater() 395 channel.deleteLater()
379 396
380 if self.channelsWidget.count() == 0: 397 if self.channelsWidget.count() == 0:
381 self.channelsWidget.addTab(self.__emptyLabel, "") 398 self.channelsWidget.addTab(self.__emptyLabel, "")
399 Private slot to send data to the IRC server. 416 Private slot to send data to the IRC server.
400 417
401 @param data data to be sent (string) 418 @param data data to be sent (string)
402 """ 419 """
403 if self.__socket: 420 if self.__socket:
404 self.__socket.write(QByteArray("{0}\r\n".format(data).encode("utf-8"))) 421 self.__socket.write(
422 QByteArray("{0}\r\n".format(data).encode("utf-8")))
405 423
406 def __sendCtcpReply(self, receiver, text): 424 def __sendCtcpReply(self, receiver, text):
407 """ 425 """
408 Private slot to send a CTCP reply. 426 Private slot to send a CTCP reply.
409 427
419 self.networkWidget.addServerMessage(self.trUtf8("Info"), 437 self.networkWidget.addServerMessage(self.trUtf8("Info"),
420 self.trUtf8("Server found,connecting...")) 438 self.trUtf8("Server found,connecting..."))
421 439
422 def __hostConnected(self): 440 def __hostConnected(self):
423 """ 441 """
424 Private slot to log in to the server after the connection was established. 442 Private slot to log in to the server after the connection was
443 established.
425 """ 444 """
426 self.networkWidget.addServerMessage(self.trUtf8("Info"), 445 self.networkWidget.addServerMessage(self.trUtf8("Info"),
427 self.trUtf8("Connected,logging in...")) 446 self.trUtf8("Connected,logging in..."))
428 self.networkWidget.setConnected(True) 447 self.networkWidget.setConnected(True)
429 448
433 self.__send("PASS " + serverPassword) 452 self.__send("PASS " + serverPassword)
434 nick = self.networkWidget.getNickname() 453 nick = self.networkWidget.getNickname()
435 if not nick: 454 if not nick:
436 self.__nickIndex = 0 455 self.__nickIndex = 0
437 try: 456 try:
438 nick = self.__ircNetworkManager.getIdentity(self.__identityName)\ 457 nick = self.__ircNetworkManager.getIdentity(
439 .getNickNames()[self.__nickIndex] 458 self.__identityName).getNickNames()[self.__nickIndex]
440 except IndexError: 459 except IndexError:
441 nick = "" 460 nick = ""
442 if not nick: 461 if not nick:
443 nick = self.__userName 462 nick = self.__userName
444 self.__nickName = nick 463 self.__nickName = nick
445 self.networkWidget.setNickName(nick) 464 self.networkWidget.setNickName(nick)
446 realName = self.__ircNetworkManager.getIdentity(self.__identityName).getRealName() 465 realName = self.__ircNetworkManager.getIdentity(
466 self.__identityName).getRealName()
447 if not realName: 467 if not realName:
448 realName = "eric IDE chat" 468 realName = "eric IDE chat"
449 self.__send("NICK " + nick) 469 self.__send("NICK " + nick)
450 self.__send("USER " + self.__userName + " 0 * :" + realName) 470 self.__send("USER " + self.__userName + " 0 * :" + realName)
451 471
498 break 518 break
499 else: 519 else:
500 # Oops, the message wasn't handled 520 # Oops, the message wasn't handled
501 self.networkWidget.addErrorMessage( 521 self.networkWidget.addErrorMessage(
502 self.trUtf8("Message Error"), 522 self.trUtf8("Message Error"),
503 self.trUtf8("Unknown message received from server:" 523 self.trUtf8(
504 "<br/>{0}").format(line)) 524 "Unknown message received from server:"
525 "<br/>{0}").format(line))
505 526
506 self.__updateUsersCount() 527 self.__updateUsersCount()
507 self.__buffer = "" 528 self.__buffer = ""
508 529
509 def __handleNamedMessage(self, match): 530 def __handleNamedMessage(self, match):
532 sourceNick = match.group(1) 553 sourceNick = match.group(1)
533 if not self.isChannelName(name): 554 if not self.isChannelName(name):
534 if name == self.__nickName: 555 if name == self.__nickName:
535 if sourceNick == self.__nickName: 556 if sourceNick == self.__nickName:
536 msg = self.trUtf8( 557 msg = self.trUtf8(
537 "You have set your personal modes to <b>[{0}]</b>.")\ 558 "You have set your personal modes to"
538 .format(modes) 559 " <b>[{0}]</b>.").format(modes)
539 else: 560 else:
540 msg = self.trUtf8( 561 msg = self.trUtf8(
541 "{0} has changed your personal modes to <b>[{1}]</b>.")\ 562 "{0} has changed your personal modes to"
542 .format(sourceNick, modes) 563 " <b>[{1}]</b>.").format(sourceNick, modes)
543 self.networkWidget.addServerMessage( 564 self.networkWidget.addServerMessage(
544 self.trUtf8("Mode"), msg, filterMsg=False) 565 self.trUtf8("Mode"), msg, filterMsg=False)
545 return True 566 return True
546 elif name == "PART": 567 elif name == "PART":
547 nick = match.group(1).split("!", 1)[0] 568 nick = match.group(1).split("!", 1)[0]
581 @param match reference to the match object 602 @param match reference to the match object
582 @return flag indicating, if the message was handled (boolean) 603 @return flag indicating, if the message was handled (boolean)
583 """ 604 """
584 code = int(match.group(2)) 605 code = int(match.group(2))
585 if code < 400: 606 if code < 400:
586 return self.__handleServerReply(code, match.group(1), match.group(3)) 607 return self.__handleServerReply(
608 code, match.group(1), match.group(3))
587 else: 609 else:
588 return self.__handleServerError(code, match.group(1), match.group(3)) 610 return self.__handleServerError(
611 code, match.group(1), match.group(3))
589 612
590 def __handleServerError(self, code, server, message): 613 def __handleServerError(self, code, server, message):
591 """ 614 """
592 Private slot to handle a server error reply. 615 Private slot to handle a server error reply.
593 616
635 elif code == 376: 658 elif code == 376:
636 message = self.trUtf8("End of message of the day") 659 message = self.trUtf8("End of message of the day")
637 elif code == 4: 660 elif code == 4:
638 parts = message.strip().split() 661 parts = message.strip().split()
639 message = self.trUtf8("Server {0} (Version {1}), User-Modes: {2}," 662 message = self.trUtf8("Server {0} (Version {1}), User-Modes: {2},"
640 " Channel-Modes: {3}").format(parts[1], parts[2], parts[3], parts[4]) 663 " Channel-Modes: {3}").format(
664 parts[1], parts[2], parts[3], parts[4])
641 elif code == 265: 665 elif code == 265:
642 parts = message.strip().split() 666 parts = message.strip().split()
643 message = self.trUtf8("Current users on {0}: {1}, max. {2}").format( 667 message = self.trUtf8(
644 server, parts[1], parts[2]) 668 "Current users on {0}: {1}, max. {2}").format(
669 server, parts[1], parts[2])
645 elif code == 266: 670 elif code == 266:
646 parts = message.strip().split() 671 parts = message.strip().split()
647 message = self.trUtf8("Current users on the network: {0}, max. {1}").format( 672 message = self.trUtf8(
648 parts[1], parts[2]) 673 "Current users on the network: {0}, max. {1}").format(
674 parts[1], parts[2])
649 elif code == 305: 675 elif code == 305:
650 message = self.trUtf8("You are no longer marked as being away.") 676 message = self.trUtf8("You are no longer marked as being away.")
651 elif code == 306: 677 elif code == 306:
652 message = self.trUtf8("You have been marked as being away.") 678 message = self.trUtf8("You have been marked as being away.")
653 else: 679 else:
689 if service and password: 715 if service and password:
690 self.__send("PRIVMSG " + service + " :identify " + password) 716 self.__send("PRIVMSG " + service + " :identify " + password)
691 717
692 def __autoJoinChannels(self): 718 def __autoJoinChannels(self):
693 """ 719 """
694 Private slot to join channels automatically once a server got connected. 720 Private slot to join channels automatically once a server got
721 connected.
695 """ 722 """
696 for channel in self.networkWidget.getNetworkChannels(): 723 for channel in self.networkWidget.getNetworkChannels():
697 if channel.autoJoin(): 724 if channel.autoJoin():
698 name = channel.getName() 725 name = channel.getName()
699 key = channel.getKey() 726 key = channel.getKey()
708 """ 735 """
709 if error == QAbstractSocket.RemoteHostClosedError: 736 if error == QAbstractSocket.RemoteHostClosedError:
710 # ignore this one, it's a disconnect 737 # ignore this one, it's a disconnect
711 if self.__sslErrorLock: 738 if self.__sslErrorLock:
712 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"), 739 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"),
713 self.trUtf8("""Connection to server {0} (port {1}) lost while""" 740 self.trUtf8(
714 """ waiting for user response to an SSL error.""").format( 741 """Connection to server {0} (port {1}) lost while"""
715 self.__server.getName(), self.__server.getPort())) 742 """ waiting for user response to an SSL error.""")
743 .format(self.__server.getName(), self.__server.getPort()))
716 self.__connectionState = IrcWidget.ServerDisconnected 744 self.__connectionState = IrcWidget.ServerDisconnected
717 elif error == QAbstractSocket.HostNotFoundError: 745 elif error == QAbstractSocket.HostNotFoundError:
718 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"), 746 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"),
719 self.trUtf8("The host was not found. Please check the host name" 747 self.trUtf8(
720 " and port settings.")) 748 "The host was not found. Please check the host name"
749 " and port settings."))
721 elif error == QAbstractSocket.ConnectionRefusedError: 750 elif error == QAbstractSocket.ConnectionRefusedError:
722 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"), 751 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"),
723 self.trUtf8("The connection was refused by the peer. Please check the" 752 self.trUtf8(
724 " host name and port settings.")) 753 "The connection was refused by the peer. Please check the"
754 " host name and port settings."))
725 elif error == QAbstractSocket.SslHandshakeFailedError: 755 elif error == QAbstractSocket.SslHandshakeFailedError:
726 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"), 756 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"),
727 self.trUtf8("The SSL handshake failed.")) 757 self.trUtf8("The SSL handshake failed."))
728 else: 758 else:
729 if self.__socket: 759 if self.__socket:
730 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"), 760 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"),
731 self.trUtf8("The following network error occurred:<br/>{0}").format( 761 self.trUtf8(
732 self.__socket.errorString())) 762 "The following network error occurred:<br/>{0}")
763 .format(self.__socket.errorString()))
733 else: 764 else:
734 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"), 765 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"),
735 self.trUtf8("A network error occurred.")) 766 self.trUtf8("A network error occurred."))
736 767
737 def __sslErrors(self, errors): 768 def __sslErrors(self, errors):
742 """ 773 """
743 ignored, defaultChanged = self.__sslErrorHandler.sslErrors( 774 ignored, defaultChanged = self.__sslErrorHandler.sslErrors(
744 errors, self.__server.getName(), self.__server.getPort()) 775 errors, self.__server.getName(), self.__server.getPort())
745 if ignored == E5SslErrorHandler.NotIgnored: 776 if ignored == E5SslErrorHandler.NotIgnored:
746 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"), 777 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"),
747 self.trUtf8("""Could not connect to {0} (port {1}) using an SSL""" 778 self.trUtf8(
748 """ encrypted connection. Either the server does not""" 779 """Could not connect to {0} (port {1}) using an SSL"""
749 """ support SSL (did you use the correct port?) or""" 780 """ encrypted connection. Either the server does not"""
750 """ you rejected the certificate.""").format( 781 """ support SSL (did you use the correct port?) or"""
782 """ you rejected the certificate.""").format(
751 self.__server.getName(), self.__server.getPort())) 783 self.__server.getName(), self.__server.getPort()))
752 self.__socket.close() 784 self.__socket.close()
753 else: 785 else:
754 if defaultChanged: 786 if defaultChanged:
755 self.__socket.setSslConfiguration( 787 self.__socket.setSslConfiguration(
756 QSslConfiguration.defaultConfiguration()) 788 QSslConfiguration.defaultConfiguration())
757 if ignored == E5SslErrorHandler.UserIgnored: 789 if ignored == E5SslErrorHandler.UserIgnored:
758 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"), 790 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"),
759 self.trUtf8("""The SSL certificate for the server {0} (port {1})""" 791 self.trUtf8(
760 """ failed the authenticity check. SSL errors""" 792 """The SSL certificate for the server {0} (port {1})"""
761 """ were accepted by you.""").format( 793 """ failed the authenticity check. SSL errors"""
794 """ were accepted by you.""").format(
762 self.__server.getName(), self.__server.getPort())) 795 self.__server.getName(), self.__server.getPort()))
763 if self.__connectionState == IrcWidget.ServerConnecting: 796 if self.__connectionState == IrcWidget.ServerConnecting:
764 self.__socket.ignoreSslErrors() 797 self.__socket.ignoreSslErrors()
765 798
766 def __setUserPrivilegePrefix(self, prefix1, prefix2): 799 def __setUserPrivilegePrefix(self, prefix1, prefix2):
817 self.__sendCtcpReply(match.group(1), "VERSION " + msg) 850 self.__sendCtcpReply(match.group(1), "VERSION " + msg)
818 elif ctcpRequest == "ping": 851 elif ctcpRequest == "ping":
819 self.networkWidget.addServerMessage(self.trUtf8("CTCP"), 852 self.networkWidget.addServerMessage(self.trUtf8("CTCP"),
820 self.trUtf8("Received CTCP-PING request from {0}," 853 self.trUtf8("Received CTCP-PING request from {0},"
821 " sending answer.").format(match.group(1))) 854 " sending answer.").format(match.group(1)))
822 self.__sendCtcpReply(match.group(1), "PING {0}".format(ctcpArg)) 855 self.__sendCtcpReply(
856 match.group(1), "PING {0}".format(ctcpArg))
823 elif ctcpRequest == "clientinfo": 857 elif ctcpRequest == "clientinfo":
824 self.networkWidget.addServerMessage(self.trUtf8("CTCP"), 858 self.networkWidget.addServerMessage(self.trUtf8("CTCP"),
825 self.trUtf8("Received CTCP-CLIENTINFO request from {0}," 859 self.trUtf8("Received CTCP-CLIENTINFO request from {0},"
826 " sending answer.").format(match.group(1))) 860 " sending answer.").format(match.group(1)))
827 self.__sendCtcpReply(match.group(1), 861 self.__sendCtcpReply(match.group(1),
828 "CLIENTINFO CLIENTINFO PING VERSION") 862 "CLIENTINFO CLIENTINFO PING VERSION")
829 else: 863 else:
830 self.networkWidget.addServerMessage(self.trUtf8("CTCP"), 864 self.networkWidget.addServerMessage(self.trUtf8("CTCP"),
831 self.trUtf8("Received unknown CTCP-{0} request from {1}.").format( 865 self.trUtf8(
866 "Received unknown CTCP-{0} request from {1}.").format(
832 ctcpRequest, match.group(1))) 867 ctcpRequest, match.group(1)))
833 return True 868 return True
834 869
835 return False 870 return False
836 871
852 try: 887 try:
853 nick = self.__ircNetworkManager.getIdentity(self.__identityName)\ 888 nick = self.__ircNetworkManager.getIdentity(self.__identityName)\
854 .getNickNames()[self.__nickIndex] 889 .getNickNames()[self.__nickIndex]
855 self.__nickName = nick 890 self.__nickName = nick
856 except IndexError: 891 except IndexError:
857 self.networkWidget.addServerMessage(self.trUtf8("Critical"), 892 self.networkWidget.addServerMessage(
858 self.trUtf8("No nickname acceptable to the server configured" 893 self.trUtf8("Critical"),
859 " for <b>{0}</b>. Disconnecting...").format(self.__userName), 894 self.trUtf8(
860 filterMsg=False) 895 "No nickname acceptable to the server configured"
896 " for <b>{0}</b>. Disconnecting...").format(
897 self.__userName),
898 filterMsg=False)
861 self.__connectNetwork("", False, silent=True) 899 self.__connectNetwork("", False, silent=True)
862 self.__nickName = "" 900 self.__nickName = ""
863 self.__nickIndex = -1 901 self.__nickIndex = -1
864 return 902 return
865 903
910 Private slot handling the change of the away state. 948 Private slot handling the change of the away state.
911 949
912 @param isAway flag indicating the current away state (boolean) 950 @param isAway flag indicating the current away state (boolean)
913 """ 951 """
914 if isAway and self.__identityName: 952 if isAway and self.__identityName:
915 identity = self.__ircNetworkManager.getIdentity(self.__identityName) 953 identity = self.__ircNetworkManager.getIdentity(
954 self.__identityName)
916 if identity.rememberAwayPosition(): 955 if identity.rememberAwayPosition():
917 for channel in self.__channelList: 956 for channel in self.__channelList:
918 channel.setMarkerLine() 957 channel.setMarkerLine()

eric ide

mercurial