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, "") |
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 |
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() |