ref: some changes

* change hash process
* add commands for version
This commit is contained in:
semenov
2025-01-16 11:19:41 +03:00
parent 65a0dca9bf
commit e1c3fcae36
15 changed files with 487 additions and 209 deletions

View File

@@ -36,53 +36,27 @@ QList<FileData> UpdateController::calculateHash(QString path,QString ignoreName)
{
qDebug() << "Try calculate";
QDir dir(path);
QDirIterator iterator(dir,QDirIterator::Subdirectories);
if(!QDir(path).exists())
{
QDir().mkdir(path);
}
QList<FileData> *hashes = new QList<FileData>;
if(!QDir(path).exists())
{ //проверка на наличие папки
QDir().mkdir(path);
}
QStringList filter;
filter << "*";
QString hashString;
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(ignoreName != "" && fileInfo.path().contains(ignoreName)) continue;
if(fileInfo.isFile() && file.open(QIODevice::ReadOnly))
QString fileName = fileInfo.fileName();
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.path = Tools::createLocalPath(fileInfo.absoluteFilePath());
currentFile.hash = hashString;
hashes->push_back(currentFile);
file.close();
}
else if (fileInfo.isDir() && !fileInfo.isRoot() && fileInfo.fileName() != "..")
{
currentFile.path = Tools::createLocalPath(fileInfo.path());
currentFile.hash = "FOLDER";
if(!hashes->contains(currentFile))
@@ -90,10 +64,106 @@ QList<FileData> UpdateController::calculateHash(QString path,QString ignoreName)
hashes->push_back(currentFile);
}
}
}
std::sort(hashes->begin(),hashes->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(ignoreName != "" && fileInfo.path().contains(ignoreName)) 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;
hashes->push_back(currentFile);
file.close();
}
}
// QDirIterator iterator(dir,QDirIterator::Subdirectories);
//
// if(!QDir(path).exists())
// { //проверка на наличие папки
// QDir().mkdir(path);
// }
// 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(ignoreName != "" && fileInfo.path().contains(ignoreName)) 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;
// hashes->push_back(currentFile);
// file.close();
// }
// else if (fileInfo.isDir() && !fileInfo.isRoot() && fileInfo.fileName() != "..")
// {
// currentFile.path = Tools::createLocalPath(fileInfo.path());
// currentFile.hash = "FOLDER";
// if(!hashes->contains(currentFile))
// {
// hashes->push_back(currentFile);
// }
// }
// }
//std::sort(hashes->begin(),hashes->end());
return *hashes;
}