Рефакт Месссенджера закончил :)

This commit is contained in:
2025-09-11 16:37:49 +03:00
parent f53256f5b1
commit d6795e4723
6 changed files with 68 additions and 63 deletions

View File

@@ -84,56 +84,12 @@ void MessangerController::slot_sendMessage(ClientMessage clientMessage)
{
connectorToServer->slot_sendMessage(clientMessage);
int id_user = clientMessage.toId.toInt();
QList<MessageOfMessanger>* list = nullptr;
if(mapAlldialogsWithClients.contains(id_user))
{//Уже есть
list = mapAlldialogsWithClients.value(id_user);
}
else
{//Новый
list = new QList<MessageOfMessanger>();
mapAlldialogsWithClients.insert(id_user, list);
}
MessageOfMessanger msg;
msg.flLocal = true;
msg.text = clientMessage.Text;
msg.time = QTime::currentTime();
list->append(msg);
clientMessage.timeStr = msg.time.toString("hh:mm");
for(MessangerWidget* widget : listWidgets)
{
widget->showSendedMessage(clientMessage);
}
showMessageInAllWidgets(clientMessage);
}
void MessangerController::slot_receiveMessage(ClientMessage clientMessage)
{
int id_user = clientMessage.fromId.toInt();
QList<MessageOfMessanger>* list = nullptr;
if(mapAlldialogsWithClients.contains(id_user))
{//Уже есть
list = mapAlldialogsWithClients.value(id_user);
}
else
{//Новый
list = new QList<MessageOfMessanger>();
mapAlldialogsWithClients.insert(id_user, list);
}
MessageOfMessanger msg;
msg.flLocal = false;
msg.text = clientMessage.Text;
msg.time = QTime::currentTime();
list->append(msg);
clientMessage.timeStr = msg.time.toString("hh:mm");
for(MessangerWidget* widget : listWidgets)
{
widget->showReceivedMessage(clientMessage);
}
showMessageInAllWidgets(clientMessage);
}
void MessangerController::slot_reinitMessangers(QList<User> listUsers)
@@ -150,3 +106,49 @@ void MessangerController::slot_reinitMessangers(QList<User> listUsers)
}
}
}
void MessangerController::showMessageInAllWidgets(ClientMessage clientMessage)
{
int id_user = 0;
MessageOfMessanger msg;
if(clientMessage.fromId == GUIclientId)
{//Send
id_user = clientMessage.toId.toInt();
msg.flLocal = true;
}
else
{//Receive
id_user = clientMessage.fromId.toInt();
msg.flLocal = false;
}
QList<MessageOfMessanger>* list = nullptr;
if(mapAlldialogsWithClients.contains(id_user))
{//Уже есть
list = mapAlldialogsWithClients.value(id_user);
}
else
{//Новый
list = new QList<MessageOfMessanger>();
mapAlldialogsWithClients.insert(id_user, list);
}
msg.text = clientMessage.Text;
msg.time = QTime::currentTime();
list->append(msg);
clientMessage.timeStr = msg.time.toString("hh:mm");
for(MessangerWidget* widget : listWidgets)
{
if(widget->getIDuserRemote() == id_user)
{
if(msg.flLocal)
widget->showSendedMessage(clientMessage);
else
widget->showReceivedMessage(clientMessage);
}
}
}

View File

@@ -33,6 +33,9 @@ public slots:
void slot_reinitMessangers(QList<User> listUsers);
private:
void showMessageInAllWidgets(ClientMessage clientMessage);
private:
ConnectorToServer* connectorToServer;
QList <MessangerWidget*> listWidgets;

View File

@@ -73,7 +73,7 @@ void MessangerWidget::addTabDialogMessenger(User user)
if(!tabDialogMessenger)
{//Диалога еще не существует
tabDialogMessenger = new OneDialogMessenger(user.getLogin(), QString::number(user.getID()), this);
tabDialogMessenger = new OneDialogMessenger(QString::number(user.getID()), user.getTypeUserDB(), this);
//Добавляем новую вкладку диалога
QString typeUserStr = "";
@@ -90,7 +90,7 @@ void MessangerWidget::addTabDialogMessenger(User user)
{//Диалог уже существует
//Проверяем наличие диалога именно с этим клиентом
if(tabDialogMessenger->getUserLogin() == user.getLogin())
if(tabDialogMessenger->getUserId() == user.getID())
{
//Обновляем статус залогинивания
updateLoggedIn(user.getLoggedIn());

View File

@@ -98,7 +98,7 @@ void MsgWidget::on_editText_textChanged()
QRect textRect1str = metricsFont.boundingRect(QRect(0, 0, widthEdit, 1000), 0, "string");
int ost = textRect.width() % widthEdit;
int cnt = textRect.width() / widthEdit;
if(ost > 0)
//if(ost > 0)
cnt += 1;
this->setFixedHeight(textRect1str.height() * cnt + (ost? textRect1str.height() : 0) + X + 20 + 30);

View File

@@ -1,15 +1,16 @@
#include <QScrollBar>
#include "tabdialogmessenger.h"
#include "msgwidget.h"
#include "user.h"
OneDialogMessenger::OneDialogMessenger(QString login , QString userId, QWidget *parent):
OneDialogMessenger::OneDialogMessenger(QString userId, QString typeUserDB, QWidget *parent):
QListWidget(parent),
login(""),
userId("")
userId(""),
typeUserDB("")
{
this->userId = userId;
this->login = login;
this->typeUserDB = typeUserDB;
setWordWrap(true);
setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn);
@@ -39,13 +40,17 @@ void OneDialogMessenger::addMsgWidget(QString text, QString timeStr, MsgWidget::
//TODO уточнить аватарки!
if(direction == MsgWidget::DirectionMsg::Outgoing)
{
{//Исходящее
avatar = ":/resources/icons/instructor.png";
aligneAvatar = MsgWidget::AligneAvatar::Left;
}
else
{
{//Входящее
if(typeUserDB == User::TypeUserDBTrainee)
avatar = ":/resources/icons/trainee.png";
else
avatar = ":/resources/icons/instructor.png";
aligneAvatar = MsgWidget::AligneAvatar::Right;
}

View File

@@ -4,19 +4,14 @@
#include <QListWidget>
#include "msgwidget.h"
//Закладка ведения диалога с одним клиентом
//TODO сделать идентификацию по ID
class OneDialogMessenger : public QListWidget
{
Q_OBJECT
public:
OneDialogMessenger(QString userLogin, QString userId, QWidget *parent = nullptr);
OneDialogMessenger(QString userId, QString typeUserDB, QWidget *parent = nullptr);
~OneDialogMessenger();
QString getUserLogin() {return login;};
QString getUserId() {return userId;}
void addMsgWidgetLocal(QString text, QString timeStr = "");
@@ -26,8 +21,8 @@ private:
void addMsgWidget(QString text, QString timeStr, MsgWidget::DirectionMsg direction);
private:
QString login;
QString userId;
QString typeUserDB;
};
#endif // TABDIALOGMESSENGER_H