Merge branch 'add-versionController' into merge-task-and-verController

# Conflicts:
#	InstructorsAndTrainees/CMakeLists.txt
#	InstructorsAndTrainees/connectorToServer/Core/recognizesystem.h
#	InstructorsAndTrainees/instructorsandtraineeswidget.cpp
#	ServerLMS/Systems/updatecontroller.cpp
#	ServerLMS/Systems/updatecontroller.h
This commit is contained in:
semenov
2025-01-21 15:52:20 +03:00
50 changed files with 1770 additions and 192 deletions

View File

@@ -6,6 +6,7 @@
#include "instructor.h"
#include "trainee.h"
#include "group.h"
#include "streamingversiondata.h"
#include <QDir>
@@ -327,7 +328,8 @@ ServerSettings *DataParser::getServerSettings()
if(xmlReader.isStartElement()){
if(xmlReader.name() == "ServerSettings"){
if(xmlReader.name() == "ServerSettings")
{
foreach(const QXmlStreamAttribute &attr, xmlReader.attributes()){
QString name = attr.name().toString();

View File

@@ -0,0 +1,16 @@
#include "notifycontroller.h"
NotifyController::NotifyController(QObject *parent) : QObject(parent)
{
}
void NotifyController::showWarning(QString text)
{
QMessageBox warning;
warning.setText(text);
warning.setIcon(QMessageBox::Warning);
warning.setWindowTitle(tr("Ошибка"));
warning.exec();
}

View File

@@ -0,0 +1,18 @@
#ifndef NOTIFYCONTROLLER_H
#define NOTIFYCONTROLLER_H
#include <QObject>
#include <QMessageBox>
class NotifyController : public QObject
{
Q_OBJECT
public:
explicit NotifyController(QObject *parent = nullptr);
void showWarning(QString text);
signals:
};
#endif // NOTIFYCONTROLLER_H

View File

@@ -254,6 +254,17 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
packetType = PacketType::TYPE_NONE;
}
if(packetType == PacketType::BUSY)
{
emit sigAnimationActivated(true);
}
if(packetType == PacketType::FREE)
{
emit sigAnimationActivated(false);
}
//xml-ответы на запросы к БД
switch(packetType)
{
@@ -350,6 +361,21 @@ void RecognizeSystem::xmlParser(QByteArray array)
{
emit sigStartCompare();
}
if (value == "BASEDELETETRY")
{
emit sigNotify(tr("Нельзя удалять базовую версию"));
}
if (value == "TRYACTIVEDELETE")
{
emit sigNotify(tr("Нельзя удалять активную версию"));
}
if (value == "DUPLICATEVERNAME")
{
emit sigNotify(tr("Такое имя уже существет"));
}
}
}
}
@@ -427,6 +453,75 @@ void RecognizeSystem::xmlParser(QByteArray array)
}
emit sigDeAuth(serverDeAuth);
}
if(xmlReader.name() == "VersionList")
{
QList<StreamingVersionData*> *serverStreamingVersionDataList = new QList<StreamingVersionData*>;
xmlReader.readNext();
while (!xmlReader.atEnd())
{
if(xmlReader.isStartElement())
{
if(xmlReader.name() == "VersionData")
{
StreamingVersionData *data = new StreamingVersionData;
foreach(const QXmlStreamAttribute &attr,xmlReader.attributes())
{
QString name = attr.name().toString();
QString value = attr.value().toString();
if(name == "Version")
data->setName(value);
else if(name == "Created")
data->setCreateData(QDateTime::fromString(value));
else if(name == "isChangeable")
data->setIsChangeable(value.toInt());
else if(name == "author")
data->setAuthor(value);
}
serverStreamingVersionDataList->append(data);
}
}
xmlReader.readNext();
}
emit sigShowServerDataList(serverStreamingVersionDataList);
}
if(xmlReader.name() == "VersionData")
{
StreamingVersionData *serverVersion = new StreamingVersionData;
foreach(const QXmlStreamAttribute &attr,xmlReader.attributes())
{
QString name = attr.name().toString();
QString value = attr.value().toString();
if (name == "Version")
{
serverVersion->setName(value);
}
if (name == "Created")
{
serverVersion->setCreateData(QDateTime::fromString(value));
}
if (name == "isChangeable")
{
serverVersion->setIsChangeable(value.toInt());
}
}
emit sigSetVersion(serverVersion);
}
xmlReader.readNext();

View File

