5 |
5 |
6 """ |
6 """ |
7 Module implementing the IRC window. |
7 Module implementing the IRC window. |
8 """ |
8 """ |
9 |
9 |
|
10 import enum |
10 import logging |
11 import logging |
11 import re |
12 import re |
12 |
13 |
13 from PyQt6.QtCore import QByteArray, QDateTime, Qt, QTimer, pyqtSignal, pyqtSlot |
14 from PyQt6.QtCore import QByteArray, QDateTime, Qt, QTimer, pyqtSignal, pyqtSlot |
14 from PyQt6.QtNetwork import QAbstractSocket, QTcpSocket |
15 from PyQt6.QtNetwork import QAbstractSocket, QTcpSocket |
34 |
35 |
35 from .IrcNetworkManager import IrcNetworkManager |
36 from .IrcNetworkManager import IrcNetworkManager |
36 from .Ui_IrcWidget import Ui_IrcWidget |
37 from .Ui_IrcWidget import Ui_IrcWidget |
37 |
38 |
38 |
39 |
|
40 class IrcConnectionState(enum.Enum): |
|
41 """ |
|
42 Class defining the connection states. |
|
43 """ |
|
44 |
|
45 Disconnected = 1 |
|
46 Connected = 2 |
|
47 Connecting = 3 |
|
48 |
|
49 |
39 class IrcWidget(QWidget, Ui_IrcWidget): |
50 class IrcWidget(QWidget, Ui_IrcWidget): |
40 """ |
51 """ |
41 Class implementing the IRC window. |
52 Class implementing the IRC window. |
42 |
53 |
43 @signal autoConnected() emitted after an automatic connection was initiated |
54 @signal autoConnected() emitted after an automatic connection was initiated |
44 """ |
55 """ |
45 |
56 |
46 autoConnected = pyqtSignal() |
57 autoConnected = pyqtSignal() |
47 |
|
48 # TODO: change this to an enum |
|
49 ServerDisconnected = 1 |
|
50 ServerConnected = 2 |
|
51 ServerConnecting = 3 |
|
52 |
58 |
53 def __init__(self, parent=None): |
59 def __init__(self, parent=None): |
54 """ |
60 """ |
55 Constructor |
61 Constructor |
56 |
62 |
214 self.__socket.hostFound.connect(self.__hostFound) |
220 self.__socket.hostFound.connect(self.__hostFound) |
215 self.__socket.disconnected.connect(self.__hostDisconnected) |
221 self.__socket.disconnected.connect(self.__hostDisconnected) |
216 self.__socket.readyRead.connect(self.__readyRead) |
222 self.__socket.readyRead.connect(self.__readyRead) |
217 self.__socket.errorOccurred.connect(self.__tcpError) |
223 self.__socket.errorOccurred.connect(self.__tcpError) |
218 |
224 |
219 self.__connectionState = IrcWidget.ServerConnecting |
225 self.__connectionState = IrcConnectionState.Connecting |
220 if useSSL: |
226 if useSSL: |
221 self.networkWidget.addServerMessage( |
227 self.networkWidget.addServerMessage( |
222 self.tr("Info"), |
228 self.tr("Info"), |
223 self.tr( |
229 self.tr( |
224 "Looking for server {0} (port {1})" |
230 "Looking for server {0} (port {1})" |
585 |
591 |
586 if self.__socket: |
592 if self.__socket: |
587 self.__socket.deleteLater() |
593 self.__socket.deleteLater() |
588 self.__socket = None |
594 self.__socket = None |
589 |
595 |
590 self.__connectionState = IrcWidget.ServerDisconnected |
596 self.__connectionState = IrcConnectionState.Disconnected |
591 self.__sslErrorLock = False |
597 self.__sslErrorLock = False |
592 |
598 |
593 def __readyRead(self): |
599 def __readyRead(self): |
594 """ |
600 """ |
595 Private slot to read data from the socket. |
601 Private slot to read data from the socket. |
848 |
854 |
849 self.networkWidget.addServerMessage(msgType, message) |
855 self.networkWidget.addServerMessage(msgType, message) |
850 |
856 |
851 if code == 1: |
857 if code == 1: |
852 # register with services after the welcome message |
858 # register with services after the welcome message |
853 self.__connectionState = IrcWidget.ServerConnected |
859 self.__connectionState = IrcConnectionState.Connected |
854 self.__registerWithServices() |
860 self.__registerWithServices() |
855 self.networkWidget.setRegistered(True) |
861 self.networkWidget.setRegistered(True) |
856 QTimer.singleShot(1000, self.__autoJoinChannels) |
862 QTimer.singleShot(1000, self.__autoJoinChannels) |
857 elif code == 5: |
863 elif code == 5: |
858 # extract the user privilege prefixes |
864 # extract the user privilege prefixes |
905 self.tr( |
911 self.tr( |
906 """Connection to server {0} (port {1}) lost while""" |
912 """Connection to server {0} (port {1}) lost while""" |
907 """ waiting for user response to an SSL error.""" |
913 """ waiting for user response to an SSL error.""" |
908 ).format(self.__server.getName(), self.__server.getPort()), |
914 ).format(self.__server.getName(), self.__server.getPort()), |
909 ) |
915 ) |
910 self.__connectionState = IrcWidget.ServerDisconnected |
916 self.__connectionState = IrcConnectionState.Disconnected |
911 elif error == QAbstractSocket.SocketError.HostNotFoundError: |
917 elif error == QAbstractSocket.SocketError.HostNotFoundError: |
912 self.networkWidget.addErrorMessage( |
918 self.networkWidget.addErrorMessage( |
913 self.tr("Socket Error"), |
919 self.tr("Socket Error"), |
914 self.tr( |
920 self.tr( |
915 "The host was not found. Please check the host name" |
921 "The host was not found. Please check the host name" |
974 """The SSL certificate for the server {0} (port {1})""" |
980 """The SSL certificate for the server {0} (port {1})""" |
975 """ failed the authenticity check. SSL errors""" |
981 """ failed the authenticity check. SSL errors""" |
976 """ were accepted by you.""" |
982 """ were accepted by you.""" |
977 ).format(self.__server.getName(), self.__server.getPort()), |
983 ).format(self.__server.getName(), self.__server.getPort()), |
978 ) |
984 ) |
979 if self.__connectionState == IrcWidget.ServerConnecting: |
985 if self.__connectionState == IrcConnectionState.Connecting: |
980 self.__socket.ignoreSslErrors() |
986 self.__socket.ignoreSslErrors() |
981 |
987 |
982 def __setUserPrivilegePrefix(self, prefix1, prefix2): |
988 def __setUserPrivilegePrefix(self, prefix1, prefix2): |
983 """ |
989 """ |
984 Private method to set the user privilege prefix. |
990 Private method to set the user privilege prefix. |