9 Commits

Author SHA1 Message Date
semenov
38dda10685 fix: instructor update 2026-03-18 10:47:43 +03:00
semenov
eb70ed9a6e feat: add scenario conflict resolver 2026-03-11 15:53:08 +03:00
semenov
4edfae5740 feat: choosing complete 2026-03-10 14:35:05 +03:00
semenov
1d76e9785b feat: add files time 2026-03-10 09:36:49 +03:00
715d29a1ec убрал мусор 2026-02-27 10:52:13 +03:00
6bde215bbe Работает сокет стрим 2026-02-26 17:58:05 +03:00
eb95db696a Попытка оптимизации 2026-02-24 10:10:59 +03:00
a3651496b7 gitignore add BUILDS 2026-02-19 12:27:32 +03:00
52d077fe6b sendFileBlock_V3 2026-02-18 17:22:38 +03:00
43 changed files with 43527 additions and 30077 deletions

2
.gitignore vendored
View File

@@ -60,3 +60,5 @@ debug/
release/ release/
saves/ saves/
build/ build/
BUILDS/

View File

@@ -124,8 +124,8 @@ QList<FileData> UpdateController::calculateHash(const QString& path,const QStrin
return *hashes; return *hashes;
} }
void UpdateController::updateFilesOnServer(QList<FileData> *fileSendList){ void UpdateController::updateFilesOnServer(QList<FileData> *fileSendList)
{
QListIterator<FileData> serverIterator(*fileSendList); QListIterator<FileData> serverIterator(*fileSendList);
try { try {

View File

@@ -189,13 +189,10 @@ bool DataParser::xmlParser(const QByteArray& array)
if (name == "AccessType") if (name == "AccessType")
{ {
serverAuth->AccessType = value; serverAuth->AccessType = value;
postProcessSystem->checkAccessType(value);
//recognizeSystem->checkAccessType(value);
} }
} }
postProcessSystem->saveLoginData(serverAuth); postProcessSystem->saveLoginData(serverAuth);
//emit recognizeSystem->sigSaveLoginData(serverAuth);
} }
if(xmlReader.name() == "VersionData") if(xmlReader.name() == "VersionData")
@@ -259,6 +256,7 @@ bool DataParser::xmlParser(const QByteArray& array)
xmlReader.readNext(); xmlReader.readNext();
} }
emit postProcessSystem->sigCallUpdateList();
} }
xmlReader.readNext(); xmlReader.readNext();

View File

@@ -93,6 +93,7 @@ void DataParserOutput::createFileDataList(const QList<FileData>& fileDataList,co
xmlWriter.writeAttribute("Path",data.path); xmlWriter.writeAttribute("Path",data.path);
xmlWriter.writeAttribute("Hash",data.hash); xmlWriter.writeAttribute("Hash",data.hash);
xmlWriter.writeAttribute("LastUpdate",data.lastUpdate);
xmlWriter.writeEndElement(); xmlWriter.writeEndElement();
} }
@@ -333,6 +334,8 @@ QList<FileData>* DataParserOutput::xmlFileDataParse(const QByteArray& array,cons
data.path = value; data.path = value;
else if(name == "Hash") else if(name == "Hash")
data.hash = value; data.hash = value;
else if(name == "LastUpdate")
data.lastUpdate = value;
} }
if(data.path.contains(filter)) if(data.path.contains(filter))

View File

@@ -3,8 +3,8 @@
void ExternalExecuter::callApp() void ExternalExecuter::callApp()
{ {
QProcess *myProcess = new QProcess(this); QProcess *myProcess = new QProcess(this);
QStringList args; QStringList args = QCoreApplication::arguments();
args << "1"; args.removeFirst();
myProcess->start(programPath,args); myProcess->start(programPath,args);
myProcess->waitForStarted(); myProcess->waitForStarted();
@@ -21,10 +21,11 @@ bool ExternalExecuter::findApp()
if(iterator.fileInfo().fileName() == applicationEXEName){ if(iterator.fileInfo().fileName() == applicationEXEName){
programPath = iterator.fileInfo().absoluteFilePath(); programPath = iterator.fileInfo().absoluteFilePath();
isAvailable = true;
return true; return true;
} }
} }
isAvailable = false;
return false; return false;
} }
@@ -37,3 +38,8 @@ void ExternalExecuter::setIsAutoStart(bool value)
{ {
isAutoStart = value; isAutoStart = value;
} }
bool ExternalExecuter::getIsAvailable() const
{
return isAvailable;
}

View File

@@ -23,9 +23,12 @@ public:
bool getIsAutoStart() const; bool getIsAutoStart() const;
void setIsAutoStart(bool value); void setIsAutoStart(bool value);
bool getIsAvailable() const;
private: private:
QString programPath; QString programPath;
bool isAutoStart; bool isAutoStart;
bool isAvailable;
}; };
#endif // EXTERNALEXECUTER_H #endif // EXTERNALEXECUTER_H

View File

@@ -61,6 +61,7 @@ void FastHashCalculator::calculateHashes(const QString& path, const QString& ign
QtConcurrent::map(files, [this](const QString &filePath) QtConcurrent::map(files, [this](const QString &filePath)
{ {
QFileInfo fileInfo(filePath);
QByteArray hash = calculateFileHashOptimized(filePath); QByteArray hash = calculateFileHashOptimized(filePath);
QMutexLocker locker(&_mutex); QMutexLocker locker(&_mutex);
FileData currentFile; FileData currentFile;
@@ -68,7 +69,7 @@ void FastHashCalculator::calculateHashes(const QString& path, const QString& ign
currentFile.path = Tools::createLocalPath(filePath); currentFile.path = Tools::createLocalPath(filePath);
currentFile.hash = hash.toHex(); currentFile.hash = hash.toHex();
currentFile.lastUpdate = fileInfo.fileTime(QFileDevice::FileModificationTime).toString("dd.MM.yyyy hh:mm:ss");
hashList->append(currentFile); hashList->append(currentFile);
}).waitForFinished(); }).waitForFinished();

View File

@@ -13,12 +13,15 @@ void HashComparer::initialize(VersionContainer *versionContainer,UpdateNotifyWid
this->versionContainer = versionContainer; this->versionContainer = versionContainer;
this->updateWidget = updateWidget; this->updateWidget = updateWidget;
filesForUpdate = new QList<FileData>; filesForUpdate = new QList<FileData>;
connect(this,&HashComparer::sigAddToList,updateWidget,&UpdateNotifyWidget::addToList,Qt::QueuedConnection);
connect(this,&HashComparer::sigGetUpdateList,updateWidget,&UpdateNotifyWidget::getUpdateList,Qt::DirectConnection);
} }
void HashComparer::CompareDeltas(QList<FileData> *serverStreamingHash, QList<FileData> localStreamingHash) void HashComparer::CompareDeltas(QList<FileData> *serverStreamingHash, QList<FileData> localStreamingHash)
{ {
QList<FileData> *files = new QList<FileData>; QList<FileData> *files = new QList<FileData>;
serverFiles = new QList<FileData>;
QMutableListIterator<FileData> iterator(localStreamingHash); QMutableListIterator<FileData> iterator(localStreamingHash);
for (auto &item:localStreamingHash) for (auto &item:localStreamingHash)
@@ -26,6 +29,13 @@ void HashComparer::CompareDeltas(QList<FileData> *serverStreamingHash, QList<Fil
if(!serverStreamingHash->contains(item)) if(!serverStreamingHash->contains(item))
{ {
if (item.path.contains("docs.xml")) continue; //фильтр на docs if (item.path.contains("docs.xml")) continue; //фильтр на docs
if (item.path.contains("CfiList.xml")) continue;
qint32 fileDataIndex = findIndexByPath(*serverStreamingHash, item.path);
if (fileDataIndex != -1)
{
serverFiles->append(serverStreamingHash->at(fileDataIndex));
}
files->append(item); files->append(item);
} }
} }
@@ -34,6 +44,17 @@ void HashComparer::CompareDeltas(QList<FileData> *serverStreamingHash, QList<Fil
showDeltas(); showDeltas();
} }
quint32 HashComparer::findIndexByPath(const QList<FileData> &serverStreamingHash,QString path)
{
for(int i = 0; i < serverStreamingHash.size(); i++)
{
if(serverStreamingHash.at(i).path == path)
return i;
}
return -1;
}
void HashComparer::showDeltas() void HashComparer::showDeltas()
{ {
@@ -42,9 +63,19 @@ void HashComparer::showDeltas()
emit sigCallCheck(); emit sigCallCheck();
return; return;
} }
for (auto &item:*filesForUpdate)
for (int i = 0; i < filesForUpdate->size(); i++)
{ {
updateWidget->addToList(item); FileData local = filesForUpdate->at(i);
FileData server = FileData();
server.lastUpdate = "нет";
if (serverFiles->size() > i)
{
server = serverFiles->at(i);
}
emit sigAddToList(local,server);
} }
emit sigHaveDelta(); emit sigHaveDelta();
@@ -57,7 +88,7 @@ quint16 HashComparer::getFileUpdateCount() const
QList<FileData> *HashComparer::getFilesForUpdate() const QList<FileData> *HashComparer::getFilesForUpdate() const
{ {
QList<FileData> *completeList = filesForUpdate; QList<FileData> *completeList = emit sigGetUpdateList();
for (int i = 0; i < completeList->count();i++) for (int i = 0; i < completeList->count();i++)
{ {
@@ -70,5 +101,5 @@ QList<FileData> *HashComparer::getFilesForUpdate() const
completeList->replace(i,data); completeList->replace(i,data);
} }
return filesForUpdate; return completeList;
} }

View File

@@ -23,10 +23,15 @@ public:
signals: signals:
void sigCallCheck(); void sigCallCheck();
void sigHaveDelta(); void sigHaveDelta();
void sigAddToList(FileData local, FileData server);
QList<FileData> *sigGetUpdateList() const;
private: private:
UpdateNotifyWidget* updateWidget; UpdateNotifyWidget* updateWidget;
QList<FileData> *filesForUpdate; QList<FileData> *filesForUpdate;
QList<FileData> *serverFiles;
VersionContainer *versionContainer; VersionContainer *versionContainer;
quint32 findIndexByPath(const QList<FileData> &serverStreamingHash, QString path);
}; };
#endif // HASHCOMPARER_H #endif // HASHCOMPARER_H

