From e40a22483a3bce4ad5754279a0c9f2f276c7875d Mon Sep 17 00:00:00 2001 From: semenov Date: Tue, 10 Jun 2025 11:39:09 +0300 Subject: [PATCH] bugfix: add behaviour on empty build and shared data --- ServerLMS/Systems/tools.h | 3 ++- ServerLMS/Systems/updatecontroller.cpp | 21 +++++++++++++++-- ServerLMS/Systems/updatecontroller.h | 4 ++++ ServerLMS/serverlmswidget.cpp | 10 ++++++-- ServerLMS/serverlmswidget.h | 6 +++++ TestServerLMS/mainwindow.cpp | 32 +++++++++++++++++++++++++- TestServerLMS/mainwindow.h | 2 ++ 7 files changed, 72 insertions(+), 6 deletions(-) diff --git a/ServerLMS/Systems/tools.h b/ServerLMS/Systems/tools.h index 09cf2ad..162854e 100644 --- a/ServerLMS/Systems/tools.h +++ b/ServerLMS/Systems/tools.h @@ -15,6 +15,7 @@ static const QString staticDataFolderName = "StaticData"; static const QString applicationFolderName = "Application"; static const QString sharedDataFolderName = "SharedData"; +static const QString projectFolderName = "RRJLoader"; static const QString additionalFilesFolderName = "RRJ-95NEW-100"; static const QString streamingAssetsFolderName = "StreamingAssets"; static const QString versionFolderName = "StreamingVersion"; @@ -23,7 +24,7 @@ static const QString version = staticDataFolderName + "/version.xml"; static const QString versionListFile = staticDataFolderName + "/versionList.xml"; static const QString hashFileName = staticDataFolderName + "/serverHash.xml"; static const QString buildHashName = staticDataFolderName + "/buildHash.xml"; -static const QString buildDataPath = "/Application/RRJLoader/RRJ_Data/"; +static const QString buildDataPath = "/Application/" + projectFolderName + "/RRJ_Data/"; static const QString tasksAMMfileName = "/tasksAmm.xml"; static const QString tasksFIMfileName = "/tasksFIM.xml"; static const QString clientHash = staticDataFolderName + "/clientHash.xml"; diff --git a/ServerLMS/Systems/updatecontroller.cpp b/ServerLMS/Systems/updatecontroller.cpp index 20db909..c86de7f 100644 --- a/ServerLMS/Systems/updatecontroller.cpp +++ b/ServerLMS/Systems/updatecontroller.cpp @@ -1,5 +1,6 @@ #include "updatecontroller.h" + UpdateController::UpdateController(QObject *parent) : QObject(parent), commonClientHandler(nullptr) @@ -19,6 +20,12 @@ void UpdateController::initialize(CommonClientHandler *commonClientHandler,DataP sizeToSend = 0; assetManager->initialize(this,dataParser); + if (!checkRequiredFolder()) + { + emit sigErrorRequired(100); + return; + } + connect(this,&UpdateController::sigLogMessage,logger,&Logger::addTextToLogger,Qt::AutoConnection); calculateFullHash(); @@ -319,7 +326,7 @@ QList* UpdateController::calculateHash(QString path) { QFileInfo fileInfo(dirIterator.next()); FileData currentFile; - if(fileInfo.isDir() && !fileInfo.fileName().startsWith(".") && fileInfo.fileName() != "RRJLoader") + if(fileInfo.isDir() && !fileInfo.fileName().startsWith(".") && fileInfo.fileName() != projectFolderName) { currentFile.path = Tools::createLocalPath(fileInfo.absoluteFilePath()); currentFile.hash = "FOLDER"; @@ -536,7 +543,6 @@ QList UpdateController::getFileSendList() return sendList; } - QList UpdateController::getClientDataList() const { return clientDataList; @@ -552,6 +558,17 @@ void UpdateController::clearCurrentDataInfo() delete dataInfo; } +bool UpdateController::checkRequiredFolder() +{ + bool required = true; + QDir buildDir(buildPath + "/" + projectFolderName); + if (!buildDir.exists()) required = false; + + QDir baseSharedDir(sharedDataPath + "/" + baseNameVersion); + if (!baseSharedDir.exists()) required = false; + + return required; +} UpdateController::~UpdateController() { diff --git a/ServerLMS/Systems/updatecontroller.h b/ServerLMS/Systems/updatecontroller.h index 0abbbdd..f22b150 100644 --- a/ServerLMS/Systems/updatecontroller.h +++ b/ServerLMS/Systems/updatecontroller.h @@ -9,6 +9,8 @@ #include #include #include +#include +#include #include #include @@ -66,6 +68,7 @@ public slots: signals: void sigLogMessage(QString message); + void sigErrorRequired(int code); private: QList clientDataList; @@ -94,6 +97,7 @@ private: void saveHash(QString fileName,QList *fileList); void loadHash(); void CalculateSizeToSend(QList diffList); + bool checkRequiredFolder(); }; #endif // UPDATECONTROLLER_H diff --git a/ServerLMS/serverlmswidget.cpp b/ServerLMS/serverlmswidget.cpp index 8dfe6b4..5f75f02 100644 --- a/ServerLMS/serverlmswidget.cpp +++ b/ServerLMS/serverlmswidget.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include "serverlmswidget.h" #include "ui_serverlmswidget.h" @@ -26,6 +27,7 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) : ui->setupUi(this); qRegisterMetaType("PacketType"); + errorCode = 0; ui->btnStopServer->setEnabled(false); ui->btnStartServer->setEnabled(true); @@ -68,13 +70,12 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) : processingSystem->initialize(this,dataParser,commonClientHandler,logger,updateController); logger->setTypeLog("widget"); - - connect(dataParser,&DataParser::sigLogMessage,logger,&Logger::addTextToLogger); connect(this,&ServerLMSWidget::sigUpdateController,updateController,&UpdateController::initialize,Qt::DirectConnection); connect(this,&ServerLMSWidget::sigLog,logger,&Logger::addTextToLogger,Qt::AutoConnection); connect(this,&ServerLMSWidget::sigCalculateFullHash,updateController,&UpdateController::calculateFullHash,Qt::AutoConnection); + connect(updateController,&UpdateController::sigErrorRequired,this,&ServerLMSWidget::setError); emit sigUpdateController(commonClientHandler,dataParser,assetsManager,logger); on_btnStartServer_clicked(); @@ -97,6 +98,11 @@ void ServerLMSWidget::autorizationHandler(QString login) } } +void ServerLMSWidget::setError(int code) +{ + errorCode = code; +} + ServerLMSWidget::~ServerLMSWidget() { stopServer(); diff --git a/ServerLMS/serverlmswidget.h b/ServerLMS/serverlmswidget.h index a19d13a..c3d1555 100644 --- a/ServerLMS/serverlmswidget.h +++ b/ServerLMS/serverlmswidget.h @@ -48,6 +48,7 @@ public: ~ServerLMSWidget(); void autorizationHandler(QString login); + void setError(int code); protected: @@ -81,6 +82,10 @@ public: { stateBlockAutorization = unblocked; } + int hasError() const + { + return errorCode; + } EStateBlockAutorization getStateBlockAutorization() const { return stateBlockAutorization; @@ -128,6 +133,7 @@ private: bool first = true; // для тестов Unity QTranslator qtLanguageTranslator; + int errorCode; }; diff --git a/TestServerLMS/mainwindow.cpp b/TestServerLMS/mainwindow.cpp index 5f32e2d..dc2c494 100644 --- a/TestServerLMS/mainwindow.cpp +++ b/TestServerLMS/mainwindow.cpp @@ -1,8 +1,8 @@ #include +#include #include "mainwindow.h" #include "./ui_mainwindow.h" - MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), @@ -21,9 +21,16 @@ MainWindow::MainWindow(QWidget *parent) : this->move(0, 0); this->showNormal(); + + errorCheck(); //this->showMaximized(); } +void MainWindow::exit() +{ + QApplication::exit(0); +} + MainWindow::~MainWindow() { delete m_serverLMSWidget; @@ -53,3 +60,26 @@ void MainWindow::on_cmbLanguage_currentIndexChanged(const QString &arg1) emit signal_LanguageChanged(language); } + +void MainWindow::errorCheck() +{ + if(m_serverLMSWidget->hasError() == 100) + { + QMessageBox msgBox; + + msgBox.setWindowTitle("Ошибка"); + msgBox.setIcon(QMessageBox::Critical); + msgBox.setText(tr("Не найдены файлы клиента")); + msgBox.setInformativeText(tr("* проверьте Application на наличие папки с билдом \n" + "* проверьте SharedData на наличие папки с базовой версией и именем base")); + msgBox.setStandardButtons(QMessageBox::Close); + msgBox.show(); + int ret = msgBox.exec(); + + if (ret == QMessageBox::Close) + { + //выключение с задержкой, так как eventLoop инициализируется позже + QTimer::singleShot(1000,this,&MainWindow::exit); + } + } +} diff --git a/TestServerLMS/mainwindow.h b/TestServerLMS/mainwindow.h index 2f0edaa..3e396b4 100644 --- a/TestServerLMS/mainwindow.h +++ b/TestServerLMS/mainwindow.h @@ -36,5 +36,7 @@ private: Ui::MainWindow *ui; ServerLMSWidget* m_serverLMSWidget; QTranslator qtLanguageTranslator; + void exit(); + void errorCheck(); }; #endif // MAINWINDOW_H