feat:draft version change

This commit is contained in:
semenov
2025-01-21 15:43:30 +03:00
parent 3e95be4447
commit 079a36a76d
16 changed files with 287 additions and 95 deletions

View File

@@ -13,13 +13,12 @@ kanban-plugin: board
## bugs ## bugs
- [ ] При старт стопе не сканится шэред дата - [ ] При старт стопе не сканится шэред дата
- [ ] GUI server: при неподключенном сервере, отключать попытку изменить версию
## feature client Unity ## feature client Unity
- [ ] отправлять сигнал на пересчет хэша с саб частью
- [ ] Добавить обновление инструктора, если он перелогинился - [ ] Добавить обновление инструктора, если он перелогинился
- [ ] убрать функционал смены версии с клиента
## feature client QT ## feature client QT
@@ -27,7 +26,6 @@ kanban-plugin: board
- [ ] Иерархия проекта - папка application, папка updater и линк на основной экзешник - [ ] Иерархия проекта - папка application, папка updater и линк на основной экзешник
- [ ] на старте все мониторы должны быть активны - [ ] на старте все мониторы должны быть активны
- [ ] Нужен ли дополнительный выбор для загрузки с мат моделью или нет? - [ ] Нужен ли дополнительный выбор для загрузки с мат моделью или нет?
- [ ] передавать полную версию в StreaminVerData
## feature server ## feature server
@@ -40,10 +38,13 @@ kanban-plugin: board
## NOW ## NOW
- [ ] добавить информацию Авторе и изменяемая версия или нет
## Complete ## Complete
- [ ] отправлять сигнал на пересчет хэша с саб частью
- [ ] GUI server: при неподключенном сервере, отключать попытку изменить версию
- [ ] добавить автоматическое выключение после создания копии - [ ] добавить автоматическое выключение после создания копии
- [ ] sendSystem::sendXmlAnswer новый вариант отпарвки XML пакетов - [ ] sendSystem::sendXmlAnswer новый вариант отпарвки XML пакетов
- [ ] выписать все варианты взаимодействия между всеми клиентами и сервером - [ ] выписать все варианты взаимодействия между всеми клиентами и сервером

View File

@@ -467,9 +467,10 @@ void RecognizeSystem::xmlParser(QByteArray array)
else if(name == "Created") else if(name == "Created")
data->setCreateData(QDateTime::fromString(value)); data->setCreateData(QDateTime::fromString(value));
else if(name == "isChangeable") else if(name == "isChangeable")
{
data->setIsChangeable(value.toInt()); data->setIsChangeable(value.toInt());
} else if(name == "author")
data->setAuthor(value);
} }
serverStreamingVersionDataList->append(data); serverStreamingVersionDataList->append(data);

View File