View File

@@ -69,14 +69,6 @@ void PostProcessorSystem::compareFiles()
updateController->updateFilesOnServer(hashComparer->getFilesForUpdate()); updateController->updateFilesOnServer(hashComparer->getFilesForUpdate());
} }
void PostProcessorSystem::checkAccessType(const QString& type)
{
if(type == "instructor")
{
emit sigCallUpdateList();
}
}
void PostProcessorSystem::saveLoginData(ServerAuthorization *auth) void PostProcessorSystem::saveLoginData(ServerAuthorization *auth)
{ {
emit sigSaveLoginData(auth); emit sigSaveLoginData(auth);

View File

@@ -21,7 +21,6 @@ public:
void serverBlocked(); void serverBlocked();
void startCompare(); void startCompare();
void compareFiles(); void compareFiles();
void checkAccessType(const QString& type);
void saveLoginData(ServerAuthorization *auth); void saveLoginData(ServerAuthorization *auth);
void setServerVersion(StreamingVersionData *serverVersion); void setServerVersion(StreamingVersionData *serverVersion);
void calculateCommonHash(); void calculateCommonHash();

View File

@@ -1,13 +1,15 @@
#include "Core/recognizesystem.h" #include "Core/recognizesystem.h"
#include <QMessageBox>
RecognizeSystem::RecognizeSystem(QObject *parent): RecognizeSystem::RecognizeSystem(QObject *parent):
QObject(parent), QObject(parent),
versionContainer(nullptr), versionContainer(nullptr),
dataParser(nullptr), dataParser(nullptr),
postProcessorSystem(nullptr) postProcessorSystem(nullptr),
client(nullptr)
{ {
packetType = PacketType::TYPE_NONE; packetType = PacketType::TYPE_NONE;
filePath.clear(); filePath = "";
fileSize = 0; fileSize = 0;
sizeReceiveData = 0; sizeReceiveData = 0;
tmpBlock.clear(); tmpBlock.clear();
@@ -17,66 +19,74 @@ RecognizeSystem::RecognizeSystem(QObject *parent):
void RecognizeSystem::initialize(DataParser *dataParser, VersionContainer *versionContainer,PostProcessorSystem *postProcessorSystem,Client *client) void RecognizeSystem::initialize(DataParser *dataParser, VersionContainer *versionContainer,PostProcessorSystem *postProcessorSystem,Client *client)
{ {
this->versionContainer = versionContainer; this->versionContainer = versionContainer;
this->postProcessorSystem = postProcessorSystem;
this->dataParser = dataParser; this->dataParser = dataParser;
this->postProcessorSystem = postProcessorSystem;
this->client = client; this->client = client;
} }
void RecognizeSystem::recognize(QTcpSocket *socket) void RecognizeSystem::recognize(QTcpSocket *socket)
{ {
qDebug() << "RecognizeThreadId " << QThread::currentThreadId(); //qDebug() << "RecognizeThreadId " << QThread::currentThreadId();
QDataStream stream(socket); QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
while(socket->bytesAvailable()) int cntBytesAvl = 0;
while((cntBytesAvl = socket->bytesAvailable()) > 0)
{ {
if (socket->state() != QTcpSocket::ConnectedState)
{
qDebug() << "RecognizeSystem::recognize socket->state() != QTcpSocket::ConnectedState";
return;
}
if (socket->state() != QTcpSocket::ConnectedState) return; if(packetType == PacketType::TYPE_NONE) //определение первичного пакета
{
if(packetType == PacketType::TYPE_NONE){ //определение первичного пакета
stream.startTransaction(); stream.startTransaction();
stream >> packetType; stream >> packetType;
if(!stream.commitTransaction()) if(!stream.commitTransaction())
{ {
emit sigSendDebugLog(Tools::getTime() + " CLIENT: packetType - FAIL commitTransaction"); socket->waitForReadyRead(TCP_READ_TIMEOUT);
if(socket->waitForReadyRead(TCP_READ_TIMEOUT)){
emit sigSendDebugLog("ERROR: PACKET TYPE READ TIMEOUT");
return;
}
continue; continue;
} }
//qDebug() << Tools::GetTime() << "CLIENT: type: " << packetType; //qDebug() << Tools::GetTime() << "CLIENT: type: " << packetType;
if(packetType == PacketType::TYPE_FILE)
socket->waitForReadyRead(10);
else
socket->waitForReadyRead(100);
} }
if(packetType == PacketType::TYPE_FOLDER){ //создание папок
switch ((int)packetType)
{
case PacketType::TYPE_FOLDER: //создание папок
{
stream.startTransaction(); stream.startTransaction();
stream >> filePath; stream >> filePath;
if(!stream.commitTransaction()){ if(!stream.commitTransaction())
{
socket->waitForReadyRead(TCP_READ_TIMEOUT);
continue; continue;
} }
filePath = Tools::createReceiveFullPath(filePath,versionContainer->getServerVersionData()); filePath = Tools::createReceiveFullPath(filePath,versionContainer->getServerVersionData());
QDir dir(filePath); QDir dir(filePath);
if(!dir.exists()){ if(!dir.exists())
if(dir.mkpath(filePath)){ {
qDebug() << "Dir Created"; if(dir.mkpath(filePath))
{
qDebug() << "Dir Created: " << filePath;
} }
} }
packetType = PacketType::TYPE_NONE;
emit sigUpdateBytesAvailable(); emit sigUpdateBytesAvailable();
continue;
} }
break;
if(packetType == PacketType::TYPE_FILE) //загрузка файлов case PacketType::TYPE_FILE: //загрузка файлов
{ {
//ПОЛУЧЕНИЕ ПУТИ //ПОЛУЧЕНИЕ ПУТИ
//ПОЛУЧЕНИЕ РАЗМЕРА ФАЙЛА //ПОЛУЧЕНИЕ РАЗМЕРА ФАЙЛА
@@ -86,15 +96,11 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
stream >> filePath; stream >> filePath;
stream >> fileSize; stream >> fileSize;
if(!stream.commitTransaction()){ if(!stream.commitTransaction())
{
emit sigSendDebugLog(Tools::getTime() + "CLIENT: filePath, fileSize - FAIL commitTransaction"); emit sigSendDebugLog(Tools::getTime() + "CLIENT: filePath, fileSize - FAIL commitTransaction");
socket->waitForReadyRead(TCP_READ_TIMEOUT);
if (!socket->waitForReadyRead(TCP_READ_TIMEOUT)) {
emit sigSendDebugLog(Tools::getTime() + "CLIENT: ERROR! readyRead timeout - filePath, fileSize!!!");
return;
}
continue; continue;
} }
filePath = Tools::createReceiveFullPath(filePath,versionContainer->getServerVersionData()); filePath = Tools::createReceiveFullPath(filePath,versionContainer->getServerVersionData());
@@ -102,11 +108,10 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
emit sigSendDebugLog("CLIENT: filesize: " + QString::number(fileSize)); emit sigSendDebugLog("CLIENT: filesize: " + QString::number(fileSize));
emit sigSendDebugLog("CLIENT: filePath: " + filePath); emit sigSendDebugLog("CLIENT: filePath: " + filePath);
socket->waitForReadyRead(100); socket->waitForReadyRead(10);
break; break;
} }
//ПОЛУЧЕНИЕ САМОГО ФАЙЛА //ПОЛУЧЕНИЕ САМОГО ФАЙЛА
emit sigSendDebugLog(Tools::getTime() + "AfterRead size and path BytesAvailable: " + socket->bytesAvailable()); emit sigSendDebugLog(Tools::getTime() + "AfterRead size and path BytesAvailable: " + socket->bytesAvailable());
@@ -117,47 +122,70 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
{ {
file.remove(); //удаление файла, если он уже есть, но необходимо обновить file.remove(); //удаление файла, если он уже есть, но необходимо обновить
emit sigSendDebugLog(Tools::getTime() + "Delete exist file: " + filePath); emit sigSendDebugLog(Tools::getTime() + "Delete exist file: " + filePath);
socket->waitForReadyRead(100);
//socket->waitForReadyRead(10);
} }
tmpBlock.clear();
sizeReceiveData = 0;
countSend = 0;
file.open(QFile::WriteOnly);
file.open(QFile::Append); if(! file.isOpen())
QMessageBox::critical(nullptr, "P1", "isOpen false. File: " + file.fileName());
forever if(! file.isWritable())
QMessageBox::critical(nullptr, "P2", "isWritable false. File: " + file.fileName());
while(true)
{ {
stream.startTransaction();
stream >> tmpBlock;
if(!stream.commitTransaction()){ if(socket->bytesAvailable() <= 0)
{
if(socket->state() == QAbstractSocket::UnconnectedState){ socket->waitForReadyRead(10);
postProcessorSystem->socketDisable();
//emit sigSocketDisabled();
return;
}
if(socket->waitForReadyRead(TCP_READ_TIMEOUT)){
continue; continue;
} }
if(fileSize - sizeReceiveData >= BLOCK_SIZE)
tmpBlock = socket->read(BLOCK_SIZE);
else
tmpBlock = socket->read(fileSize - sizeReceiveData);
qint64 bytesReceived = tmpBlock.length();
if(bytesReceived <= 0)
{
//QMessageBox::critical(nullptr, "P3", "bytesReceived <= 0. File: " + file.fileName());
continue; continue;
} }
quint64 toFile = file.write(tmpBlock); sizeReceiveData += bytesReceived;
emit sigSendDebugLog(Tools::getTime() + "CLIENT: toFile :" + toFile);
sizeReceiveData += toFile;
countSend++; countSend++;
qint64 toFile = file.write(tmpBlock);
if(toFile <= 0)
{
//emit sigUpdateBytesAvailable();
QMessageBox::critical(nullptr, "P4", "write toFile <= 0. File: " + file.fileName());
continue;
}
tmpBlock.clear(); tmpBlock.clear();
if(sizeReceiveData == fileSize){ if(sizeReceiveData == fileSize)
{
emit sigSendDebugLog(Tools::getTime() + "FINAL Count send: " + QString::number(countSend)); emit sigSendDebugLog(Tools::getTime() + "FINAL Count send: " + QString::number(countSend));
emit sigSendDebugLog(Tools::getTime() + "FINAL Size received: " + QString::number(sizeReceiveData)); emit sigSendDebugLog(Tools::getTime() + "FINAL Size received: " + QString::number(sizeReceiveData));
emit sigSendDebugLog(Tools::getTime() + "FINAL File size" + QString::number(fileSize)); emit sigSendDebugLog(Tools::getTime() + "FINAL File size" + QString::number(fileSize));
emit sigUpdateBytesAvailable(); emit sigUpdateBytesAvailable();
break; break;
} }
else if(sizeReceiveData > fileSize)
{
QMessageBox::critical(nullptr, "P5", "sizeReceiveData > fileSize");
}
} }
file.close(); file.close();
@@ -171,13 +199,16 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
sizeReceiveData = 0; sizeReceiveData = 0;
countSend = 0; countSend = 0;
} }
break;
if(packetType == PacketType::TYPE_DELETE) //удаление лишних файлов (рекурсивно удаляет все содежимое) case PacketType::TYPE_DELETE: //удаление лишних файлов (рекурсивно удаляет все содежимое)
{ {
stream.startTransaction(); stream.startTransaction();
stream >> filePath; stream >> filePath;
if(!stream.commitTransaction()){ if(!stream.commitTransaction())
{
socket->waitForReadyRead(TCP_READ_TIMEOUT);
continue; continue;
} }
@@ -185,7 +216,6 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
QFileInfo fileInfo(filePath); QFileInfo fileInfo(filePath);
if(fileInfo.exists()) if(fileInfo.exists())
{ {
if(fileInfo.isFile()) if(fileInfo.isFile())
@@ -194,22 +224,19 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
file.remove(); file.remove();
} }
if(fileInfo.isDir()){ if(fileInfo.isDir())
{
QDir dir(filePath); QDir dir(filePath);
dir.removeRecursively(); dir.removeRecursively();
} }
qDebug() << Tools::getTime() << "Deleted: " << filePath; qDebug() << Tools::getTime() << "Deleted: " << filePath;
} }
packetType = PacketType::TYPE_NONE;
continue;
} }
break;
if(packetType == PacketType::TYPE_NEEDUPDATE) case PacketType::TYPE_NEEDUPDATE: //нужно обновление
{ //нужно обновление {
bool flag = false; bool flag = false;
quint64 size = 0; quint64 size = 0;
quint64 fileCount = 0; quint64 fileCount = 0;
@@ -221,63 +248,78 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
stream >> fileCount; stream >> fileCount;
stream >> fileDelete; stream >> fileDelete;
if(!stream.commitTransaction()){ if(!stream.commitTransaction())
{
socket->waitForReadyRead(TCP_READ_TIMEOUT);
continue; continue;
} }
emit sigNeedUpdate(flag,size,fileCount,fileDelete); emit sigNeedUpdate(flag,size,fileCount,fileDelete);
packetType = PacketType::TYPE_NONE;
} }
break;
if(packetType == PacketType::TYPE_XMLANSWER){ //ответы формата XML case PacketType::TYPE_XMLANSWER: //ответы формата XML
{
QByteArray array; QByteArray array;
stream.startTransaction(); stream.startTransaction();
stream >> array; stream >> array;
if(!stream.commitTransaction()){ if(!stream.commitTransaction())
{
socket->waitForReadyRead(TCP_READ_TIMEOUT);
continue; continue;
} }
dataParser->xmlParser(array); dataParser->xmlParser(array);
packetType = PacketType::TYPE_NONE;
} }
break;
if(packetType == PacketType::HASH_READY) case PacketType::HASH_READY:
{ {
emit sigCheckUpdate(); emit sigCheckUpdate();
} }
break;
if(packetType == PacketType::RECALCULATE_HASH) case PacketType::RECALCULATE_HASH:
{ {
emit sigdRecalculateHashOnServerState(); emit sigdRecalculateHashOnServerState();
} }
break;
if(packetType == PacketType::BUSY) case PacketType::BUSY:
{ {
emit sigAnimationActivated(true); emit sigAnimationActivated(true);
} }
break;
if(packetType == PacketType::FREE) case PacketType::FREE:
{ {
emit sigAnimationActivated(false); emit sigAnimationActivated(false);
} }
break;
if (packetType == PacketType::TYPE_XMLANSWER_DOCS_CHANGED) //на случай общего обновления case PacketType::TYPE_XMLANSWER_DOCS_CHANGED: //на случай общего обновления
{ {
if (client->getIsLoggedIn()) if (client->getIsLoggedIn())
{ {
emit sigSendPacketType(PacketType::GET_DOCS); emit sigSendPacketType(PacketType::GET_DOCS);
} }
} }
break;
if (packetType == PacketType::UPDATE_FILE_COMPLETE) case PacketType::UPDATE_FILE_COMPLETE:
{ {
postProcessorSystem->calculateCommonHash(); postProcessorSystem->calculateCommonHash();
emit sigLoadComplete(); emit sigLoadComplete();
emit sigSendPacketType(PacketType::GET_DOCS); emit sigSendPacketType(PacketType::GET_DOCS);
packetType = PacketType::TYPE_NONE;
} }
break;
default:
qCritical() << "RecognizeSystem::recognize packetType unknown!";
}
//socket->waitForReadyRead(10);
packetType = PacketType::TYPE_NONE; packetType = PacketType::TYPE_NONE;
} }

View File

@@ -14,6 +14,8 @@
#include <Data\streamingversiondata.h> #include <Data\streamingversiondata.h>
#include <Core\hashcomparer.h> #include <Core\hashcomparer.h>
const int BLOCK_SIZE = 1024 * 1024; // Размер блока
class RecognizeSystem : public QObject class RecognizeSystem : public QObject
{ {
Q_OBJECT Q_OBJECT
@@ -21,8 +23,10 @@ class RecognizeSystem : public QObject
public: public:
explicit RecognizeSystem(QObject *parent = 0); explicit RecognizeSystem(QObject *parent = 0);
~RecognizeSystem(){}; ~RecognizeSystem(){};
void initialize(DataParser *dataParser, VersionContainer* versionContainer,PostProcessorSystem *postProcessorSystem,Client *client); void initialize(DataParser *dataParser, VersionContainer* versionContainer,PostProcessorSystem *postProcessorSystem,Client *client);
void recognize(QTcpSocket *socket); void recognize(QTcpSocket *socket);
signals: signals:
void sigUpdateBytesAvailable(); void sigUpdateBytesAvailable();
void sigLoadComplete(); void sigLoadComplete();
@@ -34,19 +38,19 @@ signals:
void sigSendPacketType(PacketType packetType); void sigSendPacketType(PacketType packetType);
void sigSendPacketTypeWithDelay(PacketType packetType,int delay); void sigSendPacketTypeWithDelay(PacketType packetType,int delay);
void sigSendToInlineLog(QString message); void sigSendToInlineLog(QString message);
void sigCallUpdateList(); //void sigCallUpdateList();
private: private:
VersionContainer *versionContainer; VersionContainer *versionContainer;
DataParser *dataParser; DataParser *dataParser;
PostProcessorSystem *postProcessorSystem; PostProcessorSystem *postProcessorSystem;
PacketType packetType;
QString filePath;
QByteArray tmpBlock;
Client *client; Client *client;
qint64 sizeReceiveData; PacketType packetType;
QString filePath;
qint64 fileSize; qint64 fileSize;
qint64 sizeReceiveData;
QByteArray tmpBlock;
int countSend; int countSend;
}; };

View File

@@ -8,6 +8,7 @@ struct FileData
{ {
QString path; QString path;
QString hash; QString hash;
QString lastUpdate;
bool operator==(const FileData& other)const bool operator==(const FileData& other)const
{ {

View File

@@ -32,6 +32,7 @@ SOURCES += \
Core\tools.cpp\ Core\tools.cpp\
Core\hashcomparer.cpp \ Core\hashcomparer.cpp \
UI/resourcemanager.cpp \ UI/resourcemanager.cpp \
Widgets/updatefileslot.cpp \
Widgets/waitanimationwidget.cpp \ Widgets/waitanimationwidget.cpp \
Widgets\commonbuttongroupwidget.cpp \ Widgets\commonbuttongroupwidget.cpp \
Widgets\entrywidget.cpp \ Widgets\entrywidget.cpp \
@@ -66,6 +67,7 @@ HEADERS += \
Data\FileData.h\ Data\FileData.h\
Data\Datas.h \ Data\Datas.h \
UI/resourcemanager.h \ UI/resourcemanager.h \
Widgets/updatefileslot.h \
Widgets/waitanimationwidget.h \ Widgets/waitanimationwidget.h \
Widgets\commonbuttongroupwidget.h \ Widgets\commonbuttongroupwidget.h \
Widgets\entrywidget.h \ Widgets\entrywidget.h \
@@ -78,6 +80,7 @@ HEADERS += \
widgetmanager.h widgetmanager.h
FORMS += \ FORMS += \
Widgets/updatefileslot.ui \
Widgets/waitanimationwidget.ui \ Widgets/waitanimationwidget.ui \
Widgets\commonbuttongroupwidget.ui \ Widgets\commonbuttongroupwidget.ui \
Widgets\entrywidget.ui \ Widgets\entrywidget.ui \

2
StaticData/authData.xml Normal file
View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<AuthData Login="I3" Password="2be9bd7a3434f7038ca27d1918de58bd" InstructorName="Моськин В.М." ClientName="Моськин В.М." AccessType="instructor"/>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<ServerSettingsContainer> <ServerSettingsContainer>
<ServerSettings AutoStart="0" Port="6000" Address="192.168.100.134" Language="RUS"/> <ServerSettings Port="6000" Address="192.168.100.83" Language="RUS" AutoStart="0"/>
<VersionData Created="Пн дек 22 15:46:11 2025" isChangable="1" Version="max2"/> <VersionData Version="customND" isChangable="1" Created="Пт мар 6 10:49:55 2026"/>
</ServerSettingsContainer> </ServerSettingsContainer>

File diff suppressed because it is too large Load Diff

View File

@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ClientNotify Code="DISABLE"/> <ClientNotify Code="GETSERVERDATALIST"/>

View File

@@ -15,7 +15,9 @@ void CommonButtonGroupWidget::initialize()
ui->updateButton->hide(); ui->updateButton->hide();
ui->startButton->hide(); ui->startButton->hide();
ui->startButton->setEnabled(false); ui->startButton->setEnabled(false);
ui->offlineStartButton->hide();
show(); show();
down = ui->downlayout;
} }
void CommonButtonGroupWidget::updateProgressBar(float value) void CommonButtonGroupWidget::updateProgressBar(float value)
@@ -23,13 +25,19 @@ void CommonButtonGroupWidget::updateProgressBar(float value)
ui->loadingProgressBar->setValue(value); ui->loadingProgressBar->setValue(value);
} }
QHBoxLayout *CommonButtonGroupWidget::getDown() const
{
return down;
}
void CommonButtonGroupWidget::loadCompleteState() void CommonButtonGroupWidget::loadCompleteState()
{ {
show(); show();
ui->updateButton->hide(); ui->updateButton->hide();
ui->startButton->setEnabled(true); ui->startButton->setEnabled(true);
ui->loadingProgressBar->setValue(100);
ui->startButton->show(); ui->startButton->show();
ui->offlineStartButton->show();
ui->loadingProgressBar->setValue(100);
ui->loadingProgressBar->hide(); ui->loadingProgressBar->hide();
} }
@@ -39,7 +47,9 @@ void CommonButtonGroupWidget::lastVerInstalledState()
ui->updateButton->hide(); ui->updateButton->hide();
ui->loadingProgressBar->hide(); ui->loadingProgressBar->hide();
ui->startButton->setEnabled(true); ui->startButton->setEnabled(true);
hideSpacer(true);
ui->startButton->show(); ui->startButton->show();
ui->offlineStartButton->show();
} }
void CommonButtonGroupWidget::disconnectState() void CommonButtonGroupWidget::disconnectState()
@@ -48,16 +58,32 @@ void CommonButtonGroupWidget::disconnectState()
ui->loadingProgressBar->hide(); ui->loadingProgressBar->hide();
ui->updateButton->hide(); ui->updateButton->hide();
ui->updateButton->setEnabled(false); ui->updateButton->setEnabled(false);
ui->offlineStartButton->hide();
hideSpacer(false);
} }
void CommonButtonGroupWidget::startUpdateState() void CommonButtonGroupWidget::startUpdateState()
{ {
ui->updateButton->hide(); ui->updateButton->hide();
ui->startButton->hide(); ui->startButton->hide();
ui->offlineStartButton->hide();
ui->loadingProgressBar->setValue(0); ui->loadingProgressBar->setValue(0);
ui->loadingProgressBar->show(); ui->loadingProgressBar->show();
} }
void CommonButtonGroupWidget::loginState()
{
bool isAvailable = emit sigAppAvailable();
if (isAvailable)
{
ui->offlineStartButton->show();
}
else
{
ui->offlineStartButton->hide();
}
}
void CommonButtonGroupWidget::showProgressBar(bool flag) void CommonButtonGroupWidget::showProgressBar(bool flag)
{ {
if (flag) ui->loadingProgressBar->show(); if (flag) ui->loadingProgressBar->show();
@@ -67,6 +93,7 @@ void CommonButtonGroupWidget::showProgressBar(bool flag)
void CommonButtonGroupWidget::needUpdateState(bool flag) void CommonButtonGroupWidget::needUpdateState(bool flag)
{ {
show(); show();
hideSpacer(true);
ui->loadingProgressBar->hide(); ui->loadingProgressBar->hide();
ui->startButton->hide(); ui->startButton->hide();
ui->updateButton->setEnabled(flag); ui->updateButton->setEnabled(flag);
@@ -75,6 +102,9 @@ void CommonButtonGroupWidget::needUpdateState(bool flag)
void CommonButtonGroupWidget::startButtonActive(bool flag) void CommonButtonGroupWidget::startButtonActive(bool flag)
{ {
if(flag) ui->offlineStartButton->show();
else ui->offlineStartButton->hide();
ui->startButton->setEnabled(flag); ui->startButton->setEnabled(flag);
} }
@@ -96,6 +126,13 @@ CommonButtonGroupWidget::~CommonButtonGroupWidget()
delete ui; delete ui;
} }
void CommonButtonGroupWidget::hideSpacer(bool flag)
{
if(flag) ui->horizontalSpacer->changeSize(0,0,QSizePolicy::Fixed,QSizePolicy::Fixed);
else ui->horizontalSpacer->changeSize(40,20,QSizePolicy::Expanding,QSizePolicy::Minimum);
}
void CommonButtonGroupWidget::on_offlineStartButton_clicked()
{
emit sigStartOfflineUnityClient();
}

View File

@@ -1,6 +1,7 @@
#ifndef COMMONBUTTONGROUPWIDGET_H #ifndef COMMONBUTTONGROUPWIDGET_H
#define COMMONBUTTONGROUPWIDGET_H #define COMMONBUTTONGROUPWIDGET_H
#include <QHBoxLayout>
#include <QWidget> #include <QWidget>
#include <Core/tcpclient.h> #include <Core/tcpclient.h>
@@ -20,6 +21,7 @@ public:
void lastVerInstalledState(); void lastVerInstalledState();
void disconnectState(); void disconnectState();
void startUpdateState(); void startUpdateState();
void loginState();
void showProgressBar(bool flag); void showProgressBar(bool flag);
void needUpdateState(bool flag); void needUpdateState(bool flag);
void startButtonActive(bool flag); void startButtonActive(bool flag);
@@ -28,16 +30,22 @@ signals:
void sigSendPacket(PacketType packet); void sigSendPacket(PacketType packet);
void sigUpdateCommonWidget(); void sigUpdateCommonWidget();
void sigStartUnityClient(); void sigStartUnityClient();
void sigStartOfflineUnityClient();
bool sigAppAvailable();
private slots: private slots:
void on_updateButton_clicked(); void on_updateButton_clicked();
void on_startButton_clicked(); void on_startButton_clicked();
void on_offlineStartButton_clicked();
public: public:
void updateProgressBar(float value); void updateProgressBar(float value);
QHBoxLayout *getDown() const;
private: private:
Ui::CommonButtonGroupWidget *ui; Ui::CommonButtonGroupWidget *ui;
QHBoxLayout *down;
void hideSpacer(bool flag);
}; };
#endif // COMMONBUTTONGROUPWIDGET_H #endif // COMMONBUTTONGROUPWIDGET_H

