Network/IRC/IrcWidget.py

branch
Py2 comp.
changeset 3057
10516539f238
parent 2677
3d4277929fb3
parent 2992
dbdf27746da5
child 3058
0a02c433f52d
equal deleted inserted replaced
3056:9986ec0e559a 3057:10516539f238
61 61
62 from .IrcNetworkManager import IrcNetworkManager 62 from .IrcNetworkManager import IrcNetworkManager
63 self.__ircNetworkManager = IrcNetworkManager(self) 63 self.__ircNetworkManager = IrcNetworkManager(self)
64 64
65 self.__leaveButton = QToolButton(self) 65 self.__leaveButton = QToolButton(self)
66 self.__leaveButton.setIcon(UI.PixmapCache.getIcon("ircCloseChannel.png")) 66 self.__leaveButton.setIcon(
67 self.__leaveButton.setToolTip(self.trUtf8("Press to leave the current channel")) 67 UI.PixmapCache.getIcon("ircCloseChannel.png"))
68 self.__leaveButton.setToolTip(
69 self.trUtf8("Press to leave the current channel"))
68 self.__leaveButton.clicked[()].connect(self.__leaveChannel) 70 self.__leaveButton.clicked[()].connect(self.__leaveChannel)
69 self.__leaveButton.setEnabled(False) 71 self.__leaveButton.setEnabled(False)
70 self.channelsWidget.setCornerWidget(self.__leaveButton, Qt.BottomRightCorner) 72 self.channelsWidget.setCornerWidget(
73 self.__leaveButton, Qt.BottomRightCorner)
71 self.channelsWidget.setTabsClosable(False) 74 self.channelsWidget.setTabsClosable(False)
72 if not isMacPlatform(): 75 if not isMacPlatform():
73 self.channelsWidget.setTabPosition(QTabWidget.South) 76 self.channelsWidget.setTabPosition(QTabWidget.South)
74 77
75 height = self.height() 78 height = self.height()
97 else: 100 else:
98 self.__sslErrorHandler = None 101 self.__sslErrorHandler = None
99 102
100 self.__patterns = [ 103 self.__patterns = [
101 # :foo_!n=foo@foohost.bar.net PRIVMSG bar_ :some long message 104 # :foo_!n=foo@foohost.bar.net PRIVMSG bar_ :some long message
102 (re.compile(r":([^!]+)!([^ ]+)\sPRIVMSG\s([^ ]+)\s:(.*)"), self.__query), 105 (re.compile(r":([^!]+)!([^ ]+)\sPRIVMSG\s([^ ]+)\s:(.*)"),
106 self.__query),
103 # :foo.bar.net COMMAND some message 107 # :foo.bar.net COMMAND some message
104 (re.compile(r""":([^ ]+)\s+([A-Z]+)\s+(.+)"""), self.__handleNamedMessage), 108 (re.compile(r""":([^ ]+)\s+([A-Z]+)\s+(.+)"""),
109 self.__handleNamedMessage),
105 # :foo.bar.net 123 * :info 110 # :foo.bar.net 123 * :info
106 (re.compile(r""":([^ ]+)\s+(\d{3})\s+(.+)"""), self.__handleNumericMessage), 111 (re.compile(r""":([^ ]+)\s+(\d{3})\s+(.+)"""),
112 self.__handleNumericMessage),
107 # PING :ping message 113 # PING :ping message
108 (re.compile(r"""PING\s+:(.*)"""), self.__ping), 114 (re.compile(r"""PING\s+:(.*)"""), self.__ping),
109 ] 115 ]
110 self.__prefixRe = re.compile(r""".*\sPREFIX=\((.*)\)([^ ]+).*""") 116 self.__prefixRe = re.compile(r""".*\sPREFIX=\((.*)\)([^ ]+).*""")
111 self.__chanTypesRe = re.compile(r""".*\sCHANTYPES=([^ ]+).*""") 117 self.__chanTypesRe = re.compile(r""".*\sCHANTYPES=([^ ]+).*""")
135 """ 141 """
136 if self.__server: 142 if self.__server:
137 if Preferences.getIrc("AskOnShutdown"): 143 if Preferences.getIrc("AskOnShutdown"):
138 ok = E5MessageBox.yesNo(self, 144 ok = E5MessageBox.yesNo(self,
139 self.trUtf8("Disconnect from Server"), 145 self.trUtf8("Disconnect from Server"),
140 self.trUtf8("""<p>Do you really want to disconnect from""" 146 self.trUtf8(
141 """ <b>{0}</b>?</p><p>All channels will be closed.""" 147 """<p>Do you really want to disconnect from"""
142 """</p>""").format(self.__server.getName())) 148 """ <b>{0}</b>?</p><p>All channels will be closed."""
149 """</p>""").format(self.__server.getName()))
143 else: 150 else:
144 ok = True 151 ok = True
145 if ok: 152 if ok:
146 self.__socket.blockSignals(True) 153 self.__socket.blockSignals(True)
147 154
174 if connect: 181 if connect:
175 network = self.__ircNetworkManager.getNetwork(name) 182 network = self.__ircNetworkManager.getNetwork(name)
176 if network: 183 if network:
177 self.__server = network.getServer() 184 self.__server = network.getServer()
178 self.__identityName = network.getIdentityName() 185 self.__identityName = network.getIdentityName()
179 identity = self.__ircNetworkManager.getIdentity(self.__identityName) 186 identity = self.__ircNetworkManager.getIdentity(
187 self.__identityName)
180 self.__userName = identity.getIdent() 188 self.__userName = identity.getIdent()
181 self.__quitMessage = identity.getQuitMessage() 189 self.__quitMessage = identity.getQuitMessage()
182 if self.__server: 190 if self.__server:
183 useSSL = self.__server.useSSL() 191 useSSL = self.__server.useSSL()
184 if useSSL and not SSL_AVAILABLE: 192 if useSSL and not SSL_AVAILABLE:
185 E5MessageBox.critical(self, 193 E5MessageBox.critical(self,
186 self.trUtf8("SSL Connection"), 194 self.trUtf8("SSL Connection"),
187 self.trUtf8("""An encrypted connection to the IRC network""" 195 self.trUtf8(
188 """ was requested but SSL is not available.""" 196 """An encrypted connection to the IRC"""
189 """ Please change the server configuration.""")) 197 """ network was requested but SSL is not"""
198 """ available. Please change the server"""
199 """ configuration."""))
190 return 200 return
191 201
192 if useSSL: 202 if useSSL:
193 # create SSL socket 203 # create SSL socket
194 self.__socket = QSslSocket(self) 204 self.__socket = QSslSocket(self)
203 self.__socket.readyRead.connect(self.__readyRead) 213 self.__socket.readyRead.connect(self.__readyRead)
204 self.__socket.error.connect(self.__tcpError) 214 self.__socket.error.connect(self.__tcpError)
205 215
206 self.__connectionState = IrcWidget.ServerConnecting 216 self.__connectionState = IrcWidget.ServerConnecting
207 if useSSL: 217 if useSSL:
208 self.networkWidget.addServerMessage(self.trUtf8("Info"), 218 self.networkWidget.addServerMessage(
209 self.trUtf8("Looking for server {0} (port {1}) using" 219 self.trUtf8("Info"),
210 " an SSL encrypted connection...").format( 220 self.trUtf8("Looking for server {0} (port {1})"
211 self.__server.getName(), self.__server.getPort())) 221 " using an SSL encrypted connection"
212 self.__socket.connectToHostEncrypted(self.__server.getName(), 222 "...").format(self.__server.getName(),
213 self.__server.getPort()) 223 self.__server.getPort()))
224 self.__socket.connectToHostEncrypted(
225 self.__server.getName(), self.__server.getPort())
214 else: 226 else:
215 self.networkWidget.addServerMessage(self.trUtf8("Info"), 227 self.networkWidget.addServerMessage(
216 self.trUtf8("Looking for server {0} (port {1})...").format( 228 self.trUtf8("Info"),
217 self.__server.getName(), self.__server.getPort())) 229 self.trUtf8(
230 "Looking for server {0} (port {1})...").format(
231 self.__server.getName(),
232 self.__server.getPort()))
218 self.__socket.connectToHost(self.__server.getName(), 233 self.__socket.connectToHost(self.__server.getName(),
219 self.__server.getPort()) 234 self.__server.getPort())
220 else: 235 else:
221 if silent: 236 if silent:
222 ok = True 237 ok = True
303 318
304 def __query(self, match): 319 def __query(self, match):
305 """ 320 """
306 Private method to handle a new private connection. 321 Private method to handle a new private connection.
307 322
308 @param reference to the match object 323 @param match reference to the match object
309 @return flag indicating, if the message was handled (boolean) 324 @return flag indicating, if the message was handled (boolean)
310 """ 325 """
311 # group(1) sender user name 326 # group(1) sender user name
312 # group(2) sender user@host 327 # group(2) sender user@host
313 # group(3) target nick 328 # group(3) target nick
317 332
318 self.__openPrivate(match.group(1)) 333 self.__openPrivate(match.group(1))
319 # the above call sets the new channel as the current widget 334 # the above call sets the new channel as the current widget
320 channel = self.channelsWidget.currentWidget() 335 channel = self.channelsWidget.currentWidget()
321 channel.addMessage(match.group(1), match.group(4)) 336 channel.addMessage(match.group(1), match.group(4))
322 channel.setPrivateInfo("{0} - {1}".format(match.group(1), match.group(2))) 337 channel.setPrivateInfo(
338 "{0} - {1}".format(match.group(1), match.group(2)))
323 339
324 return True 340 return True
325 341
326 @pyqtSlot(str) 342 @pyqtSlot(str)
327 def __openPrivate(self, name): 343 def __openPrivate(self, name):
377 393
378 @param name name of the closed channel (string) 394 @param name name of the closed channel (string)
379 """ 395 """
380 for channel in self.__channelList: 396 for channel in self.__channelList:
381 if channel.name() == name: 397 if channel.name() == name:
382 self.channelsWidget.removeTab(self.channelsWidget.indexOf(channel)) 398 self.channelsWidget.removeTab(
399 self.channelsWidget.indexOf(channel))
383 self.__channelList.remove(channel) 400 self.__channelList.remove(channel)
384 channel.deleteLater() 401 channel.deleteLater()
385 402
386 if self.channelsWidget.count() == 0: 403 if self.channelsWidget.count() == 0:
387 self.channelsWidget.addTab(self.__emptyLabel, "") 404 self.channelsWidget.addTab(self.__emptyLabel, "")
405 Private slot to send data to the IRC server. 422 Private slot to send data to the IRC server.
406 423
407 @param data data to be sent (string) 424 @param data data to be sent (string)
408 """ 425 """
409 if self.__socket: 426 if self.__socket:
410 self.__socket.write(QByteArray("{0}\r\n".format(data).encode("utf-8"))) 427 self.__socket.write(
428 QByteArray("{0}\r\n".format(data).encode("utf-8")))
411 429
412 def __sendCtcpReply(self, receiver, text): 430 def __sendCtcpReply(self, receiver, text):
413 """ 431 """
414 Private slot to send a CTCP reply. 432 Private slot to send a CTCP reply.
415 433
425 self.networkWidget.addServerMessage(self.trUtf8("Info"), 443 self.networkWidget.addServerMessage(self.trUtf8("Info"),
426 self.trUtf8("Server found,connecting...")) 444 self.trUtf8("Server found,connecting..."))
427 445
428 def __hostConnected(self): 446 def __hostConnected(self):
429 """ 447 """
430 Private slot to log in to the server after the connection was established. 448 Private slot to log in to the server after the connection was
449 established.
431 """ 450 """
432 self.networkWidget.addServerMessage(self.trUtf8("Info"), 451 self.networkWidget.addServerMessage(self.trUtf8("Info"),
433 self.trUtf8("Connected,logging in...")) 452 self.trUtf8("Connected,logging in..."))
434 self.networkWidget.setConnected(True) 453 self.networkWidget.setConnected(True)
435 454
439 self.__send("PASS " + serverPassword) 458 self.__send("PASS " + serverPassword)
440 nick = self.networkWidget.getNickname() 459 nick = self.networkWidget.getNickname()
441 if not nick: 460 if not nick:
442 self.__nickIndex = 0 461 self.__nickIndex = 0
443 try: 462 try:
444 nick = self.__ircNetworkManager.getIdentity(self.__identityName)\ 463 nick = self.__ircNetworkManager.getIdentity(
445 .getNickNames()[self.__nickIndex] 464 self.__identityName).getNickNames()[self.__nickIndex]
446 except IndexError: 465 except IndexError:
447 nick = "" 466 nick = ""
448 if not nick: 467 if not nick:
449 nick = self.__userName 468 nick = self.__userName
450 self.__nickName = nick 469 self.__nickName = nick
451 self.networkWidget.setNickName(nick) 470 self.networkWidget.setNickName(nick)
452 realName = self.__ircNetworkManager.getIdentity(self.__identityName).getRealName() 471 realName = self.__ircNetworkManager.getIdentity(
472 self.__identityName).getRealName()
453 if not realName: 473 if not realName:
454 realName = "eric IDE chat" 474 realName = "eric IDE chat"
455 self.__send("NICK " + nick) 475 self.__send("NICK " + nick)
456 self.__send("USER " + self.__userName + " 0 * :" + realName) 476 self.__send("USER " + self.__userName + " 0 * :" + realName)
457 477
504 break 524 break
505 else: 525 else:
506 # Oops, the message wasn't handled 526 # Oops, the message wasn't handled
507 self.networkWidget.addErrorMessage( 527 self.networkWidget.addErrorMessage(
508 self.trUtf8("Message Error"), 528 self.trUtf8("Message Error"),
509 self.trUtf8("Unknown message received from server:" 529 self.trUtf8(
510 "<br/>{0}").format(line)) 530 "Unknown message received from server:"
531 "<br/>{0}").format(line))
511 532
512 self.__updateUsersCount() 533 self.__updateUsersCount()
513 self.__buffer = "" 534 self.__buffer = ""
514 535
515 def __handleNamedMessage(self, match): 536 def __handleNamedMessage(self, match):
516 """ 537 """
517 Private method to handle a server message containing a message name. 538 Private method to handle a server message containing a message name.
518 539
519 @param reference to the match object 540 @param match reference to the match object
520 @return flag indicating, if the message was handled (boolean) 541 @return flag indicating, if the message was handled (boolean)
521 """ 542 """
522 name = match.group(2) 543 name = match.group(2)
523 if name == "NOTICE": 544 if name == "NOTICE":
524 try: 545 try:
538 sourceNick = match.group(1) 559 sourceNick = match.group(1)
539 if not self.isChannelName(name): 560 if not self.isChannelName(name):
540 if name == self.__nickName: 561 if name == self.__nickName:
541 if sourceNick == self.__nickName: 562 if sourceNick == self.__nickName:
542 msg = self.trUtf8( 563 msg = self.trUtf8(
543 "You have set your personal modes to <b>[{0}]</b>.")\ 564 "You have set your personal modes to"
544 .format(modes) 565 " <b>[{0}]</b>.").format(modes)
545 else: 566 else:
546 msg = self.trUtf8( 567 msg = self.trUtf8(
547 "{0} has changed your personal modes to <b>[{1}]</b>.")\ 568 "{0} has changed your personal modes to"
548 .format(sourceNick, modes) 569 " <b>[{1}]</b>.").format(sourceNick, modes)
549 self.networkWidget.addServerMessage( 570 self.networkWidget.addServerMessage(
550 self.trUtf8("Mode"), msg, filterMsg=False) 571 self.trUtf8("Mode"), msg, filterMsg=False)
551 return True 572 return True
552 elif name == "PART": 573 elif name == "PART":
553 nick = match.group(1).split("!", 1)[0] 574 nick = match.group(1).split("!", 1)[0]
582 603
583 def __handleNumericMessage(self, match): 604 def __handleNumericMessage(self, match):
584 """ 605 """
585 Private method to handle a server message containing a numeric code. 606 Private method to handle a server message containing a numeric code.
586 607
587 @param reference to the match object 608 @param match reference to the match object
588 @return flag indicating, if the message was handled (boolean) 609 @return flag indicating, if the message was handled (boolean)
589 """ 610 """
590 code = int(match.group(2)) 611 code = int(match.group(2))
591 if code < 400: 612 if code < 400:
592 return self.__handleServerReply(code, match.group(1), match.group(3)) 613 return self.__handleServerReply(
614 code, match.group(1), match.group(3))
593 else: 615 else:
594 return self.__handleServerError(code, match.group(1), match.group(3)) 616 return self.__handleServerError(
617 code, match.group(1), match.group(3))
595 618
596 def __handleServerError(self, code, server, message): 619 def __handleServerError(self, code, server, message):
597 """ 620 """
598 Private slot to handle a server error reply. 621 Private slot to handle a server error reply.
599 622
641 elif code == 376: 664 elif code == 376:
642 message = self.trUtf8("End of message of the day") 665 message = self.trUtf8("End of message of the day")
643 elif code == 4: 666 elif code == 4:
644 parts = message.strip().split() 667 parts = message.strip().split()
645 message = self.trUtf8("Server {0} (Version {1}), User-Modes: {2}," 668 message = self.trUtf8("Server {0} (Version {1}), User-Modes: {2},"
646 " Channel-Modes: {3}").format(parts[1], parts[2], parts[3], parts[4]) 669 " Channel-Modes: {3}").format(
670 parts[1], parts[2], parts[3], parts[4])
647 elif code == 265: 671 elif code == 265:
648 parts = message.strip().split() 672 parts = message.strip().split()
649 message = self.trUtf8("Current users on {0}: {1}, max. {2}").format( 673 message = self.trUtf8(
650 server, parts[1], parts[2]) 674 "Current users on {0}: {1}, max. {2}").format(
675 server, parts[1], parts[2])
651 elif code == 266: 676 elif code == 266:
652 parts = message.strip().split() 677 parts = message.strip().split()
653 message = self.trUtf8("Current users on the network: {0}, max. {1}").format( 678 message = self.trUtf8(
654 parts[1], parts[2]) 679 "Current users on the network: {0}, max. {1}").format(
680 parts[1], parts[2])
655 elif code == 305: 681 elif code == 305:
656 message = self.trUtf8("You are no longer marked as being away.") 682 message = self.trUtf8("You are no longer marked as being away.")
657 elif code == 306: 683 elif code == 306:
658 message = self.trUtf8("You have been marked as being away.") 684 message = self.trUtf8("You have been marked as being away.")
659 else: 685 else:
695 if service and password: 721 if service and password:
696 self.__send("PRIVMSG " + service + " :identify " + password) 722 self.__send("PRIVMSG " + service + " :identify " + password)
697 723
698 def __autoJoinChannels(self): 724 def __autoJoinChannels(self):
699 """ 725 """
700 Private slot to join channels automatically once a server got connected. 726 Private slot to join channels automatically once a server got
727 connected.
701 """ 728 """
702 for channel in self.networkWidget.getNetworkChannels(): 729 for channel in self.networkWidget.getNetworkChannels():
703 if channel.autoJoin(): 730 if channel.autoJoin():
704 name = channel.getName() 731 name = channel.getName()
705 key = channel.getKey() 732 key = channel.getKey()
714 """ 741 """
715 if error == QAbstractSocket.RemoteHostClosedError: 742 if error == QAbstractSocket.RemoteHostClosedError:
716 # ignore this one, it's a disconnect 743 # ignore this one, it's a disconnect
717 if self.__sslErrorLock: 744 if self.__sslErrorLock:
718 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"), 745 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"),
719 self.trUtf8("""Connection to server {0} (port {1}) lost while""" 746 self.trUtf8(
720 """ waiting for user response to an SSL error.""").format( 747 """Connection to server {0} (port {1}) lost while"""
721 self.__server.getName(), self.__server.getPort())) 748 """ waiting for user response to an SSL error.""")
749 .format(self.__server.getName(), self.__server.getPort()))
722 self.__connectionState = IrcWidget.ServerDisconnected 750 self.__connectionState = IrcWidget.ServerDisconnected
723 elif error == QAbstractSocket.HostNotFoundError: 751 elif error == QAbstractSocket.HostNotFoundError:
724 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"), 752 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"),
725 self.trUtf8("The host was not found. Please check the host name" 753 self.trUtf8(
726 " and port settings.")) 754 "The host was not found. Please check the host name"
755 " and port settings."))
727 elif error == QAbstractSocket.ConnectionRefusedError: 756 elif error == QAbstractSocket.ConnectionRefusedError:
728 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"), 757 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"),
729 self.trUtf8("The connection was refused by the peer. Please check the" 758 self.trUtf8(
730 " host name and port settings.")) 759 "The connection was refused by the peer. Please check the"
760 " host name and port settings."))
731 elif error == QAbstractSocket.SslHandshakeFailedError: 761 elif error == QAbstractSocket.SslHandshakeFailedError:
732 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"), 762 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"),
733 self.trUtf8("The SSL handshake failed.")) 763 self.trUtf8("The SSL handshake failed."))
734 else: 764 else:
735 if self.__socket: 765 if self.__socket:
736 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"), 766 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"),
737 self.trUtf8("The following network error occurred:<br/>{0}").format( 767 self.trUtf8(
738 self.__socket.errorString())) 768 "The following network error occurred:<br/>{0}")
769 .format(self.__socket.errorString()))
739 else: 770 else:
740 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"), 771 self.networkWidget.addErrorMessage(self.trUtf8("Socket Error"),
741 self.trUtf8("A network error occurred.")) 772 self.trUtf8("A network error occurred."))
742 773
743 def __sslErrors(self, errors): 774 def __sslErrors(self, errors):
748 """ 779 """
749 ignored, defaultChanged = self.__sslErrorHandler.sslErrors( 780 ignored, defaultChanged = self.__sslErrorHandler.sslErrors(
750 errors, self.__server.getName(), self.__server.getPort()) 781 errors, self.__server.getName(), self.__server.getPort())
751 if ignored == E5SslErrorHandler.NotIgnored: 782 if ignored == E5SslErrorHandler.NotIgnored:
752 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"), 783 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"),
753 self.trUtf8("""Could not connect to {0} (port {1}) using an SSL""" 784 self.trUtf8(
754 """ encrypted connection. Either the server does not""" 785 """Could not connect to {0} (port {1}) using an SSL"""
755 """ support SSL (did you use the correct port?) or""" 786 """ encrypted connection. Either the server does not"""
756 """ you rejected the certificate.""").format( 787 """ support SSL (did you use the correct port?) or"""
788 """ you rejected the certificate.""").format(
757 self.__server.getName(), self.__server.getPort())) 789 self.__server.getName(), self.__server.getPort()))
758 self.__socket.close() 790 self.__socket.close()
759 else: 791 else:
760 if defaultChanged: 792 if defaultChanged:
761 self.__socket.setSslConfiguration( 793 self.__socket.setSslConfiguration(
762 QSslConfiguration.defaultConfiguration()) 794 QSslConfiguration.defaultConfiguration())
763 if ignored == E5SslErrorHandler.UserIgnored: 795 if ignored == E5SslErrorHandler.UserIgnored:
764 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"), 796 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"),
765 self.trUtf8("""The SSL certificate for the server {0} (port {1})""" 797 self.trUtf8(
766 """ failed the authenticity check. SSL errors""" 798 """The SSL certificate for the server {0} (port {1})"""
767 """ were accepted by you.""").format( 799 """ failed the authenticity check. SSL errors"""
800 """ were accepted by you.""").format(
768 self.__server.getName(), self.__server.getPort())) 801 self.__server.getName(), self.__server.getPort()))
769 if self.__connectionState == IrcWidget.ServerConnecting: 802 if self.__connectionState == IrcWidget.ServerConnecting:
770 self.__socket.ignoreSslErrors() 803 self.__socket.ignoreSslErrors()
771 804
772 def __setUserPrivilegePrefix(self, prefix1, prefix2): 805 def __setUserPrivilegePrefix(self, prefix1, prefix2):
785 818
786 def __ping(self, match): 819 def __ping(self, match):
787 """ 820 """
788 Private method to handle a PING message. 821 Private method to handle a PING message.
789 822
790 @param reference to the match object 823 @param match reference to the match object
791 @return flag indicating, if the message was handled (boolean) 824 @return flag indicating, if the message was handled (boolean)
792 """ 825 """
793 self.__send("PONG " + match.group(1)) 826 self.__send("PONG " + match.group(1))
794 return True 827 return True
795 828
796 def __handleCtcp(self, match): 829 def __handleCtcp(self, match):
797 """ 830 """
798 Private method to handle a CTCP command. 831 Private method to handle a CTCP command.
799 832
800 @param reference to the match object 833 @param match reference to the match object
801 @return flag indicating, if the message was handled (boolean) 834 @return flag indicating, if the message was handled (boolean)
802 """ 835 """
803 # group(1) sender user name 836 # group(1) sender user name
804 # group(2) sender user@host 837 # group(2) sender user@host
805 # group(3) target nick 838 # group(3) target nick
823 self.__sendCtcpReply(match.group(1), "VERSION " + msg) 856 self.__sendCtcpReply(match.group(1), "VERSION " + msg)
824 elif ctcpRequest == "ping": 857 elif ctcpRequest == "ping":
825 self.networkWidget.addServerMessage(self.trUtf8("CTCP"), 858 self.networkWidget.addServerMessage(self.trUtf8("CTCP"),
826 self.trUtf8("Received CTCP-PING request from {0}," 859 self.trUtf8("Received CTCP-PING request from {0},"
827 " sending answer.").format(match.group(1))) 860 " sending answer.").format(match.group(1)))
828 self.__sendCtcpReply(match.group(1), "PING {0}".format(ctcpArg)) 861 self.__sendCtcpReply(
862 match.group(1), "PING {0}".format(ctcpArg))
829 elif ctcpRequest == "clientinfo": 863 elif ctcpRequest == "clientinfo":
830 self.networkWidget.addServerMessage(self.trUtf8("CTCP"), 864 self.networkWidget.addServerMessage(self.trUtf8("CTCP"),
831 self.trUtf8("Received CTCP-CLIENTINFO request from {0}," 865 self.trUtf8("Received CTCP-CLIENTINFO request from {0},"
832 " sending answer.").format(match.group(1))) 866 " sending answer.").format(match.group(1)))
833 self.__sendCtcpReply(match.group(1), 867 self.__sendCtcpReply(match.group(1),
834 "CLIENTINFO CLIENTINFO PING VERSION") 868 "CLIENTINFO CLIENTINFO PING VERSION")
835 else: 869 else:
836 self.networkWidget.addServerMessage(self.trUtf8("CTCP"), 870 self.networkWidget.addServerMessage(self.trUtf8("CTCP"),
837 self.trUtf8("Received unknown CTCP-{0} request from {1}.").format( 871 self.trUtf8(
872 "Received unknown CTCP-{0} request from {1}.").format(
838 ctcpRequest, match.group(1))) 873 ctcpRequest, match.group(1)))
839 return True 874 return True
840 875
841 return False 876 return False
842 877
858 try: 893 try:
859 nick = self.__ircNetworkManager.getIdentity(self.__identityName)\ 894 nick = self.__ircNetworkManager.getIdentity(self.__identityName)\
860 .getNickNames()[self.__nickIndex] 895 .getNickNames()[self.__nickIndex]
861 self.__nickName = nick 896 self.__nickName = nick
862 except IndexError: 897 except IndexError:
863 self.networkWidget.addServerMessage(self.trUtf8("Critical"), 898 self.networkWidget.addServerMessage(
864 self.trUtf8("No nickname acceptable to the server configured" 899 self.trUtf8("Critical"),
865 " for <b>{0}</b>. Disconnecting...").format(self.__userName), 900 self.trUtf8(
866 filterMsg=False) 901 "No nickname acceptable to the server configured"
902 " for <b>{0}</b>. Disconnecting...").format(
903 self.__userName),
904 filterMsg=False)
867 self.__connectNetwork("", False, silent=True) 905 self.__connectNetwork("", False, silent=True)
868 self.__nickName = "" 906 self.__nickName = ""
869 self.__nickIndex = -1 907 self.__nickIndex = -1
870 return 908 return
871 909
896 """ 934 """
897 self.__channelTypePrefixes = prefixes 935 self.__channelTypePrefixes = prefixes
898 936
899 def isChannelName(self, name): 937 def isChannelName(self, name):
900 """ 938 """
901 PublicisChannelName method to check, if the given name is a channel name. 939 Public method to check, if the given name is a channel name.
902 940
941 @param name name to check (string)
903 @return flag indicating a channel name (boolean) 942 @return flag indicating a channel name (boolean)
904 """ 943 """
905 if not name: 944 if not name:
906 return False 945 return False
907 946
915 Private slot handling the change of the away state. 954 Private slot handling the change of the away state.
916 955
917 @param isAway flag indicating the current away state (boolean) 956 @param isAway flag indicating the current away state (boolean)
918 """ 957 """
919 if isAway and self.__identityName: 958 if isAway and self.__identityName:
920 identity = self.__ircNetworkManager.getIdentity(self.__identityName) 959 identity = self.__ircNetworkManager.getIdentity(
960 self.__identityName)
921 if identity.rememberAwayPosition(): 961 if identity.rememberAwayPosition():
922 for channel in self.__channelList: 962 for channel in self.__channelList:
923 channel.setMarkerLine() 963 channel.setMarkerLine()

eric ide

mercurial