#include "dataparseroutput.h" DataParserOutput::DataParserOutput() {} QByteArray DataParserOutput::xmlAnswer_notify(QString code) { QList listTag; SAttribute attribute1 = {"Code", code}; QList listAttr = {attribute1}; SXmlAnswerTag tag = {"ClientNotify", listAttr}; listTag.append(tag); return xmlAnswer(listTag); } QByteArray DataParserOutput::xmlAnswer(QList 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 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 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* DataParserOutput::xmlFileDataParse(QByteArray array, QString filter = "") { QXmlStreamReader xmlReader(array); QList *datas = new QList; 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; }