diff --git a/client/gui.py b/client/gui.py
index 3baab77..1ee4cc5 100644
--- a/client/gui.py
+++ b/client/gui.py
@@ -17,7 +17,7 @@ HEADER_LENGTH = 10
class ReceiveWorker(QThread):
- messages = pyqtSignal(str, str, str, int)
+ messages = pyqtSignal(dict)
client_list = pyqtSignal(list)
error = pyqtSignal()
sent_nick = pyqtSignal()
@@ -27,6 +27,15 @@ class ReceiveWorker(QThread):
self.client = client
self.nickname = nickname
+ def __extract_message(self, data) -> dict:
+ return {
+ 'nickname': data['nickname'],
+ 'message': data['content'],
+ 'color': data['color'],
+ 'time': data['time'],
+ 'id': data['id']
+ }
+
def run(self):
while True:
try:
@@ -48,10 +57,14 @@ class ReceiveWorker(QThread):
))
self.sent_nick.emit()
elif message['type'] == constants.Types.MESSAGE:
- self.messages.emit(message['nickname'], message['content'], message['color'], message['time'])
+ self.messages.emit(self.__extract_message(message))
elif message['type'] == constants.Types.USER_LIST:
self.client_list.emit(message['users'])
- except:
+ elif message['type'] == constants.Types.MESSAGE_HISTORY:
+ for submessage in message['messages']:
+ self.messages.emit(self.__extract_message(submessage))
+
+ except Exception as e:
traceback.print_exc()
self.error.emit()
self.client.close()
@@ -80,26 +93,30 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# Setup message receiving thread worker
self.receiveThread = ReceiveWorker(self.client, self.nickname)
self.receiveThread.messages.connect(self.addMessage)
- self.receiveThread.client_list.connect(self.updateConnectionsList)
+ self.receiveThread.client_list.connect(self.update_connections)
self.receiveThread.start()
self.connectionsListTimer = QTimer()
- self.connectionsListTimer.timeout.connect(self.refreshConnectionsList)
+ self.connectionsListTimer.timeout.connect(self.refresh_connections)
self.connectionsListTimer.start(1000 * 30)
- self.receiveThread.sent_nick.connect(self.refreshConnectionsList)
+ self.receiveThread.sent_nick.connect(self._ready)
self.messageBox.setPlaceholderText('Type your message here...')
self.messageBox.installEventFilter(self)
self.messages = []
+ def _ready(self):
+ self.refresh_connections()
+ self.get_message_history()
+
def closeEvent(self, event):
if self.nicknameDialog:
self.closed = True
self.nicknameDialog.close()
event.accept() # let the window close
- def eventFilter(self, obj, event):
+ def eventFilter(self, obj, event) -> bool:
if event.type() == QEvent.KeyPress and obj is self.messageBox:
if event.key() == Qt.Key_Return and self.messageBox.hasFocus():
self.sendMessage(self.messageBox.toPlainText())
@@ -111,9 +128,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
return True
return super().eventFilter(obj, event)
- def addMessage(self, nickname: str, message: str, color: str, time: int) -> None:
- self.messages.append([nickname, message, color, time])
- self.messageHistory.append(f'<{nickname}> {message}')
+ def addMessage(self, message: dict) -> None:
+ self.messages.append(message)
+ self.messageHistory.append(f'<{message["nickname"]}> {message["message"]}')
def sendMessage(self, message: str) -> None:
message = message.strip()
@@ -125,7 +142,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
}
))
- def refreshConnectionsList(self):
+ def refresh_connections(self) -> None:
self.client.send(helpers.prepare_json(
{
'type': constants.Types.REQUEST,
@@ -133,7 +150,14 @@ class MainWindow(QMainWindow, Ui_MainWindow):
}
))
- def updateConnectionsList(self, users):
- self.connectionsList.clear()
+ def get_message_history(self) -> None:
+ self.client.send(helpers.prepare_json(
+ {
+ 'type': constants.Types.REQUEST,
+ 'request': constants.Requests.GET_MESSAGE_HISTORY
+ }
+ ))
+ def update_connections(self, users):
+ self.connectionsList.clear()
self.connectionsList.addItems([user['nickname'] for user in users])