mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-28 19:55:48 +03:00
hotfix: updateController
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user