hotfix: updateController

This commit is contained in:
semenov
2025-01-15 16:13:55 +03:00
parent c65e39ea1d
commit adbd8395ca
4 changed files with 109 additions and 58 deletions

View File

@@ -59,7 +59,6 @@ void UpdateController::compareFiles(ClientHandler* handler, QByteArray array)
loadHash();
clientDataList.clear();
xmlFileDataParse(array);
clientDataList.append(*datas);
checkNeedUpdate(handler);
mutex->unlock();
}
@@ -182,8 +181,6 @@ QString UpdateController::getCommands()
}
void UpdateController::setUpCurrentServerHash()
{
QList<FileData> *fileList = new QList<FileData>;
@@ -296,62 +293,121 @@ QList<FileData>* UpdateController::calculateHash(QString path)
{
serverDataList.clear();
QDirIterator iterator(path,QDirIterator::Subdirectories);
if(!QDir(path).exists()){
QDir().mkdir(path);
}
QDir dir(path);
dir.setFilter(QDir::NoDotAndDotDot);
QString hashString;
QStringList filter;
filter << "*";
QList<FileData> *files = new QList<FileData>;
while (iterator.hasNext())
QDirIterator dirIterator(path,filter, QDir::AllEntries | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
while (dirIterator.hasNext())
{
iterator.next();
QFileInfo fileInfo = iterator.fileInfo();
QFileInfo fileInfo(dirIterator.next());
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) && !fileInfo.fileName().contains(".meta"))
if(fileInfo.isDir() && !fileInfo.fileName().startsWith(".") && fileInfo.fileName() != "RRJLoader")
{
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.hash = hashString;
currentFile.path = Tools::createLocalPath(fileInfo.absoluteFilePath());
files->push_back(currentFile);
file.close();
}
else if(fileInfo.isDir() && fileInfo.fileName() != ".." && !fileInfo.isRoot())
{
currentFile.hash = "FOLDER";
currentFile.path = Tools::createLocalPath(fileInfo.path());
if(!files->contains(currentFile)){
if(!files->contains(currentFile))
{
files->push_back(currentFile);
}
}
}
std::sort(files->begin(),files->end());
QDirIterator fileIterator(path,filter,QDir::Files | QDir::NoDotAndDotDot,QDirIterator::Subdirectories);
while (fileIterator.hasNext())
{
fileIterator.next();
QFileInfo fileInfo = fileIterator.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) && !fileInfo.fileName().contains(".meta"))
{
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);
file.close();
}
}
serverDataList.append(*files);
// QDirIterator iterator(path,QDirIterator::Subdirectories);
// QDir dir(path);
// dir.setFilter(QDir::NoDotAndDotDot);
// 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) && !fileInfo.fileName().contains(".meta"))
// {
// 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.hash = hashString;
// currentFile.path = Tools::createLocalPath(fileInfo.absoluteFilePath());
// files->push_back(currentFile);
// file.close();
// }
// else if(fileInfo.isDir() && fileInfo.fileName() != ".." && !fileInfo.isRoot())
// {
// currentFile.hash = "FOLDER";
// currentFile.path = Tools::createLocalPath(fileInfo.path());
// if(!files->contains(currentFile)){
// files->push_back(currentFile);
// }
// }
// }
// std::sort(files->begin(),files->end());
//
return files;
}
@@ -499,7 +555,6 @@ bool UpdateController::checkDuplicate(QString versionName)
void UpdateController::xmlFileDataParse(QByteArray array)
{
QXmlStreamReader xmlReader(array);
datas = new QList<FileData>;
xmlReader.readNext();
//Крутимся в цикле до тех пор, пока не достигнем конца документа
@@ -523,7 +578,7 @@ void UpdateController::xmlFileDataParse(QByteArray array)
data.hash = value;
}
datas->append(data);
clientDataList.append(data);
}
}
@@ -565,11 +620,6 @@ DataInfo *UpdateController::getCurrentDataInfo()
return dataInfo;
}
QList<FileData> *UpdateController::getDatas() const
{
return datas;
}
void UpdateController::clearCurrentDataInfo()
{
delete dataInfo;