Files
RRJClient/Core/dataparseroutput.cpp
2025-08-11 16:37:12 +03:00

318 lines
9.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "dataparseroutput.h"
DataParserOutput::DataParserOutput() {}
QByteArray DataParserOutput::xmlAnswer_notify(QString code)
{
QList<SXmlAnswerTag> listTag;
SAttribute attribute1 = {"Code", code};
QList<SAttribute> listAttr = {attribute1};
SXmlAnswerTag tag = {"ClientNotify", listAttr};
listTag.append(tag);
return xmlAnswer(listTag);
}
QByteArray DataParserOutput::xmlAnswer(QList<SXmlAnswerTag> listTag, QString elemUp1, QString elemUp2)
{
/* Открываем файл для Записи*/
QFile file(tempName);
file.open(QIODevice::WriteOnly);
/* Создаем объект, с помощью которого осуществляется запись в файл */
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true); // Устанавливаем автоформатирование текста
xmlWriter.writeStartDocument(); // Запускаем запись в документ
if(elemUp1 != "")
xmlWriter.writeStartElement(elemUp1); // Записываем тег
if(elemUp2 != "")
xmlWriter.writeStartElement(elemUp2); // Записываем тег
//Записываем все элементы
foreach(SXmlAnswerTag tag, listTag)
{
xmlWriter.writeStartElement(tag.elementName); // Записываем тег
// Записываем атрибуты
foreach(SAttribute attr, tag.attr)
xmlWriter.writeAttribute(attr.name, attr.value);
xmlWriter.writeEndElement(); // Закрываем тег
}
if(elemUp1 != "")
xmlWriter.writeEndElement(); // Закрываем тег
if(elemUp1 != "")
xmlWriter.writeEndElement(); // Закрываем тег
/* Завершаем запись в документ*/
xmlWriter.writeEndDocument();
file.close(); // Закрываем файл
QByteArray array;
/* Открываем файл для Чтения*/
QFile fileR(tempName);
if (!fileR.open(QFile::ReadOnly | QFile::Text))
{
QString str = "Не удалось открыть файл";
qDebug() << "xmlAnswer: " << str;
}
else
{
array = fileR.readAll();
fileR.close(); // Закрываем файл
}
return array;
}
void DataParserOutput::createFileDataList(QList<FileData> fileDataList,QString filename)
{
QFile file(filename);
file.open(QIODevice::WriteOnly);
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("FileDataList");
foreach (FileData data,fileDataList)
{
xmlWriter.writeStartElement("FileData");
xmlWriter.writeAttribute("Path",data.path);
xmlWriter.writeAttribute("Hash",data.hash);
xmlWriter.writeEndElement();
}
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
file.close();
}
void DataParserOutput::createAuthMessage(ClientAutorization *auth)
{
authPassCache = auth; //кэширование даных авторизации, для сохранения при успешном заходе
QFile file(tempName);
file.open(QIODevice::WriteOnly);
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("ClientAutorization");
xmlWriter.writeAttribute("Login",auth->Login);
xmlWriter.writeAttribute("Password",auth->Password);
xmlWriter.writeEndElement();
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
file.close();
}
void DataParserOutput::createServerSettings(ServerSettings* serverSettings)
{
QFile file(settingsName);
file.open(QIODevice::WriteOnly);
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("ServerSettingsContainer");
xmlWriter.writeStartElement("ServerSettings");
xmlWriter.writeAttribute("Address",serverSettings->Address);
xmlWriter.writeAttribute("Port",serverSettings->Port);
xmlWriter.writeAttribute("Language","RUS");
xmlWriter.writeAttribute("AutoStart",QString::number(false));
xmlWriter.writeAttribute("DestPortMath","18003");
xmlWriter.writeAttribute("LocalPortMath","18004");
xmlWriter.writeAttribute("UseMathModel",QString::number(serverSettings->mathModelUse));
xmlWriter.writeEndElement();
if(serverSettings->LocalVersionName == "")
{
xmlWriter.writeStartElement("VersionData");
xmlWriter.writeAttribute("Version","NONE");
xmlWriter.writeAttribute("isChangable","0");
xmlWriter.writeEndElement();
}
else
{
xmlWriter.writeStartElement("VersionData");
xmlWriter.writeAttribute("Version",serverSettings->versionData.getViewName());
xmlWriter.writeAttribute("isChangable",QString::number(serverSettings->versionData.getIsChangeable()));
}
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
file.close();
}
void DataParserOutput::changeVersion(StreamingVersionData *versionData)
{
QFile file(settingsName);
file.open(QIODevice::ReadWrite);
QByteArray xmlData(file.readAll());
QDomDocument doc;
doc.setContent(xmlData);
QDomElement containerElement = doc.firstChildElement("ServerSettingsContainer");
QDomElement verDataElement = containerElement.firstChildElement("VersionData");
verDataElement.setAttribute("Version",versionData->getViewName());
verDataElement.setAttribute("Created",versionData->getCreateData().toString());
verDataElement.setAttribute("isChangable",versionData->getIsChangeable());
file.resize(0);
QTextStream out(&file);
doc.save(out,4);
file.close();
}
void DataParserOutput::createAuthData(ServerAuthorization *serverAuth)
{
QFile file(authTempName);
file.open(QIODevice::WriteOnly);
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("AuthData");
xmlWriter.writeAttribute("Login",authPassCache->Login);
xmlWriter.writeAttribute("Password",authPassCache->Password);
xmlWriter.writeAttribute("InstructorName",serverAuth->InstructorName);
xmlWriter.writeAttribute("ClientName",serverAuth->ClientName);
xmlWriter.writeAttribute("AccessType",serverAuth->AccessType);
xmlWriter.writeEndElement();
file.close();
}
void DataParserOutput::createAuthDataOffline(QString username, QString pass)
{
QFile file(authTempName);
file.open(QIODevice::WriteOnly);
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("AuthData");
xmlWriter.writeAttribute("Login",username);
xmlWriter.writeAttribute("Password",pass);
xmlWriter.writeAttribute("InstructorName","empty");
xmlWriter.writeAttribute("ClientName","Offline");
xmlWriter.writeAttribute("AccessType","Offline");
xmlWriter.writeEndElement();
file.close();
}
void DataParserOutput::addRunData(QList<int> displays)
{
QFile file(displayTemp);
file.open(QIODevice::WriteOnly);
QString data;
for(int i = 0; i < displays.count(); i++)
{
data.append(QString::number(displays[i]) + ";");
}
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartElement("DisplayInfo");
xmlWriter.writeAttribute("DisplaysID",data);
xmlWriter.writeEndElement();
file.close();
}
void DataParserOutput::saveClientSettrings(QString language, bool isAutoStart)
{
QFile file(settingsName);
file.open(QIODevice::ReadOnly | QIODevice::Text);
QString settings = file.readAll();
file.close();
file.remove();
file.open(QIODevice::WriteOnly | QIODevice::Text);
auto languagePos = settings.indexOf(XMLLanguageProperty) + XMLLanguageProperty.length();
settings = settings.replace(languagePos,language.size(),language);
auto autoStartPos = settings.indexOf(XMLAutoStartProperty) + XMLAutoStartProperty.length();
settings = settings.replace(autoStartPos,1,QString::number(isAutoStart));
file.write(settings.toUtf8());
file.close();
}
QList<FileData>* DataParserOutput::xmlFileDataParse(QByteArray array, QString filter = "")
{
QXmlStreamReader xmlReader(array);
QList<FileData> *datas = new QList<FileData>;
xmlReader.readNext(); // Переходим к первому элементу в файле
//Крутимся в цикле до тех пор, пока не достигнем конца документа
while(!xmlReader.atEnd())
{
//Проверяем, является ли элемент началом тега
if(xmlReader.isStartElement())
{
if(xmlReader.name() == "FileData")
{
FileData data;
foreach(const QXmlStreamAttribute &attr,xmlReader.attributes())
{
QString name = attr.name().toString();
QString value = attr.value().toString();
if(name == "Path")
data.path = value;
else if(name == "Hash")
data.hash = value;
}
if(data.path.contains(filter))
datas->append(data);
}
}
xmlReader.readNext();
}
return datas;
}