mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJClient.git
synced 2026-03-28 05:25:39 +03:00
86 lines
2.3 KiB
C++
86 lines
2.3 KiB
C++
#include "updatecontroller.h"
|
|
|
|
UpdateController::UpdateController(DataParser *parser, QObject *parent) :
|
|
QObject(parent)
|
|
{
|
|
this->dataParser = parser;
|
|
localPath = QDir::currentPath() + applicationFolderName;
|
|
}
|
|
|
|
|
|
void UpdateController::calculateHash()
|
|
{
|
|
qDebug() << "Try calculate";
|
|
|
|
|
|
QDirIterator iterator(localPath,QDirIterator::Subdirectories);
|
|
fileDataList.clear();
|
|
QList<FileData> *files = new QList<FileData>;
|
|
QList<FileData> * folders = new QList<FileData>;
|
|
|
|
if(!QDir(applicationFolderName).exists()){ //проверка на наличие папки
|
|
QDir().mkdir(applicationFolderName);
|
|
}
|
|
|
|
QDir dir(localPath);
|
|
QString hashString;
|
|
|
|
while (iterator.hasNext())
|
|
{
|
|
iterator.next();
|
|
QFileInfo fileInfo = iterator.fileInfo();
|
|
FileData currentFile;
|
|
QFile file(fileInfo.absoluteFilePath());
|
|
|
|
quint64 fileSize = file.size(); //буффер для хэширования крупных файлов
|
|
const quint64 bufferSize = 10240;
|
|
|
|
if(fileInfo.isHidden()) continue;
|
|
|
|
if(fileInfo.isFile() && file.open(QIODevice::ReadOnly))
|
|
{
|
|
char buffer[bufferSize];
|
|
int bytesRead;
|
|
int readSize = qMin(fileSize,bufferSize);
|
|
|
|
QCryptographicHash hash(QCryptographicHash::Md5);
|
|
|
|
while(readSize > 0 && (bytesRead = file.read(buffer,readSize)) > 0){
|
|
fileSize -= bytesRead;
|
|
hash.addData(buffer,bytesRead);
|
|
readSize = qMin(fileSize,bufferSize);
|
|
}
|
|
hashString = QString(hash.result().toHex());
|
|
currentFile.path = Tools::createLocalPath(fileInfo.absoluteFilePath());
|
|
currentFile.hash = hashString;
|
|
files->push_back(currentFile);
|
|
}
|
|
else if (fileInfo.isDir() && !fileInfo.isRoot() && fileInfo.fileName() != "..")
|
|
{
|
|
currentFile.path = Tools::createLocalPath(fileInfo.path());
|
|
currentFile.hash = "FOLDER";
|
|
|
|
if(!folders->contains(currentFile)){
|
|
folders->push_back(currentFile);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
fileDataList.append(*folders);
|
|
fileDataList.append(*files);
|
|
|
|
dataParser->createXML(fileDataList);
|
|
|
|
delete folders;
|
|
delete files;
|
|
|
|
}
|
|
|
|
|
|
|
|
UpdateController::~UpdateController()
|
|
{
|
|
|
|
}
|