View File

@@ -6,12 +6,12 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>520</width> <width>763</width>
<height>45</height> <height>45</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
@@ -30,12 +30,12 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>520</width> <width>761</width>
<height>45</height> <height>45</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
@@ -99,14 +99,14 @@
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum"> <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>100</width> <width>500</width>
<height>35</height> <height>35</height>
</size> </size>
</property> </property>
@@ -143,7 +143,7 @@
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>100</width> <width>500</width>
<height>35</height> <height>35</height>
</size> </size>
</property> </property>
@@ -158,6 +158,47 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="offlineStartButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>250</width>
<height>0</height>
</size>
</property>
<property name="sizeIncrement">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Запуск в автономном режиме</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</widget> </widget>

View File

@@ -7,7 +7,8 @@
EntryWidget::EntryWidget(QWidget *parent) : EntryWidget::EntryWidget(QWidget *parent) :
QWidget(parent), QWidget(parent),
ui(new Ui::EntryWidget) ui(new Ui::EntryWidget),
isAppAvailable(false)
{ {
ui->setupUi(this); ui->setupUi(this);
} }
@@ -22,6 +23,7 @@ void EntryWidget::initialize()
void EntryWidget::disconnectState() void EntryWidget::disconnectState()
{ {
show(); show();
setAppAvailable(emit sigAppAvalable());
ui->offlineWidget->show(); ui->offlineWidget->show();
ui->loginWidget->hide(); ui->loginWidget->hide();
} }
@@ -69,7 +71,6 @@ void EntryWidget::fillSettings(Settings *settings)
{ {
ui->serverInputField->setText(settings->Address); ui->serverInputField->setText(settings->Address);
ui->portInputField->setText(settings->Port); ui->portInputField->setText(settings->Port);
//ui->mathModelUsecheckBox->setChecked(settings->mathModelUse);
} }
void EntryWidget::isActive(bool flag) void EntryWidget::isActive(bool flag)
@@ -83,6 +84,22 @@ bool EntryWidget::getLoginWidgetIsHidden()
return ui->loginWidget->isHidden(); return ui->loginWidget->isHidden();
} }
void EntryWidget::setAppAvailable(bool flag)
{
isAppAvailable = flag;
if (flag)
{
QString text = tr("Связь с сервером не установлена! Проверьте настройки или запустите в автономном режиме");
ui->offlineNotifyLabel->setText(text);
}
else
{
QString text = tr("Связь с сервером не установлена! Проверьте настройки подключения и загрузите клиент с сервера");
ui->offlineNotifyLabel->setText(text);
}
}
QString EntryWidget::getAddress(){ QString EntryWidget::getAddress(){
return ui->serverInputField->text(); return ui->serverInputField->text();
} }

