#include "DirectoryScanner.h" #include #include #include #include DirectoryScanner::DirectoryScanner(const QString &rootDirectory, const QString &secretSalt) : m_hasher(QCryptographicHash::Sha1), m_secretSalt(secretSalt) { QDir dir(rootDirectory); m_absoluteRoot = dir.canonicalPath(); if (dir.exists()) scanDirectory(dir); } void DirectoryScanner::scanDirectory(const QDir &directory) { foreach (const QFileInfo &fileInfo, directory.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::Readable | QDir::Hidden)) { if (fileInfo.isDir()) scanDirectory(QDir(fileInfo.absoluteFilePath())); else if (fileInfo.isFile()) { QString filePath = fileInfo.canonicalFilePath(); if (filePath.startsWith(m_absoluteRoot)) filePath = filePath.remove(0, m_absoluteRoot.length()); filePath.append(m_secretSalt); filePath.prepend(m_secretSalt); m_hasher.addData(filePath.toUtf8()); m_files.insert(m_hasher.result().toHex(), fileInfo); m_hasher.reset(); } } } const QHash DirectoryScanner::fileList() const { return m_files; }