@@ -97,6 +97,11 @@ bool ConnectorToServer::sendQueryTasksXML(QString type)
return true; return true;
} }
void ConnectorToServer::setLoginName(QString name)
{
versionSelectWidget->setAuthor(name);
}
void ConnectorToServer::SetConnectToServer() void ConnectorToServer::SetConnectToServer()
{ {
emit sigSetConnect(dataParser->getServerSettings(),connectionThread); emit sigSetConnect(dataParser->getServerSettings(),connectionThread);

View File

@@ -60,6 +60,7 @@ public:
void showVersionSelect(); void showVersionSelect();
void activateLoadAnimation(bool flag); void activateLoadAnimation(bool flag);
void setLoginName(QString name);
public slots: public slots:
/*void slot_AnswerQueryToDB(QList<Instructor>* listInstructors, /*void slot_AnswerQueryToDB(QList<Instructor>* listInstructors,
QList<Trainee>* listTrainees, QList<Trainee>* listTrainees,

View File

@@ -16,6 +16,7 @@ public:
this->viewName = viewName; this->viewName = viewName;
this->createData = data; this->createData = data;
this->size = size; this->size = size;
this->author = "";
} }
void setName(QString viewName) void setName(QString viewName)
@@ -54,15 +55,26 @@ public:
{ {
return isChangeable; return isChangeable;
} }
void setIsChangeable(bool value) void setIsChangeable(bool value)
{ {
isChangeable = value; isChangeable = value;
} }
QString getAuthor() const
{
return author;
}
void setAuthor(const QString &value)
{
author = value;
}
private: private:
QString absolutePath; QString absolutePath;
QString viewName; QString viewName;
QString author;
QDateTime createData; QDateTime createData;
bool isChangeable; bool isChangeable;
qint32 size; qint32 size;
@@ -72,3 +84,5 @@ private:

View File

@@ -174,7 +174,7 @@ void InstructorsAndTraineesWidget::checkLoginResult(ServerAuthorization *serverA
ui->btnAuthorizationInstructor->setText(tr("Deauthorization Instructor")); ui->btnAuthorizationInstructor->setText(tr("Deauthorization Instructor"));
updateLabelLoggedInInstructor(serverAuth->Login, serverAuth->ClientName); updateLabelLoggedInInstructor(serverAuth->Login, serverAuth->ClientName);
connectorToServer->setLoginName(loginInstructorLoggedInLocal);
QMessageBox::information(this, tr("Instructor authorization"), tr("Successfully!")); QMessageBox::information(this, tr("Instructor authorization"), tr("Successfully!"));
} }
else else

View File

@@ -45,13 +45,21 @@ void VersionSelectWidget::on_verListView_itemDoubleClicked(QListWidgetItem *item
if(data->getViewName() == item->text()) if(data->getViewName() == item->text())
{ {
QString info = "Имя версии: " + data->getViewName() + "\n"; QString info = "Имя версии: " + data->getViewName() + "\n";
info.append("Создан: " + data->getCreateData().toString()); info.append("Создан: " + data->getCreateData().toString() + "\n");
info.append("Изменяемый: " + changableText(data->getIsChangeable()) + "\n");
info.append("Автор: " + data->getAuthor());
ui->infoValue->setText(info); ui->infoValue->setText(info);
selectedVersion = data; selectedVersion = data;
} }
} }
} }
QString VersionSelectWidget::changableText(bool flag)
{
if(flag) return tr("Да");
else return tr("Нет");
}
void VersionSelectWidget::on_createDuplicateButton_clicked() void VersionSelectWidget::on_createDuplicateButton_clicked()
{ {
@@ -62,7 +70,7 @@ void VersionSelectWidget::on_createDuplicateButton_clicked()
void VersionSelectWidget::sendCopyEmit(QString newName) void VersionSelectWidget::sendCopyEmit(QString newName)
{ {
QString result = selectedVersion->getViewName() + ";" + newName; QString result = selectedVersion->getViewName() + ";" + newName + ";" + authorName;
if (selectedVersion == nullptr) if (selectedVersion == nullptr)
{ {
@@ -98,7 +106,10 @@ void VersionSelectWidget::on_switchServerVersionButton_clicked()
emit sigSendSwitchVersion(selectedVersion); emit sigSendSwitchVersion(selectedVersion);
} }
void VersionSelectWidget::setAuthor(QString name)
{
authorName = name;
}
VersionSelectWidget::~VersionSelectWidget() VersionSelectWidget::~VersionSelectWidget()
{ {

View File

@@ -24,6 +24,7 @@ public:
void initialize(SendSystem *sendSystem,VersionContainer *versionContainer,NotifyController *notifyController); void initialize(SendSystem *sendSystem,VersionContainer *versionContainer,NotifyController *notifyController);
void fillView(QList<StreamingVersionData*> *serverData); void fillView(QList<StreamingVersionData*> *serverData);
void sendCopyEmit(QString newName); void sendCopyEmit(QString newName);
void setAuthor(QString name);
~VersionSelectWidget(); ~VersionSelectWidget();
private slots: private slots:
@@ -45,6 +46,9 @@ private:
VersionContainer *versionContainer; VersionContainer *versionContainer;
NotifyController *notifyController; NotifyController *notifyController;
StreamingVersionData *selectedVersion; StreamingVersionData *selectedVersion;
QString authorName;
QString changableText(bool flag);
}; };
#endif // VERSIONSELECTWIDGET_H #endif // VERSIONSELECTWIDGET_H

View File

@@ -14,7 +14,10 @@ public:
this->createData = data; this->createData = data;
this->size = size; this->size = size;
this->isChangeable = true; this->isChangeable = true;
this->author = "";
} }
StreamingVersionData(){};
~StreamingVersionData(); ~StreamingVersionData();
QString getAbsolutPath() const QString getAbsolutPath() const
@@ -47,12 +50,45 @@ public:
isChangeable = value; isChangeable = value;
} }
QString getAuthor() const
{
return author;
}
void setAuthor(const QString &value)
{
author = value;
}
void setViewName(const QString &value)
{
viewName = value;
}
void setCreateData(const QDateTime &value)
{
createData = value;
}
void setAbsolutePath(const QString &value)
{
absolutePath = value;
}
private: private:
QString absolutePath; QString absolutePath;
QString viewName; QString viewName;
QString author;
QDateTime createData; QDateTime createData;
bool isChangeable; bool isChangeable;
qint32 size; qint32 size;
}; };
#endif // STREAMINGVERSIONDATA_H #endif // STREAMINGVERSIONDATA_H

View File

@@ -8,10 +8,76 @@ AssetsManager::AssetsManager(QObject *parent) : QObject(parent)
void AssetsManager::initialize(UpdateController* updateContoller,DataParser *dataParser) void AssetsManager::initialize(UpdateController* updateContoller,DataParser *dataParser)
{ {
this->updateController = updateContoller; this->updateController = updateContoller;
connect(this,&AssetsManager::sigSaveVersion,updateContoller,&UpdateController::saveVersionToFile); //connect(this,&AssetsManager::sigSaveVersion,updateContoller,&UpdateController::saveVersionToFile);
datas = new QList<StreamingVersionData*>; datas = new QList<StreamingVersionData*>;
} }
void AssetsManager::fillDatas()
{
QByteArray array;
QFile file(versionListFile);
if(!file.exists())
{
return;
}
datas->clear();
file.open(QIODevice::ReadOnly);
array = file.readAll();
file.close();
QXmlStreamReader xmlReader(array);
xmlReader.readNext();
QString name = xmlReader.name().toString();
while(!xmlReader.atEnd())
{
name = xmlReader.name().toString();
if(!xmlReader.isStartElement()) {
xmlReader.readNext();
continue;
}
if(xmlReader.name() == "VersionList")
{
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->setViewName(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);
}
datas->append(data);
}
}
xmlReader.readNext();
}
}
}
}
void AssetsManager::setVersionList(QList<StreamingVersionData*> *streamingVersion) void AssetsManager::setVersionList(QList<StreamingVersionData*> *streamingVersion)
{ {
datas->clear(); datas->clear();
@@ -41,7 +107,7 @@ QString AssetsManager::setVersion(QString versionName)
if (version->getViewName() == versionName) if (version->getViewName() == versionName)
{ {
currentVersionData = version; currentVersionData = version;
emit sigSaveVersion(currentVersionData); saveVersionToFile(currentVersionData);
return version->getAbsolutPath(); return version->getAbsolutPath();
} }
@@ -101,11 +167,11 @@ void AssetsManager::addVersion(StreamingVersionData *data)
datas->push_back(data); datas->push_back(data);
} }
void AssetsManager::createCopyVersion(QString versionName,QString newVersionName) void AssetsManager::createCopyVersion(QString versionName,QString newVersionName,QString author)
{ {
qDebug() << "assetManager thread ID " << QThread::currentThreadId(); qDebug() << "assetManager thread ID " << QThread::currentThreadId();
QListIterator<StreamingVersionData*> iterator(*datas); QListIterator<StreamingVersionData*> iterator(*datas);
StreamingVersionData* data; StreamingVersionData* data = new StreamingVersionData;
while (iterator.hasNext()) while (iterator.hasNext())
{ {
@@ -113,10 +179,15 @@ void AssetsManager::createCopyVersion(QString versionName,QString newVersionName
if (version->getViewName() == versionName) if (version->getViewName() == versionName)
{ {
data = version; data->setAbsolutePath(version->getAbsolutPath());
} }
} }
data->setAuthor(author);
data->setIsChangeable(true);
data->setViewName(newVersionName);
datas->append(data);
qDebug() << "Version for copy " << versionName; qDebug() << "Version for copy " << versionName;
qDebug() << "New version name " << newVersionName; qDebug() << "New version name " << newVersionName;
@@ -208,6 +279,113 @@ void AssetsManager::copyAllRecurse(QString source,QString destination)
} }
} }
void AssetsManager::writeVersionsToFile(QList<StreamingVersionData*> version,bool isFirst)
{
QList<SXmlAnswerTag> listTag;
QFile file(versionListFile);
foreach(StreamingVersionData* ver,version)
{
SAttribute attribute1 = {"Version", ver->getViewName()};
SAttribute attribute2 = {"Created", ver->getCreateData().toString()};
SAttribute attribute3;
SAttribute attribute4;
if(isFirst)
{
attribute3 = {"isChangeable",QString::number(false)};
attribute4 = {"author",tr("Константа-дизайн")};
}else
{
attribute3 ={"isChangeable",QString::number(ver->getIsChangeable())};
attribute4 = {"author",ver->getAuthor()};
}
QList<SAttribute> listAttr = {attribute1, attribute2,attribute3,attribute4};
SXmlAnswerTag tag = {"VersionData", listAttr};
listTag.append(tag);
datas->append(ver);
}
file.open(QIODevice::WriteOnly);
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("VersionList");
foreach(SXmlAnswerTag tag,listTag)
{
xmlWriter.writeStartElement(tag.elementName);
foreach(SAttribute attribute,tag.attr)
{
xmlWriter.writeAttribute(attribute.name,attribute.value);
}
xmlWriter.writeEndElement();
}
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
file.close();
}
void AssetsManager::createFirstVersionListXML(QList<StreamingVersionData*> version) //TODO: переименовать и перебросить в AssetManager
{
QFile file(versionListFile);
if(!file.exists())
{
writeVersionsToFile(version,true);
}
else
{
if(datas->count() == 0) fillDatas();
foreach(StreamingVersionData* ver,version)
{
foreach(StreamingVersionData* data,*datas)
{
if(ver->getViewName() == data->getViewName())
{
data->setAbsolutePath(ver->getAbsolutPath());
break;
}
}
}
writeVersionsToFile(*datas,false);
}
}
void AssetsManager::saveVersionToFile(StreamingVersionData *streamingVersion) //TODO: переименовать и перебросить в AssetManager
{
QFile file(version);
file.open(QFile::WriteOnly);
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("VersionData");
xmlWriter.writeAttribute("Version",streamingVersion->getViewName());
xmlWriter.writeAttribute("Created",streamingVersion->getCreateData().toString());
xmlWriter.writeAttribute("isChangeable",QString::number(streamingVersion->getIsChangeable()));
xmlWriter.writeAttribute("author",streamingVersion->getAuthor());
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
file.close();
}
AssetsManager::~AssetsManager() AssetsManager::~AssetsManager()
{ {

View File

@@ -13,10 +13,11 @@ public:
explicit AssetsManager(QObject *parent = nullptr); explicit AssetsManager(QObject *parent = nullptr);
void initialize(UpdateController* updateContoller,DataParser *dataParser); void initialize(UpdateController* updateContoller,DataParser *dataParser);
void addVersion(StreamingVersionData *data); void addVersion(StreamingVersionData *data);
void createCopyVersion(QString versionName,QString newName); void createCopyVersion(QString versionName,QString newName,QString author);
void deleteVersion(QString version); void deleteVersion(QString version);
void setVersionList(QList<StreamingVersionData *> *streamingVersion); void setVersionList(QList<StreamingVersionData *> *streamingVersion);
bool findDuplicate(QString name); bool findDuplicate(QString name);
void createFirstVersionListXML(QList<StreamingVersionData*> assets);
QString setVersion(QString versionName); QString setVersion(QString versionName);
QList<FileData> *prepareLocalPathList(QList<FileData>*fileData); QList<FileData> *prepareLocalPathList(QList<FileData>*fileData);
@@ -27,6 +28,9 @@ public:
StreamingVersionData *getCurrentVersionData() const; StreamingVersionData *getCurrentVersionData() const;
void saveVersionToFile(StreamingVersionData *streamingVersion);
void writeVersionsToFile(QList<StreamingVersionData*> version,bool isFirst);
signals: signals:
void sigSaveVersion(StreamingVersionData *versionData); void sigSaveVersion(StreamingVersionData *versionData);
@@ -36,6 +40,7 @@ private:
StreamingVersionData* currentVersionData; StreamingVersionData* currentVersionData;
void copyAllRecurse(QString source, QString destination); void copyAllRecurse(QString source, QString destination);
void fillDatas();
}; };
#endif // ASSETSMANAGER_H #endif // ASSETSMANAGER_H

View File

@@ -366,7 +366,7 @@ void RecognizeSystem::recognize()
break; break;
} }
emit sigCopyVersion(result[0],result[1]); emit sigCopyVersion(result[0],result[1],result[2]);
sendSystem->sendPacketType(PacketType::BUSY); sendSystem->sendPacketType(PacketType::BUSY);
} }

View File

@@ -36,7 +36,7 @@ signals:
void sigXmlParser(ClientHandler *clientHandler,QByteArray data); void sigXmlParser(ClientHandler *clientHandler,QByteArray data);
void sigChangeVersion(QString versionName); void sigChangeVersion(QString versionName);
void sigDeleteVersion(QString versionName); void sigDeleteVersion(QString versionName);
void sigCopyVersion(QString versionName,QString newVersionName); void sigCopyVersion(QString versionName,QString newVersionName,QString author);
private: private:
UpdateController *updateController; UpdateController *updateController;

View File

@@ -41,10 +41,10 @@ void UpdateController::changeAssetVersion(QString versionName)
commonClientHandler->slot_sendPacketToAllClients(PacketType::FREE); commonClientHandler->slot_sendPacketToAllClients(PacketType::FREE);
} }
void UpdateController::createCopyVersion(QString versionName,QString newVersionName) void UpdateController::createCopyVersion(QString versionName,QString newVersionName,QString author)
{ {
commonClientHandler->slot_sendPacketToAllClients(PacketType::BUSY); commonClientHandler->slot_sendPacketToAllClients(PacketType::BUSY);
assetManager->createCopyVersion(versionName,newVersionName); assetManager->createCopyVersion(versionName,newVersionName,author);
commonClientHandler->slot_sendPacketToAllClients(PacketType::FREE); commonClientHandler->slot_sendPacketToAllClients(PacketType::FREE);
} }
@@ -444,83 +444,22 @@ void UpdateController::calculateSharedHash()
fileInfo.absoluteFilePath(),fileInfo.fileName(), fileInfo.absoluteFilePath(),fileInfo.fileName(),
fileInfo.birthTime(),fileInfo.size()); fileInfo.birthTime(),fileInfo.size());
if(fileInfo.fileName() == baseNameVersion) // if(fileInfo.fileName() == baseNameVersion)
{ // {
version->setIsChangeable(false); // version->setIsChangeable(false);
} // version->setAuthor(tr("Константа-дизайн"));
else // }
{ // else
version->setIsChangeable(true); // {
} // version->setIsChangeable(true);
// }
versionList->append(version); versionList->append(version);
} }
createVersionListXmlAnswer(*versionList); assetManager->createFirstVersionListXML(*versionList);
assetManager->setVersionList(versionList); //assetManager->setVersionList(versionList);
}
void UpdateController::createVersionListXmlAnswer(QList<StreamingVersionData *> version) //TODO: переименовать и перебросить в AssetManager
{
QList<SXmlAnswerTag> listTag;
foreach(StreamingVersionData* ver,version)
{
SAttribute attribute1 = {"Version", ver->getViewName()};
SAttribute attribute2 = {"Created", ver->getCreateData().toString()};
SAttribute attribute3 = {"isChangeable",QString::number(ver->getIsChangeable())};
QList<SAttribute> listAttr = {attribute1, attribute2,attribute3};
SXmlAnswerTag tag = {"VersionData", listAttr};
listTag.append(tag);
}
QFile file(versionListFile);
file.open(QIODevice::WriteOnly);
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("VersionList");
foreach(SXmlAnswerTag tag,listTag)
{
xmlWriter.writeStartElement(tag.elementName);
foreach(SAttribute attribute,tag.attr)
{
xmlWriter.writeAttribute(attribute.name,attribute.value);
}
xmlWriter.writeEndElement();
}
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
file.close();
}
void UpdateController::saveVersionToFile(StreamingVersionData *streamingVersion) //TODO: переименовать и перебросить в AssetManager
{
QFile file(version);
file.open(QFile::WriteOnly);
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("VersionData");
xmlWriter.writeAttribute("Version",streamingVersion->getViewName());
xmlWriter.writeAttribute("Created",streamingVersion->getCreateData().toString());
xmlWriter.writeAttribute("isChangeable",QString::number(streamingVersion->getIsChangeable()));
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
file.close();
} }
void UpdateController::sendNewVersionList() void UpdateController::sendNewVersionList()

View File

@@ -51,8 +51,6 @@ public:
DataInfo *getCurrentDataInfo(); DataInfo *getCurrentDataInfo();
void clearCurrentDataInfo(); void clearCurrentDataInfo();
void createVersionListXmlAnswer(QList<StreamingVersionData *> version);
void saveVersionToFile(StreamingVersionData *streamingVersion);
void xmlFileDataParse(QByteArray array); void xmlFileDataParse(QByteArray array);
QByteArray getAdditionalFile(QString name); QByteArray getAdditionalFile(QString name);
@@ -60,7 +58,7 @@ public:
public slots: public slots:
void changeAssetVersion(QString versionName); void changeAssetVersion(QString versionName);
void createCopyVersion(QString versionName,QString newVersionName); void createCopyVersion(QString versionName,QString newVersionName,QString author);
void deleteAssetVersion(QString versionName); void deleteAssetVersion(QString versionName);
void setUpCurrentServerHash(); void setUpCurrentServerHash();

View File

@@ -246,7 +246,6 @@ void ServerLMSWidget::on_btnStartServer_clicked()
if(startServer()) if(startServer())
{ {
QApplication::setOverrideCursor(Qt::WaitCursor); QApplication::setOverrideCursor(Qt::WaitCursor);
emit sigCalculateFullHash();
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
ui->btnStartServer->setEnabled(false); ui->btnStartServer->setEnabled(false);