View File

@@ -23,6 +23,7 @@ public:
void fillSettings(Settings *settings); void fillSettings(Settings *settings);
void isActive(bool flag); void isActive(bool flag);
bool getLoginWidgetIsHidden(); bool getLoginWidgetIsHidden();
void setAppAvailable(bool flag);
ClientAutorization* getAuthData(); ClientAutorization* getAuthData();
QString getAddress(); QString getAddress();
@@ -30,6 +31,7 @@ public:
signals: signals:
void sigTryLogin(); void sigTryLogin();
void sigSaveServerSettings(); void sigSaveServerSettings();
bool sigAppAvalable();
private slots: private slots:
void on_loginButton_clicked(); void on_loginButton_clicked();
@@ -37,6 +39,7 @@ private slots:
private: private:
Ui::EntryWidget *ui; Ui::EntryWidget *ui;
bool isAppAvailable;
}; };
#endif // ENTRYWIDGET_H #endif // ENTRYWIDGET_H

View File

@@ -351,7 +351,7 @@
<string notr="true"/> <string notr="true"/>
</property> </property>
<property name="text"> <property name="text">
<string>Связь с сервером не установлена! Проверьте настройки или запустите в автономном режиме</string> <string>тест</string>
</property> </property>
<property name="scaledContents"> <property name="scaledContents">
<bool>true</bool> <bool>true</bool>

