Построение списков подпроцедур в Сервере работает

This commit is contained in:
2025-11-13 14:34:39 +03:00
parent 4bfd4dad82
commit a6bee48b77
7 changed files with 89 additions and 41 deletions

View File

@@ -16,17 +16,28 @@ DocsUpdater::~DocsUpdater()
}
void DocsUpdater::lockAccessToDocs()
//PUBLIC
void DocsUpdater::lockAccessToDocsXML()
{
mtxAccess.lock();
}
void DocsUpdater::unLockAccessToDocs()
void DocsUpdater::unLockAccessToDocsXML()
{
mtxAccess.unlock();
}
bool DocsUpdater::slot_update()
QList<SubProc> DocsUpdater::getListSubProcForDMcode(QString dmCode)
{
QMutexLocker locker(&mtxAccess);
if(!listSubProcMap.contains(dmCode))
return QList<SubProc>();
return listSubProcMap.value(dmCode);
}
bool DocsUpdater::updateDocsXML()
{
QMutexLocker locker(&mtxAccess);
@@ -43,17 +54,41 @@ bool DocsUpdater::slot_update()
deleteAllModulsAMM();
listTasksAMM.clear();
subProcMap.clear();
listSubProcMap.clear();
DMmodulesMap.clear();
domElementParserAMM(manifestElement, nullptr);
if(! Tools::saveDOMtoXML(pathDocsFile, &docTasksDOM))
return false;
{
deleteAllModulsAMM();
listTasksAMM.clear();
listSubProcMap.clear();
DMmodulesMap.clear();
return false;
}
for(QList<SubProc> listSP : listSubProcMap)
{
for(SubProc sp : listSP)
{
QString dmCode = sp.dmCode;
DM* module = getDMmoduleByDMcode(dmCode);
if(module)
{
sp.modeList = module->getModeList();
}
}
}
//emit signal_DocsChanged();
return true;
}
//PRIVATE
void DocsUpdater::domElementParserAMM(QDomElement element, Module* moduleParent)
{
QString name;
@@ -69,7 +104,7 @@ void DocsUpdater::domElementParserAMM(QDomElement element, Module* moduleParent)
do
{
name = childElement.nodeName();
name = childElement.nodeName();
QDomNamedNodeMap nodeMap = childElement.attributes();
@@ -119,6 +154,8 @@ void DocsUpdater::domElementParserAMM(QDomElement element, Module* moduleParent)
PM* PMmodulParent = static_cast<PM*>(moduleParent);
PMmodulParent->addChildModule(module);
}
DMmodulesMap.insert(DMmodul->dmCode(), DMmodul);
}
else if(name == "rus" || name == "eng")
{
@@ -145,20 +182,6 @@ void DocsUpdater::domElementParserAMM(QDomElement element, Module* moduleParent)
nodeMap.namedItem("bookmark").nodeValue(),
nodeMap.namedItem("xml").nodeValue());
//Активность
//QString canplay = nodeMap.namedItem("canplay").nodeValue();
//Обновление Активности и построение списка подпроцедур 1го уровня
/*
QString dmCode = DMmodulParent->dmCode();
QString canplay = defineCanplayByScenXML(dmCode);
DMmodulParent->setModeList(parseCanplay(canplay));
nodeMap.namedItem("canplay").setNodeValue(canplay);
*/
QString dmCode = DMmodulParent->dmCode();
QString canplay = "";
QList<SubProc> listSubProc;
@@ -167,7 +190,7 @@ void DocsUpdater::domElementParserAMM(QDomElement element, Module* moduleParent)
DMmodulParent->setModeList(parseCanplay(canplay));
nodeMap.namedItem("canplay").setNodeValue(canplay);
subProcMap.insert(dmCode, listSubProc);
listSubProcMap.insert(dmCode, listSubProc);
}
else
{
@@ -262,6 +285,7 @@ bool DocsUpdater::processingScenXML(const QString dmCode, QString &canplay, QLis
{
listSubProc.clear();
ModeList modeList;
canplay = "";
QString signDemo = "-";
QString signTrain = "-";
@@ -286,7 +310,10 @@ bool DocsUpdater::processingScenXML(const QString dmCode, QString &canplay, QLis
{
//canplay
if(demoElement.toElement().attribute("canplay") == "True")
{
signDemo = "+";
modeList.demo = true;
}
//subProc
selectSubProc(demoElement, listSubProc);
@@ -297,7 +324,10 @@ bool DocsUpdater::processingScenXML(const QString dmCode, QString &canplay, QLis
{
//canplay
if(trainElement.toElement().attribute("canplay") == "True")
{
signTrain = "+";
modeList.train = true;
}
//subProc
selectSubProc(trainElement, listSubProc);
@@ -308,7 +338,10 @@ bool DocsUpdater::processingScenXML(const QString dmCode, QString &canplay, QLis
{
//canplay
if(examElement.toElement().attribute("canplay") == "True")
{
signExam = "+";
modeList.exam = true;
}
//subProc
selectSubProc(examElement, listSubProc);
@@ -319,7 +352,10 @@ bool DocsUpdater::processingScenXML(const QString dmCode, QString &canplay, QLis
{
//canplay
if(autoElement.toElement().attribute("canplay") == "True")
{
signAuto = "+";
modeList.autoM = true;
}
//subProc
//Из этого режима не берем!
@@ -350,3 +386,11 @@ void DocsUpdater::selectSubProc(QDomElement &modeElement, QList<SubProc> &listSu
}
}
}
DM *DocsUpdater::getDMmoduleByDMcode(QString dmCode)
{
if(!DMmodulesMap.contains(dmCode))
return nullptr;
return DMmodulesMap.value(dmCode);
}