@@ -4,6 +4,7 @@
#include <QObject>
#include <QDataStream>
#include <QTcpSocket>
#include <streamingVersionData.h>
//#include <mainwindow.h>
#include <Core\tools.h>
#include "dataparser.h"
@@ -48,9 +49,12 @@ signals:
void sigAnswerQueryToDB_ListComputers(QList<Computer> listComputers);
void sigAnswerQueryToDB_ListClassrooms(QList<Classroom> listClassrooms);
void sigAnswerQueryToDB_ListTasks(QList<Task> listTasks);
void sigAnswerQueryTasksXML_FIM(QByteArray array);
void sigAnswerQueryTasksXML_AMM(QByteArray array);
void sigShowServerDataList(QList<StreamingVersionData*> *versions);
void sigSetVersion(StreamingVersionData* serverVersion);
void sigNotify(QString text);
void sigAnimationActivated(bool flag);
private:
QList<QString> *folderList;

View File

@@ -129,6 +129,43 @@ void SendSystem::sendFinish()
socket->waitForReadyRead(100);
}
void SendSystem::sendChangeVersion(StreamingVersionData *streamingVersion)
{
QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
stream << PacketType::CHANGE_DATA_VERSION;
stream << streamingVersion->getViewName();
socket->waitForReadyRead(100);
}
void SendSystem::sendDeleteVersion(StreamingVersionData *streamingVersion)
{
QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
stream << PacketType::DELETE_DATA_VERSION;
stream << streamingVersion->getViewName();
socket->waitForReadyRead(100);
}
void SendSystem::sendCopyVersion(QString versionName)
{
QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
stream << PacketType::COPY_VERSION;
stream << versionName;
}
void SendSystem::sendPacketType(PacketType packetType)
{
QDataStream stream(socket);
QByteArray data;
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
stream << packetType;
}
SendSystem::~SendSystem()
{

View File

@@ -5,6 +5,9 @@
#include <QTcpSocket>
#include <QDataStream>
#include <streamingVersionData.h>
#include "Core/tools.h"
class SendSystem :public QObject
{
Q_OBJECT
@@ -19,6 +22,10 @@ public:
void sendXMLAnswer(QByteArray array);
~SendSystem();
void sendFinish();
void sendChangeVersion(StreamingVersionData *streamingVersion);
void sendDeleteVersion(StreamingVersionData *streamingVersion);
void sendCopyVersion(QString versionName);
void sendPacketType(PacketType packetType);
signals:
void sigSend();

View File

@@ -19,6 +19,8 @@ static QString displayTemp = staticDataFolderName + "/displayData.xml";
static QString streamingHashFilename = staticDataFolderName + "/streamingHash.xml";
static QString serverHash = staticDataFolderName + "/serverHash.xml";
static QString cmd_CheckVersionList = "CHECKVERSIONLIST";
enum PacketType{
TYPE_NONE = 0,
TYPE_UNITY = 1,
@@ -31,6 +33,7 @@ enum PacketType{
TYPE_XMLANSWER = 8,
TYPE_QT = 9,
TYPE_DISABLE = 11,
TYPE_CHECKVERSION = 13,
TYPE_XMLANSWER_MESSAGE_FOR_GUI = 90,
@@ -44,7 +47,14 @@ enum PacketType{
//xml-ответы на запросы AdditionalFiles
TYPE_XMLANSWER_QUERY_TASKS_XML_FIM = 130,
TYPE_XMLANSWER_QUERY_TASKS_XML_AMM = 131
TYPE_XMLANSWER_QUERY_TASKS_XML_AMM = 131,
HASH_READY = 150,
CHANGE_DATA_VERSION = 151,
COPY_VERSION = 152,
DELETE_DATA_VERSION = 153,
BUSY = 154,
FREE = 155
};
Q_DECLARE_METATYPE(PacketType)

View File

@@ -0,0 +1,42 @@
#include "versioncontainer.h"
VersionContainer::VersionContainer(QObject *parent) :
QObject(parent)
{
}
VersionContainer::~VersionContainer()
{
}
QString VersionContainer::getServerVersion() const
{
return serverVersionData->getViewName();
}
QString VersionContainer::getLocalVersion() const
{
return localVersionData->getViewName();
}
StreamingVersionData *VersionContainer::getLocalVersionData() const
{
return localVersionData;
}
void VersionContainer::setLocalVersionData(StreamingVersionData *value)
{
localVersionData = value;
}
StreamingVersionData *VersionContainer::getServerVersionData() const
{
return serverVersionData;
}
void VersionContainer::setServerVersionData(StreamingVersionData *value)
{
serverVersionData = value;
}

View File

@@ -0,0 +1,30 @@
#ifndef VERSIONCONTAINER_H
#define VERSIONCONTAINER_H
#include <QObject>
#include "connectorToServer/streamingversiondata.h"
class VersionContainer : public QObject
{
Q_OBJECT
public:
explicit VersionContainer(QObject *parent = nullptr);
~VersionContainer();
QString getServerVersion() const;
QString getLocalVersion() const;
StreamingVersionData *getLocalVersionData() const;
void setLocalVersionData(StreamingVersionData *value);
StreamingVersionData *getServerVersionData() const;
void setServerVersionData(StreamingVersionData *value);
private:
StreamingVersionData *localVersionData;
StreamingVersionData *serverVersionData;
};
#endif // VERSIONCONTAINER_H

View File

@@ -7,7 +7,11 @@ ConnectorToServer::ConnectorToServer(QObject *parent) :
client(nullptr),
dataParser(nullptr),
sendSystem(nullptr),
recognizeSystem(nullptr)
recognizeSystem(nullptr),
versionSelectWidget(nullptr),
versionContainer(nullptr),
notifyController(nullptr),
waitAnimationWidget(nullptr)
{
initialize();
}
@@ -93,9 +97,15 @@ bool ConnectorToServer::sendQueryTasksXML(QString type)
return true;
}
void ConnectorToServer::setLoginName(QString name)
{
versionSelectWidget->setAuthor(name);
}
void ConnectorToServer::SetConnectToServer()
{
emit sigSetConnect(dataParser->getServerSettings(),connectionThread);
}
QByteArray ConnectorToServer::getListTaskFimArray()
@@ -249,6 +259,12 @@ int ConnectorToServer::getIdTraineeByLogin(QString login)
return 0;
}
void ConnectorToServer::showVersionSelect()
{
QByteArray answer = dataParser->xmlAnswer_notify(cmd_CheckVersionList);
emit sigSendAnswerToServer(answer);
}
/*
void ConnectorToServer::slot_AnswerQueryToDB(QList<Instructor>* listInstructors,
QList<Trainee>* listTrainees,
@@ -316,6 +332,11 @@ void ConnectorToServer::slot_msgToClientReady(QString login, QString text)
sendMessageForClient(id, login, text);
}
void ConnectorToServer::showServerList(QList<StreamingVersionData *> *serverList)
{
versionSelectWidget->fillView(serverList);
}
void ConnectorToServer::initialize()
{
createObjects();
@@ -325,6 +346,22 @@ void ConnectorToServer::initialize()
emit sigInitializeClient(recognizeSystem,sendSystem,connectionThread);
emit sigSetConnect(dataParser->getServerSettings(),connectionThread);
// QByteArray answer = dataParser->xmlAnswer_notify()
// sendSystem->sendXMLAnswer()
}
void ConnectorToServer::activateLoadAnimation(bool flag)
{
if (flag)
{
waitAnimationWidget->showWithPlay();
}
else
{
waitAnimationWidget->hideWithStop();
}
}
void ConnectorToServer::bindConnection()
@@ -332,10 +369,13 @@ void ConnectorToServer::bindConnection()
connect(this,&ConnectorToServer::sigInitializeClient,client,&TCPClient::initialize,Qt::AutoConnection);
connect(this,&ConnectorToServer::sigSetConnect,client,&TCPClient::setConnect,Qt::AutoConnection);
connect(this,&ConnectorToServer::signal_sendXMLmsgGUItoServer,sendSystem,&SendSystem::sendXMLmsgGUItoServer);
connect(this,&ConnectorToServer::sigSendAnswerToServer,sendSystem,&SendSystem::sendXMLAnswer,Qt::AutoConnection);
connect(recognizeSystem,&RecognizeSystem::sigAuth,this,&ConnectorToServer::sigLoginResult);
connect(recognizeSystem,&RecognizeSystem::sigDeAuth,this,&ConnectorToServer::sigDeLoginResult);
connect(recognizeSystem,&RecognizeSystem::signal_MessageForGUI,this,&ConnectorToServer::signal_msgFromClientReady);
connect(recognizeSystem,&RecognizeSystem::sigShowServerDataList,this,&ConnectorToServer::showServerList);
connect (recognizeSystem,&RecognizeSystem::sigSetVersion,versionContainer,&VersionContainer::setServerVersionData);
//connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB,this,&ConnectorToServer::slot_AnswerQueryToDB);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListInstructors,this,&ConnectorToServer::slot_AnswerQueryToDB_ListInstructors);
@@ -347,8 +387,11 @@ void ConnectorToServer::bindConnection()
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_FIM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_FIM);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_AMM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_AMM);
connect(recognizeSystem,&RecognizeSystem::sigAnimationActivated,this,&ConnectorToServer::activateLoadAnimation,Qt::AutoConnection);
connect(client,&TCPClient::signal_ConnectedToServer,this,&ConnectorToServer::signal_ConnectedToServer);
connect(client,&TCPClient::signal_ConnectedToServer,this,&ConnectorToServer::signal_ConnectedToServer,Qt::AutoConnection);
connect(recognizeSystem,&RecognizeSystem::sigNotify,notifyController,&NotifyController::showWarning,Qt::AutoConnection);
}
void ConnectorToServer::createObjects()
@@ -360,12 +403,25 @@ void ConnectorToServer::createObjects()
dataParser = new DataParser;
waitAnimationWidget = new WaitAnimationWidget;
sendSystem = new SendSystem;
sendSystem->moveToThread(connectionThread);
recognizeSystem = new RecognizeSystem;
recognizeSystem->moveToThread(connectionThread);
notifyController = new NotifyController;
versionContainer = new VersionContainer;
versionSelectWidget = new VersionSelectWidget;
versionSelectWidget->initialize(sendSystem,versionContainer,notifyController);
QMovie *movie = new QMovie(":/resources/icons/762.gif");
waitAnimationWidget->setParent(versionSelectWidget);
waitAnimationWidget->initialize(movie,versionSelectWidget);
waitAnimationWidget->moveToThread(connectionThread);
connectionThread->start();
connectionThread->setPriority(QThread::HighestPriority);
}

View File

@@ -2,6 +2,8 @@
#define CONNECTORTOSERVER_H
#include <QObject>
#include <widgets/versionselectwidget.h>
#include <widgets/waitanimationwidget.h>
#include "Core\tcpclient.h"
#include "Core\dataparser.h"
#include "Core\sendsystem.h"
@@ -12,6 +14,7 @@
#include "computer.h"
#include "classroom.h"
#include "task.h"
#include "streamingversiondata.h"
class ConnectorToServer : public QObject
{
@@ -54,7 +57,10 @@ public:
Group getGroup(int id);
int getIdTraineeByLogin(QString login);
void showVersionSelect();
void activateLoadAnimation(bool flag);
void setLoginName(QString name);
public slots:
/*void slot_AnswerQueryToDB(QList<Instructor>* listInstructors,
QList<Trainee>* listTrainees,
@@ -71,6 +77,7 @@ public slots:
void slot_AnswerQueryTasksXML_AMM(QByteArray array);
void slot_msgToClientReady(QString login, QString text);
void showServerList(QList<StreamingVersionData*> *serverList);
signals:
void sigSetConnect(ServerSettings* serverSettings,QThread *thread);
@@ -93,6 +100,7 @@ signals:
void signal_InitMessanger(QList<Trainee> listTrainees);
void signal_msgFromClientReady(QString login, QString text);
void sigSendAnswerToServer(QByteArray array);
private:
@@ -106,6 +114,10 @@ private:
DataParser *dataParser;
SendSystem *sendSystem;
RecognizeSystem *recognizeSystem;
VersionSelectWidget *versionSelectWidget;
VersionContainer *versionContainer;
NotifyController *notifyController;
WaitAnimationWidget *waitAnimationWidget;
//Списочная модель БД СУО
QList<Instructor> listInstructors;

View File

@@ -0,0 +1,88 @@
#ifndef STREAMINGVERSIONDATA_H
#define STREAMINGVERSIONDATA_H
#include <QObject>
#include <qdatetime.h>
class StreamingVersionData
{
public:
StreamingVersionData(){}
StreamingVersionData(QString absoltePath,QString viewName,QDateTime data,qint32 size)
{
this->absolutePath = absoltePath;
this->viewName = viewName;
this->createData = data;
this->size = size;
this->author = "";
}
void setName(QString viewName)
{
this->viewName = viewName;
}
void setCreateData(QDateTime data)
{
this->createData = data;
}
~StreamingVersionData();
QString getAbsolutPath() const
{
return absolutePath;
}
QString getViewName() const
{
return viewName;
}
QDateTime getCreateData() const
{
return createData;
}
qint32 getSize() const
{
return size;
}
bool getIsChangeable() const
{
return isChangeable;
}
void setIsChangeable(bool value)
{
isChangeable = value;
}
QString getAuthor() const
{
return author;
}
void setAuthor(const QString &value)
{
author = value;
}
private:
QString absolutePath;
QString viewName;
QString author;
QDateTime createData;
bool isChangeable;
qint32 size;
};
#endif // STREAMINGVERSIONDATA_H