diff --git a/DOCS/Алексей/Board.md b/DOCS/Алексей/Board.md index 59fe3b9..9378343 100644 --- a/DOCS/Алексей/Board.md +++ b/DOCS/Алексей/Board.md @@ -13,13 +13,12 @@ kanban-plugin: board ## bugs - [ ] При старт стопе не сканится шэред дата -- [ ] GUI server: при неподключенном сервере, отключать попытку изменить версию ## feature client Unity -- [ ] отправлять сигнал на пересчет хэша с саб частью - [ ] Добавить обновление инструктора, если он перелогинился +- [ ] убрать функционал смены версии с клиента ## feature client QT @@ -27,7 +26,6 @@ kanban-plugin: board - [ ] Иерархия проекта - папка application, папка updater и линк на основной экзешник - [ ] на старте все мониторы должны быть активны - [ ] Нужен ли дополнительный выбор для загрузки с мат моделью или нет? -- [ ] передавать полную версию в StreaminVerData ## feature server @@ -40,10 +38,13 @@ kanban-plugin: board ## NOW +- [ ] добавить информацию Авторе и изменяемая версия или нет ## Complete +- [ ] отправлять сигнал на пересчет хэша с саб частью +- [ ] GUI server: при неподключенном сервере, отключать попытку изменить версию - [ ] добавить автоматическое выключение после создания копии - [ ] sendSystem::sendXmlAnswer новый вариант отпарвки XML пакетов - [ ] выписать все варианты взаимодействия между всеми клиентами и сервером diff --git a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp index 4764af1..ce76408 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp @@ -467,9 +467,10 @@ void RecognizeSystem::xmlParser(QByteArray array) else if(name == "Created") data->setCreateData(QDateTime::fromString(value)); else if(name == "isChangeable") - { data->setIsChangeable(value.toInt()); - } + else if(name == "author") + data->setAuthor(value); + } serverStreamingVersionDataList->append(data); diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp b/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp index 7742ca5..3e6f697 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp @@ -97,6 +97,11 @@ bool ConnectorToServer::sendQueryTasksXML(QString type) return true; } +void ConnectorToServer::setLoginName(QString name) +{ + versionSelectWidget->setAuthor(name); +} + void ConnectorToServer::SetConnectToServer() { emit sigSetConnect(dataParser->getServerSettings(),connectionThread); diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver.h b/InstructorsAndTrainees/connectorToServer/connectortoserver.h index 5167542..a393e3d 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver.h +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver.h @@ -60,6 +60,7 @@ public: void showVersionSelect(); void activateLoadAnimation(bool flag); + void setLoginName(QString name); public slots: /*void slot_AnswerQueryToDB(QList* listInstructors, QList* listTrainees, diff --git a/InstructorsAndTrainees/connectorToServer/streamingversiondata.h b/InstructorsAndTrainees/connectorToServer/streamingversiondata.h index d190385..45c8f4d 100644 --- a/InstructorsAndTrainees/connectorToServer/streamingversiondata.h +++ b/InstructorsAndTrainees/connectorToServer/streamingversiondata.h @@ -16,6 +16,7 @@ public: this->viewName = viewName; this->createData = data; this->size = size; + this->author = ""; } void setName(QString viewName) @@ -54,15 +55,26 @@ public: { return isChangeable; } + void setIsChangeable(bool value) { isChangeable = value; } + QString getAuthor() const + { + return author; + } + + void setAuthor(const QString &value) + { + author = value; + } private: QString absolutePath; QString viewName; + QString author; QDateTime createData; bool isChangeable; qint32 size; @@ -72,3 +84,5 @@ private: + + diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp index 42bda85..06ce766 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp @@ -174,7 +174,7 @@ void InstructorsAndTraineesWidget::checkLoginResult(ServerAuthorization *serverA ui->btnAuthorizationInstructor->setText(tr("Deauthorization Instructor")); updateLabelLoggedInInstructor(serverAuth->Login, serverAuth->ClientName); - + connectorToServer->setLoginName(loginInstructorLoggedInLocal); QMessageBox::information(this, tr("Instructor authorization"), tr("Successfully!")); } else diff --git a/InstructorsAndTrainees/widgets/versionselectwidget.cpp b/InstructorsAndTrainees/widgets/versionselectwidget.cpp index 2f76f3c..60c15be 100644 --- a/InstructorsAndTrainees/widgets/versionselectwidget.cpp +++ b/InstructorsAndTrainees/widgets/versionselectwidget.cpp @@ -45,13 +45,21 @@ void VersionSelectWidget::on_verListView_itemDoubleClicked(QListWidgetItem *item if(data->getViewName() == item->text()) { 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); selectedVersion = data; } } } +QString VersionSelectWidget::changableText(bool flag) +{ + if(flag) return tr("Да"); + else return tr("Нет"); +} + void VersionSelectWidget::on_createDuplicateButton_clicked() { @@ -62,7 +70,7 @@ void VersionSelectWidget::on_createDuplicateButton_clicked() void VersionSelectWidget::sendCopyEmit(QString newName) { - QString result = selectedVersion->getViewName() + ";" + newName; + QString result = selectedVersion->getViewName() + ";" + newName + ";" + authorName; if (selectedVersion == nullptr) { @@ -98,7 +106,10 @@ void VersionSelectWidget::on_switchServerVersionButton_clicked() emit sigSendSwitchVersion(selectedVersion); } - +void VersionSelectWidget::setAuthor(QString name) +{ + authorName = name; +} VersionSelectWidget::~VersionSelectWidget() { diff --git a/InstructorsAndTrainees/widgets/versionselectwidget.h b/InstructorsAndTrainees/widgets/versionselectwidget.h index b2dedb7..5b6a9c8 100644 --- a/InstructorsAndTrainees/widgets/versionselectwidget.h +++ b/InstructorsAndTrainees/widgets/versionselectwidget.h @@ -24,6 +24,7 @@ public: void initialize(SendSystem *sendSystem,VersionContainer *versionContainer,NotifyController *notifyController); void fillView(QList *serverData); void sendCopyEmit(QString newName); + void setAuthor(QString name); ~VersionSelectWidget(); private slots: @@ -45,6 +46,9 @@ private: VersionContainer *versionContainer; NotifyController *notifyController; StreamingVersionData *selectedVersion; + + QString authorName; + QString changableText(bool flag); }; #endif // VERSIONSELECTWIDGET_H diff --git a/ServerLMS/Data/StreamingVersionData.h b/ServerLMS/Data/StreamingVersionData.h index 5cd2ffc..752aecc 100644 --- a/ServerLMS/Data/StreamingVersionData.h +++ b/ServerLMS/Data/StreamingVersionData.h @@ -14,7 +14,10 @@ public: this->createData = data; this->size = size; this->isChangeable = true; + this->author = ""; } + StreamingVersionData(){}; + ~StreamingVersionData(); QString getAbsolutPath() const @@ -47,12 +50,45 @@ public: 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: QString absolutePath; QString viewName; + QString author; QDateTime createData; bool isChangeable; qint32 size; }; #endif // STREAMINGVERSIONDATA_H + + + + + + + diff --git a/ServerLMS/Systems/assetsmanager.cpp b/ServerLMS/Systems/assetsmanager.cpp index ee883e2..4f75ebb 100644 --- a/ServerLMS/Systems/assetsmanager.cpp +++ b/ServerLMS/Systems/assetsmanager.cpp @@ -8,10 +8,76 @@ AssetsManager::AssetsManager(QObject *parent) : QObject(parent) void AssetsManager::initialize(UpdateController* updateContoller,DataParser *dataParser) { this->updateController = updateContoller; - connect(this,&AssetsManager::sigSaveVersion,updateContoller,&UpdateController::saveVersionToFile); + //connect(this,&AssetsManager::sigSaveVersion,updateContoller,&UpdateController::saveVersionToFile); datas = new QList; } +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 *streamingVersion) { datas->clear(); @@ -41,7 +107,7 @@ QString AssetsManager::setVersion(QString versionName) if (version->getViewName() == versionName) { currentVersionData = version; - emit sigSaveVersion(currentVersionData); + saveVersionToFile(currentVersionData); return version->getAbsolutPath(); } @@ -101,11 +167,11 @@ void AssetsManager::addVersion(StreamingVersionData *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(); QListIterator iterator(*datas); - StreamingVersionData* data; + StreamingVersionData* data = new StreamingVersionData; while (iterator.hasNext()) { @@ -113,10 +179,15 @@ void AssetsManager::createCopyVersion(QString versionName,QString newVersionName 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() << "New version name " << newVersionName; @@ -208,6 +279,113 @@ void AssetsManager::copyAllRecurse(QString source,QString destination) } } +void AssetsManager::writeVersionsToFile(QList version,bool isFirst) +{ + QList 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 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 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() { diff --git a/ServerLMS/Systems/assetsmanager.h b/ServerLMS/Systems/assetsmanager.h index 559a0f7..dec309c 100644 --- a/ServerLMS/Systems/assetsmanager.h +++ b/ServerLMS/Systems/assetsmanager.h @@ -13,10 +13,11 @@ public: explicit AssetsManager(QObject *parent = nullptr); void initialize(UpdateController* updateContoller,DataParser *dataParser); void addVersion(StreamingVersionData *data); - void createCopyVersion(QString versionName,QString newName); + void createCopyVersion(QString versionName,QString newName,QString author); void deleteVersion(QString version); void setVersionList(QList *streamingVersion); bool findDuplicate(QString name); + void createFirstVersionListXML(QList assets); QString setVersion(QString versionName); QList *prepareLocalPathList(QList*fileData); @@ -27,6 +28,9 @@ public: StreamingVersionData *getCurrentVersionData() const; + void saveVersionToFile(StreamingVersionData *streamingVersion); + void writeVersionsToFile(QList version,bool isFirst); + signals: void sigSaveVersion(StreamingVersionData *versionData); @@ -36,6 +40,7 @@ private: StreamingVersionData* currentVersionData; void copyAllRecurse(QString source, QString destination); + void fillDatas(); }; #endif // ASSETSMANAGER_H diff --git a/ServerLMS/Systems/recognizesystem.cpp b/ServerLMS/Systems/recognizesystem.cpp index be2e1d9..65e28ef 100644 --- a/ServerLMS/Systems/recognizesystem.cpp +++ b/ServerLMS/Systems/recognizesystem.cpp @@ -366,7 +366,7 @@ void RecognizeSystem::recognize() break; } - emit sigCopyVersion(result[0],result[1]); + emit sigCopyVersion(result[0],result[1],result[2]); sendSystem->sendPacketType(PacketType::BUSY); } diff --git a/ServerLMS/Systems/recognizesystem.h b/ServerLMS/Systems/recognizesystem.h index 29a2b24..a28a893 100644 --- a/ServerLMS/Systems/recognizesystem.h +++ b/ServerLMS/Systems/recognizesystem.h @@ -36,7 +36,7 @@ signals: void sigXmlParser(ClientHandler *clientHandler,QByteArray data); void sigChangeVersion(QString versionName); void sigDeleteVersion(QString versionName); - void sigCopyVersion(QString versionName,QString newVersionName); + void sigCopyVersion(QString versionName,QString newVersionName,QString author); private: UpdateController *updateController; diff --git a/ServerLMS/Systems/updatecontroller.cpp b/ServerLMS/Systems/updatecontroller.cpp index 8225da9..faacac7 100644 --- a/ServerLMS/Systems/updatecontroller.cpp +++ b/ServerLMS/Systems/updatecontroller.cpp @@ -41,10 +41,10 @@ void UpdateController::changeAssetVersion(QString versionName) 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); - assetManager->createCopyVersion(versionName,newVersionName); + assetManager->createCopyVersion(versionName,newVersionName,author); commonClientHandler->slot_sendPacketToAllClients(PacketType::FREE); } @@ -444,83 +444,22 @@ void UpdateController::calculateSharedHash() fileInfo.absoluteFilePath(),fileInfo.fileName(), fileInfo.birthTime(),fileInfo.size()); - if(fileInfo.fileName() == baseNameVersion) - { - version->setIsChangeable(false); - } - else - { - version->setIsChangeable(true); - } +// if(fileInfo.fileName() == baseNameVersion) +// { +// version->setIsChangeable(false); +// version->setAuthor(tr("Константа-дизайн")); +// } +// else +// { +// version->setIsChangeable(true); +// } versionList->append(version); } - createVersionListXmlAnswer(*versionList); - assetManager->setVersionList(versionList); -} - -void UpdateController::createVersionListXmlAnswer(QList version) //TODO: переименовать и перебросить в AssetManager -{ - QList listTag; - - foreach(StreamingVersionData* ver,version) - { - SAttribute attribute1 = {"Version", ver->getViewName()}; - SAttribute attribute2 = {"Created", ver->getCreateData().toString()}; - SAttribute attribute3 = {"isChangeable",QString::number(ver->getIsChangeable())}; - - QList 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(); + assetManager->createFirstVersionListXML(*versionList); + //assetManager->setVersionList(versionList); } void UpdateController::sendNewVersionList() diff --git a/ServerLMS/Systems/updatecontroller.h b/ServerLMS/Systems/updatecontroller.h index 8178144..919190a 100644 --- a/ServerLMS/Systems/updatecontroller.h +++ b/ServerLMS/Systems/updatecontroller.h @@ -51,8 +51,6 @@ public: DataInfo *getCurrentDataInfo(); void clearCurrentDataInfo(); - void createVersionListXmlAnswer(QList version); - void saveVersionToFile(StreamingVersionData *streamingVersion); void xmlFileDataParse(QByteArray array); QByteArray getAdditionalFile(QString name); @@ -60,7 +58,7 @@ public: public slots: void changeAssetVersion(QString versionName); - void createCopyVersion(QString versionName,QString newVersionName); + void createCopyVersion(QString versionName,QString newVersionName,QString author); void deleteAssetVersion(QString versionName); void setUpCurrentServerHash(); diff --git a/ServerLMS/serverlmswidget.cpp b/ServerLMS/serverlmswidget.cpp index 9502213..e3539ef 100644 --- a/ServerLMS/serverlmswidget.cpp +++ b/ServerLMS/serverlmswidget.cpp @@ -246,7 +246,6 @@ void ServerLMSWidget::on_btnStartServer_clicked() if(startServer()) { QApplication::setOverrideCursor(Qt::WaitCursor); - emit sigCalculateFullHash(); QApplication::restoreOverrideCursor(); ui->btnStartServer->setEnabled(false);