View File

@@ -0,0 +1,87 @@
#include "updatefileslot.h"
#include "ui_updatefileslot.h"
#include <QDateTime>
UpdateFileSlot::UpdateFileSlot(QWidget *parent) :
QWidget(parent),
ui(new Ui::UpdateFileSlot),
needUpdate(false)
{
ui->setupUi(this);
}
void UpdateFileSlot::fill(QString itemName, FileData serverData, FileData localData)
{
ui->Path->setText(itemName);
local = localData;
bool haveData = serverData.lastUpdate != "нет";
QString result = " Сервер: ";
QDateTime serverFileTime;
if (haveData)
{
serverFileTime = QDateTime::fromString(serverData.lastUpdate,"dd.MM.yyyy hh:mm:ss");
result.append(serverFileTime.toString("dd.MM.yyyy"));
}
else
{
result.append("НЕТ");
}
QDateTime localFileTime = QDateTime::fromString(localData.lastUpdate,"dd.MM.yyyy hh:mm:ss");
result.append(" Локально: ");
result.append(localFileTime.toString("dd.MM.yyyy"));
ui->Dates->setText(result);
bool newest = localFileTime > serverFileTime;
ui->UpdateCheckBox->setChecked(newest);
QPixmap pixmap;
if (newest)
{
pixmap.load(":/resource/Icons/new.png");
}
else
{
pixmap.load(nullptr);
}
QPixmap scaled = pixmap.scaled(ui->Image->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
ui->Image->setPixmap(scaled);
}
UpdateFileSlot::~UpdateFileSlot()
{
delete ui;
}
FileData UpdateFileSlot::getLocal() const
{
return local;
}
bool UpdateFileSlot::getNeedUpdate() const
{
return needUpdate;
}
void UpdateFileSlot::setNeedUpdate(bool value)
{
needUpdate = value;
}
void UpdateFileSlot::on_UpdateCheckBox_stateChanged(int arg1)
{
if (ui->UpdateCheckBox->checkState() == Qt::Checked)
{
needUpdate = true;
}
else if (ui->UpdateCheckBox->checkState() == Qt::Unchecked)
{
needUpdate = false;
}
}

36
Widgets/updatefileslot.h Normal file
View File

@@ -0,0 +1,36 @@
#ifndef UPDATEFILESLOT_H
#define UPDATEFILESLOT_H
#include <QWidget>
#include <Data/FileData.h>
namespace Ui {
class UpdateFileSlot;
}
class UpdateFileSlot : public QWidget
{
Q_OBJECT
public:
explicit UpdateFileSlot(QWidget *parent = nullptr);
void fill(QString itemName, FileData serverData, FileData localData);
bool getNeedUpdate() const;
void setNeedUpdate(bool value);
FileData getLocal() const;
~UpdateFileSlot();
private slots:
void on_UpdateCheckBox_stateChanged(int arg1);
private:
Ui::UpdateFileSlot *ui;
FileData local;
bool needUpdate;
};
#endif // UPDATEFILESLOT_H

79
Widgets/updatefileslot.ui Normal file
View File

@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>UpdateFileSlot</class>
<widget class="QWidget" name="UpdateFileSlot">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>789</width>
<height>40</height>
</rect>
</property>
<property name="windowTitle">
<string>Frame</string>
</property>
<widget class="QWidget" name="horizontalLayoutWidget">
<property name="geometry">
<rect>
<x>30</x>
<y>0</y>
<width>701</width>
<height>41</height>
</rect>
</property>
<layout class="QHBoxLayout" name="mainLayout">
<item>
<widget class="QLabel" name="Path">
<property name="text">
<string>/RUS/Scens/XXX-X-XX-XX-XX-XXXXXX-XXXX-X</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="Dates">
<property name="text">
<string>XXXXXXX XXxXXxXXX XXXXXXXXx XXxXXxXXXX</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QLabel" name="Image">
<property name="geometry">
<rect>
<x>735</x>
<y>-4</y>
<width>51</width>
<height>51</height>
</rect>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../resources.qrc">:/resource/Icons/new.png</pixmap>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
<widget class="QCheckBox" name="UpdateCheckBox">
<property name="geometry">
<rect>
<x>6</x>
<y>10</y>
<width>21</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
</widget>
<resources>
<include location="../resources.qrc"/>
</resources>
<connections/>
</ui>

View File

@@ -28,11 +28,18 @@ void UpdateNotifyWidget::setVersionContainer(VersionContainer *versionContainer)
this->versionContainer = versionContainer; this->versionContainer = versionContainer;
} }
void UpdateNotifyWidget::addToList(FileData fileData) void UpdateNotifyWidget::addToList(FileData localFileData,FileData serverFileData)
{ {
QString itemName = fileData.path; QString itemName = localFileData.path;
itemName = itemName.remove(streamingAssetsPath); itemName = itemName.remove(streamingAssetsPath);
ui->updateListWidget->addItem(itemName); UpdateFileSlot *slot = new UpdateFileSlot();
QListWidgetItem *widgetItem = new QListWidgetItem();
widgetItem->setSizeHint(QSize(slot->width(),slot->height()));
ui->updateListWidget->addItem(widgetItem);
ui->updateListWidget->setItemWidget(widgetItem,slot);
slot->fill(itemName,serverFileData,localFileData);
} }
void UpdateNotifyWidget::showTryChangeBase() void UpdateNotifyWidget::showTryChangeBase()
@@ -124,6 +131,24 @@ void UpdateNotifyWidget::closeWindow()
on_closeButton_clicked(); on_closeButton_clicked();
} }
QList<FileData> *UpdateNotifyWidget::getUpdateList()
{
QList<FileData> *realUpdateList = new QList<FileData>();
for (int i = 0; i < ui->updateListWidget->count(); i++) {
QListWidgetItem *item = ui->updateListWidget->item(i);
UpdateFileSlot *slot = qobject_cast<UpdateFileSlot*>(ui->updateListWidget->itemWidget(item));
if (slot && slot->getNeedUpdate())
{
realUpdateList->append(slot->getLocal());
}
}
return realUpdateList;
}
void UpdateNotifyWidget::setUpdateState() void UpdateNotifyWidget::setUpdateState()
{ {
ui->undoChangesButton->show(); ui->undoChangesButton->show();

View File

@@ -7,6 +7,7 @@
#include <Data/FileData.h> #include <Data/FileData.h>
#include <Core/versioncontainer.h> #include <Core/versioncontainer.h>
#include <Widgets/updatefileslot.h>
namespace Ui { namespace Ui {
class UpdateNotifyWidget; class UpdateNotifyWidget;
@@ -21,11 +22,12 @@ public:
explicit UpdateNotifyWidget(QWidget *parent = nullptr); explicit UpdateNotifyWidget(QWidget *parent = nullptr);
~UpdateNotifyWidget(); ~UpdateNotifyWidget();
void initialize(QPoint startPos); void initialize(QPoint startPos);
void addToList(FileData fileData); void addToList(FileData localFileData,FileData serverFileData);
void showWithFill(); void showWithFill();
void showTryChangeBase(); void showTryChangeBase();
void setVersionContainer(VersionContainer *versionContainer); void setVersionContainer(VersionContainer *versionContainer);
void closeWindow(); void closeWindow();
QList<FileData> *getUpdateList();
signals: signals:
void sigLoadToServerBehaviour(); void sigLoadToServerBehaviour();
void sigUndoCurrentChanges(); void sigUndoCurrentChanges();

View File

@@ -70,7 +70,7 @@
</sizepolicy> </sizepolicy>
</property> </property>
<property name="text"> <property name="text">
<string>Обнаружены новые файлы:</string> <string>Обнаружены новые или измененные файлы:</string>
</property> </property>
<property name="openExternalLinks"> <property name="openExternalLinks">
<bool>false</bool> <bool>false</bool>

View File

@@ -12,6 +12,7 @@ void Bootstrap::initialize()
{ {
qRegisterMetaType<PacketType>("PacketType"); qRegisterMetaType<PacketType>("PacketType");
qRegisterMetaType<ErrorsEnum>("ErrorsEnum"); qRegisterMetaType<ErrorsEnum>("ErrorsEnum");
qRegisterMetaType<FileData>("FileData");
widgetManager->initialize(); widgetManager->initialize();
coreManager->initialize(widgetManager, workerThread); coreManager->initialize(widgetManager, workerThread);

View File

@@ -47,7 +47,7 @@ void CoreManager::initialize(WidgetManager *widgetManager,QThread *workerThread)
void CoreManager::start() void CoreManager::start()
{ {
checkAppAvailable(); //checkAppAvailable();
} }
void CoreManager::loadStaticData() void CoreManager::loadStaticData()
@@ -56,8 +56,6 @@ void CoreManager::loadStaticData()
setLanguage(settings->Language); setLanguage(settings->Language);
setLocalVersion(); setLocalVersion();
externalExecuter->setIsAutoStart(settings->isAutoStart); externalExecuter->setIsAutoStart(settings->isAutoStart);
bool appAvailable = externalExecuter->findApp();
widgetManager->setAppAvailable(appAvailable);
emit sigSetLoadSettings(settings); emit sigSetLoadSettings(settings);
} }
@@ -94,7 +92,6 @@ void CoreManager::binding()
connect(recognizeSystem,&RecognizeSystem::sigSendPacketType,this,&CoreManager::sendPacketType,Qt::AutoConnection); connect(recognizeSystem,&RecognizeSystem::sigSendPacketType,this,&CoreManager::sendPacketType,Qt::AutoConnection);
connect(recognizeSystem,&RecognizeSystem::sigSendPacketTypeWithDelay,sendSystem,&SendSystem::sendPacketTypeWithDelay,Qt::AutoConnection); connect(recognizeSystem,&RecognizeSystem::sigSendPacketTypeWithDelay,sendSystem,&SendSystem::sendPacketTypeWithDelay,Qt::AutoConnection);
connect(recognizeSystem,&RecognizeSystem::sigSendToInlineLog,this,&CoreManager::setInlineDebug,Qt::AutoConnection); connect(recognizeSystem,&RecognizeSystem::sigSendToInlineLog,this,&CoreManager::setInlineDebug,Qt::AutoConnection);
connect(recognizeSystem,&RecognizeSystem::sigCallUpdateList,this,&CoreManager::callUpdateList,Qt::AutoConnection);
connect(hashComparer,&HashComparer::sigCallCheck,this,&CoreManager::checkUpdate); connect(hashComparer,&HashComparer::sigCallCheck,this,&CoreManager::checkUpdate);
connect(hashComparer,&HashComparer::sigHaveDelta,this,&CoreManager::checkUpdateInfo); connect(hashComparer,&HashComparer::sigHaveDelta,this,&CoreManager::checkUpdateInfo);
@@ -106,9 +103,12 @@ void CoreManager::binding()
connect(tcpClient,&TCPClient::sigServerDisconnect,widgetManager,&WidgetManager::setServerDisconnectState,Qt::AutoConnection); connect(tcpClient,&TCPClient::sigServerDisconnect,widgetManager,&WidgetManager::setServerDisconnectState,Qt::AutoConnection);
connect(sendSystem,&SendSystem::sigSend,this,&CoreManager::calcUpdateProgress,Qt::AutoConnection); connect(sendSystem,&SendSystem::sigSend,this,&CoreManager::calcUpdateProgress,Qt::AutoConnection);
connect(sendSystem,&SendSystem::sigGetXmlAnswer,dataParserOutput,&DataParserOutput::xmlAnswer_notify,Qt::DirectConnection); connect(sendSystem,&SendSystem::sigGetXmlAnswer,dataParserOutput,&DataParserOutput::xmlAnswer_notify,Qt::DirectConnection);
connect(widgetManager->getEntryWidget(),&EntryWidget::sigAppAvalable,externalExecuter,&ExternalExecuter::findApp,Qt::DirectConnection);
connect(widgetManager->getMainWindow(),&MainWindow::sigAppAvailable,externalExecuter,&ExternalExecuter::findApp,Qt::DirectConnection);
connect(widgetManager->getCommonButtonGroupWidget(),&CommonButtonGroupWidget::sigAppAvailable,externalExecuter,&ExternalExecuter::findApp,Qt::DirectConnection);
connect(widgetManager,&WidgetManager::sigAppAvailable,externalExecuter,&ExternalExecuter::findApp,Qt::DirectConnection);
} }
void CoreManager::initializeSystems() void CoreManager::initializeSystems()
@@ -151,9 +151,10 @@ void CoreManager::initializeWidgets()
connect(widgetManager->getMainWindow(),&MainWindow::sigChangeLanguage,this,&CoreManager::setLanguage,Qt::AutoConnection); connect(widgetManager->getMainWindow(),&MainWindow::sigChangeLanguage,this,&CoreManager::setLanguage,Qt::AutoConnection);
connect(widgetManager->getMainWindow(),&MainWindow::sigShowUpdateInfo,this,&CoreManager::checkUpdateInfo,Qt::AutoConnection); connect(widgetManager->getMainWindow(),&MainWindow::sigShowUpdateInfo,this,&CoreManager::checkUpdateInfo,Qt::AutoConnection);
connect(widgetManager->getMainWindow(),&MainWindow::sigExit,this,&CoreManager::exit,Qt::AutoConnection); connect(widgetManager->getMainWindow(),&MainWindow::sigExit,this,&CoreManager::exit,Qt::DirectConnection);
connect(widgetManager->getMainWindow(),&MainWindow::sigTryLogin,this,&CoreManager::tryLogin,Qt::AutoConnection); connect(widgetManager->getMainWindow(),&MainWindow::sigTryLogin,this,&CoreManager::tryLogin,Qt::AutoConnection);
connect(widgetManager->getMainWindow(),&MainWindow::sigStartOffline,this,&CoreManager::startOffline,Qt::AutoConnection); connect(widgetManager->getMainWindow(),&MainWindow::sigStartOffline,this,&CoreManager::startOffline,Qt::AutoConnection);
connect(widgetManager->getCommonButtonGroupWidget(),&CommonButtonGroupWidget::sigStartOfflineUnityClient,this,&CoreManager::startOffline,Qt::AutoConnection);
} }
@@ -254,11 +255,11 @@ void CoreManager::setInlineDebug(QString text)
void CoreManager::checkAccessType(const QString& accessType) void CoreManager::checkAccessType(const QString& accessType)
{ {
if (accessType == traineeTypeName) if (accessType == traineeTypeName)//если обучаемый вызываем обновление
{ {
checkUpdate(); checkUpdate();
} }
else else //если инструктор запрашивание версионирование
{ {
emit sigSendXMLAnswer(cmd_CheckVersionList); emit sigSendXMLAnswer(cmd_CheckVersionList);
} }
@@ -345,8 +346,6 @@ void CoreManager::undoCurrentChanges()
isRecovery = true; isRecovery = true;
widgetManager->setUndoCurrentChangesState(); widgetManager->setUndoCurrentChangesState();
emit sigSendCheckUpdate(); emit sigSendCheckUpdate();
//emit sigSendPacketType(PacketType::TYPE_UPDATE);
//тут был таймер
isRecovery = false; isRecovery = false;
} }
@@ -380,7 +379,6 @@ void CoreManager::saveServerSettingsWithConnect()
emit sigSendXMLAnswer(cmd_Disable); emit sigSendXMLAnswer(cmd_Disable);
tcpClient->setDisconnect(); tcpClient->setDisconnect();
entryWidget->showLoginWidget(true); entryWidget->showLoginWidget(true);
widgetManager->getMainWindow()->showOfflineButton(true);
widgetManager->activateLoadingAnimation(false); widgetManager->activateLoadingAnimation(false);
} }
@@ -392,12 +390,6 @@ void CoreManager::createNewServerSettings()
dataParserOutput->createServerSettings(); dataParserOutput->createServerSettings();
} }
void CoreManager::checkAppAvailable()
{
bool isAvailable = externalExecuter->findApp();
widgetManager->setAppAvailable(isAvailable);
}
void CoreManager::setLanguage(const QString& language) void CoreManager::setLanguage(const QString& language)
{ {
if (language == "RUS") if (language == "RUS")

View File

@@ -43,9 +43,6 @@ public:
void sendPacketType(PacketType packetType); void sendPacketType(PacketType packetType);
void saveServerSettingsWithConnect(); void saveServerSettingsWithConnect();
void checkAppAvailable();
void exit(); void exit();
void initializeWidgets(); void initializeWidgets();

View File

@@ -13,7 +13,7 @@ MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), : QMainWindow(parent),
ui(new Ui::MainWindow), ui(new Ui::MainWindow),
bottomRightPosition(QRect(530,506,250,40)), bottomRightPosition(QRect(530,506,250,40)),
offlinePosition(240,340,300,40) offlinePosition(240,350,300,40)
{ {
ui->setupUi(this); ui->setupUi(this);
setAttribute(Qt::WA_TranslucentBackground); setAttribute(Qt::WA_TranslucentBackground);
@@ -44,7 +44,8 @@ void MainWindow::initialize(ResourceManager *resourceManager)
bindConnection(); bindConnection();
this->resourceManager = resourceManager; this->resourceManager = resourceManager;
ui->LanguageWidget->hide(); ui->LanguageWidget->hide();
ui->offlineStartButton->setGeometry(offlinePosition);
ui->offlineStartButton->hide();
} }
void MainWindow::setStartState() void MainWindow::setStartState()
@@ -74,9 +75,7 @@ void MainWindow::bindConnection()
void MainWindow::loadCompleteState() void MainWindow::loadCompleteState()
{ {
ui->inlineTextDebug->setText(tr("Обновление завершено")); ui->inlineTextDebug->setText(tr("Обновление завершено"));
ui->offlineStartButton->setEnabled(true);
ui->autostartCheckBox->hide(); ui->autostartCheckBox->hide();
ui->offlineStartButton->show();
} }
bool MainWindow::getIsAutoStart() bool MainWindow::getIsAutoStart()
@@ -133,15 +132,9 @@ void MainWindow::serverNotifyShow(QString text, int durationMS)
void MainWindow::setLoginSuccessState() void MainWindow::setLoginSuccessState()
{ {
ui->settingsButton->hide(); ui->settingsButton->hide();
ui->offlineStartButton->show();
ui->versionLayoutWidget->show(); ui->versionLayoutWidget->show();
} }
void MainWindow::setStartOfflineButton(bool isAvailable)
{
ui->offlineStartButton->setEnabled(isAvailable);
}
void MainWindow::setClientVersionName(const QString& versionName) void MainWindow::setClientVersionName(const QString& versionName)
{ {
ui->valueClientVersion->setText(versionName); ui->valueClientVersion->setText(versionName);
@@ -153,9 +146,7 @@ void MainWindow::showConnectionEmpty()
QPalette palette = ui->notificationLabel->palette(); QPalette palette = ui->notificationLabel->palette();
palette.setColor(ui->notificationLabel->foregroundRole(),Qt::red); palette.setColor(ui->notificationLabel->foregroundRole(),Qt::red);
ui->notificationLabel->setText(tr("Соединение отсутсвует")); ui->notificationLabel->setText(tr("Соединение отсутсвует"));
ui->offlineStartButton->show();
ui->offlineStartButton->setGeometry(offlinePosition);
ui->offlineStartButton->raise();
ui->settingsButton->show(); ui->settingsButton->show();
ui->unsafeChangingButton->hide(); ui->unsafeChangingButton->hide();
} }
@@ -178,9 +169,6 @@ void MainWindow::slotConnectionState(bool flag)
{ {
palette.setColor(ui->notificationLabel->foregroundRole(),Qt::green); palette.setColor(ui->notificationLabel->foregroundRole(),Qt::green);
ui->notificationLabel->setText(tr("Соединение установлено")); ui->notificationLabel->setText(tr("Соединение установлено"));
ui->offlineStartButton->show();
ui->offlineStartButton->setGeometry(bottomRightPosition);
} }
else else
{ {
@@ -193,11 +181,19 @@ void MainWindow::slotConnectionState(bool flag)
void MainWindow::slotServerDisconnect() void MainWindow::slotServerDisconnect()
{ {
checkApp();
ui->autostartCheckBox->hide(); ui->autostartCheckBox->hide();
ui->inlineTextDebug->setText(""); ui->inlineTextDebug->setText("");
slotConnectionState(false); slotConnectionState(false);
} }
void MainWindow::checkApp()
{
bool isAvailable = emit sigAppAvailable();
if (isAvailable) ui->offlineStartButton->show();
else ui->offlineStartButton->hide();
}
void MainWindow::slotDisableNotify() void MainWindow::slotDisableNotify()
{ {
ui->notificationLabel->hide(); ui->notificationLabel->hide();
@@ -209,14 +205,6 @@ void MainWindow::slotDisableNotify()
timer->stop(); timer->stop();
} }
void MainWindow::showOfflineButton(bool flag)
{
if (flag)
ui->offlineStartButton->show();
else
ui->offlineStartButton->hide();
}
void MainWindow::on_settingsButton_clicked() void MainWindow::on_settingsButton_clicked()
{ {
emit sigShowSettings(true); emit sigShowSettings(true);
@@ -233,14 +221,14 @@ void MainWindow::loadToServer()
{ {
ui->mainFrame->show(); ui->mainFrame->show();
ui->inlineTextDebug->setText(tr("Отправка файлов...")); ui->inlineTextDebug->setText(tr("Отправка файлов..."));
ui->offlineStartButton->setEnabled(false); //ui->offlineStartButton->setEnabled(false);
ui->unsafeChangingButton->hide(); ui->unsafeChangingButton->hide();
} }
void MainWindow::undoCurrentChanges() void MainWindow::undoCurrentChanges()
{ {
ui->mainFrame->show(); ui->mainFrame->show();
ui->offlineStartButton->setEnabled(false); //ui->offlineStartButton->setEnabled(false);
ui->unsafeChangingButton->hide(); ui->unsafeChangingButton->hide();
} }
@@ -260,7 +248,8 @@ void MainWindow::on_exitButton_clicked()
void MainWindow::slotShowUpdateInfo() void MainWindow::slotShowUpdateInfo()
{ {
ui->unsafeChangingButton->show(); ui->unsafeChangingButton->show();
ui->offlineStartButton->setGeometry(bottomRightPosition); //ui->offlineStartButton->setGeometry(bottomRightPosition);
//ui->offlineStartButton->setParent(ui->changeButtonGroup->widget());
} }
void MainWindow::setUpUi() void MainWindow::setUpUi()
@@ -268,9 +257,10 @@ void MainWindow::setUpUi()
ui->notificationLabel->hide(); ui->notificationLabel->hide();
ui->unsafeChangingButton->hide(); ui->unsafeChangingButton->hide();
ui->offlineStartButton->show(); //ui->offlineStartButton->show();
ui->offlineStartButton->setEnabled(false); //ui->offlineStartButton->setEnabled(false);
ui->offlineStartButton->setGeometry(bottomRightPosition); //ui->offlineStartButton->setGeometry(bottomRightPosition);
//ui->offlineStartButton->setParent(ui->changeButtonGroup->widget());
ui->settingsButton->setIcon(*resourceManager->getSettingsIcon()); ui->settingsButton->setIcon(*resourceManager->getSettingsIcon());
@@ -324,9 +314,14 @@ QHBoxLayout *MainWindow::getDisplayLayout() const
return ui->displayLayout; return ui->displayLayout;
} }
QPushButton *MainWindow::getStartOfflineButton() const
{
return ui->offlineStartButton;
}
void MainWindow::addWidgetToChangeGroup(CommonButtonGroupWidget *commonWidgetGroup) void MainWindow::addWidgetToChangeGroup(CommonButtonGroupWidget *commonWidgetGroup)
{ {
ui->changButtonGroup->addWidget(commonWidgetGroup); ui->changeButtonGroup->addWidget(commonWidgetGroup);
} }
void MainWindow::addWidgetToInteractiveGroup(EntryWidget *entryWidget) void MainWindow::addWidgetToInteractiveGroup(EntryWidget *entryWidget)

View File

@@ -4,6 +4,7 @@
#include <QMainWindow> #include <QMainWindow>
#include <QDebug> #include <QDebug>
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QPushButton>
#include <Widgets/commonbuttongroupwidget.h> #include <Widgets/commonbuttongroupwidget.h>
#include <Widgets/updatenotifywidget.h> #include <Widgets/updatenotifywidget.h>
@@ -43,14 +44,13 @@ public:
void setNeedUpdateState(const QString &notifyText); void setNeedUpdateState(const QString &notifyText);
void setLastVersionState(); void setLastVersionState();
void showConnectionEmpty(); void showConnectionEmpty();
void showOfflineButton(bool flag);
void setStartOfflineButton(bool isAvailable);
void setStartState(); void setStartState();
void serverNotifyShow(QString text, int durationMS = 3000); void serverNotifyShow(QString text, int durationMS = 3000);
void showError(ErrorsEnum errorNum); void showError(ErrorsEnum errorNum);
QHBoxLayout *getDisplayLayout() const; QHBoxLayout *getDisplayLayout() const;
void serverBlockedState(); void serverBlockedState();
QPushButton *getStartOfflineButton() const;
public slots: public slots:
void slotShowUpdateInfo(); void slotShowUpdateInfo();
void slotConnectionState(bool flag); void slotConnectionState(bool flag);
@@ -66,6 +66,8 @@ signals:
void sigExit(); void sigExit();
void sigTryLogin(); void sigTryLogin();
void sigStartOffline(); void sigStartOffline();
bool sigAppAvailable();
private slots: private slots:
void on_settingsButton_clicked(); void on_settingsButton_clicked();
@@ -84,11 +86,13 @@ private:
QPixmap background; QPixmap background;
QRect bottomRightPosition; QRect bottomRightPosition;
QRect offlinePosition; QRect offlinePosition;
QPushButton startOfflineButton;
void bindClient(); void bindClient();
void bindConnection(); void bindConnection();
void setUpUi(); void setUpUi();
void paintEvent(QPaintEvent *event); void paintEvent(QPaintEvent *event);
void checkApp();
protected: protected:
virtual void keyPressEvent(QKeyEvent *event); virtual void keyPressEvent(QKeyEvent *event);
}; };

View File

@@ -249,9 +249,9 @@
<widget class="QWidget" name="versionLayoutWidget" native="true"> <widget class="QWidget" name="versionLayoutWidget" native="true">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>529</x> <x>540</x>
<y>450</y> <y>450</y>
<width>250</width> <width>241</width>
<height>60</height> <height>60</height>
</rect> </rect>
</property> </property>
@@ -420,46 +420,6 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QPushButton" name="offlineStartButton">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>530</x>
<y>511</y>
<width>250</width>
<height>40</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>250</width>
<height>40</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>1500</width>
<height>40</height>
</size>
</property>
<property name="text">
<string>Запуск в автономном режиме</string>
</property>
<property name="checkable">
<bool>false</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
<widget class="QWidget" name="verticalLayoutWidget_2"> <widget class="QWidget" name="verticalLayoutWidget_2">
<property name="geometry"> <property name="geometry">
<rect> <rect>
@@ -478,9 +438,9 @@
<widget class="QWidget" name="verticalLayoutWidget_3"> <widget class="QWidget" name="verticalLayoutWidget_3">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>10</x>
<y>440</y> <y>440</y>
<width>511</width> <width>501</width>
<height>61</height> <height>61</height>
</rect> </rect>
</property> </property>
@@ -520,6 +480,46 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QPushButton" name="offlineStartButton">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>240</x>
<y>350</y>
<width>300</width>
<height>40</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>250</width>
<height>40</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>1500</width>
<height>40</height>
</size>
</property>
<property name="text">
<string>Запуск в автономном режиме</string>
</property>
<property name="checkable">
<bool>false</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</widget> </widget>
<widget class="QWidget" name="headerWidget" native="true"> <widget class="QWidget" name="headerWidget" native="true">
<property name="geometry"> <property name="geometry">
@@ -617,13 +617,13 @@
<widget class="QWidget" name="verticalLayoutWidget"> <widget class="QWidget" name="verticalLayoutWidget">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>10</x> <x>20</x>
<y>550</y> <y>550</y>
<width>531</width> <width>761</width>
<height>41</height> <height>42</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="changButtonGroup"> <layout class="QHBoxLayout" name="changeButtonGroup">
<property name="spacing"> <property name="spacing">
<number>0</number> <number>0</number>
</property> </property>

BIN
resource/Icons/new.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1017 B

View File

@@ -17,5 +17,6 @@
<file>resource/Icons/caution.png</file> <file>resource/Icons/caution.png</file>
<file>resource/Icons/close.png</file> <file>resource/Icons/close.png</file>
<file>resource/Icons/planeCustom.png</file> <file>resource/Icons/planeCustom.png</file>
<file>resource/Icons/new.png</file>
</qresource> </qresource>
</RCC> </RCC>

View File

@@ -129,7 +129,9 @@ void WidgetManager::setConnectionState(bool isConnected)
mainWindow->slotConnectionState(isConnected); mainWindow->slotConnectionState(isConnected);
if (isConnected) if (isConnected)
{ {
mainWindow->getStartOfflineButton()->hide();
entryWidget->showLoginWidget(true); entryWidget->showLoginWidget(true);
commonButtonGroupWidget->loginState();
} }
waitAnimationWidget->hideWithStop(); waitAnimationWidget->hideWithStop();
} }
@@ -169,12 +171,6 @@ void WidgetManager::showMainFrame(bool flag)
mainWindow->showMainFrame(flag); mainWindow->showMainFrame(flag);
} }
void WidgetManager::setAppAvailable(bool isAvailable)
{
commonButtonGroupWidget->startButtonActive(isAvailable);
mainWindow->setStartOfflineButton(isAvailable);
}
void WidgetManager::showSettings(bool isActive) void WidgetManager::showSettings(bool isActive)
{ {
entryWidget->settingsState(); entryWidget->settingsState();

View File

@@ -45,13 +45,14 @@ public:
void setUndoCurrentChangesState(); void setUndoCurrentChangesState();
void showMainFrame(bool flag); void showMainFrame(bool flag);
void setAppAvailable(bool isAvailable);
void slotInlineDebug(const QString &text); void slotInlineDebug(const QString &text);
public slots: public slots:
void showSettings(bool isActive); void showSettings(bool isActive);
void slotSetLoadSettings(Settings *settings); void slotSetLoadSettings(Settings *settings);
void slotActivateLoadAnimation(bool flag); void slotActivateLoadAnimation(bool flag);
signals: signals:
bool sigAppAvailable();
private: private:
MainWindow *mainWindow; MainWindow *mainWindow;