#include "dolphin_detailsmodesettings.h"
-KDirectoryContentsCounterWorker::KDirectoryContentsCounterWorker(QObject* parent) :
- QObject(parent)
+KDirectoryContentsCounterWorker::KDirectoryContentsCounterWorker(QObject *parent)
+ : QObject(parent)
{
qRegisterMetaType<KDirectoryContentsCounterWorker::Options>();
}
#ifndef Q_OS_WIN
-KDirectoryContentsCounterWorker::CountResult walkDir(const QString &dirPath,
- const bool countHiddenFiles,
- const bool countDirectoriesOnly,
- QT_DIRENT *dirEntry,
- const uint allowedRecursiveLevel)
+KDirectoryContentsCounterWorker::CountResult
+walkDir(const QString &dirPath, const bool countHiddenFiles, const bool countDirectoriesOnly, const uint allowedRecursiveLevel)
{
int count = -1;
long size = -1;
auto dir = QT_OPENDIR(QFile::encodeName(dirPath));
if (dir) {
count = 0;
+ size = 0;
+ QT_DIRENT *dirEntry;
QT_STATBUF buf;
while ((dirEntry = QT_READDIR(dir))) {
// If only directories are counted, consider an unknown file type and links also
// as directory instead of trying to do an expensive stat()
// (see bugs 292642 and 299997).
- const bool countEntry = !countDirectoriesOnly ||
- dirEntry->d_type == DT_DIR ||
- dirEntry->d_type == DT_LNK ||
- dirEntry->d_type == DT_UNKNOWN;
+ const bool countEntry = !countDirectoriesOnly || dirEntry->d_type == DT_DIR || dirEntry->d_type == DT_LNK || dirEntry->d_type == DT_UNKNOWN;
if (countEntry) {
++count;
}
if (allowedRecursiveLevel > 0) {
-
- bool linkFound = false;
QString nameBuf = QStringLiteral("%1/%2").arg(dirPath, dirEntry->d_name);
- if (dirEntry->d_type == DT_REG || dirEntry->d_type == DT_LNK) {
+ if (dirEntry->d_type == DT_REG) {
if (QT_STAT(nameBuf.toLocal8Bit(), &buf) == 0) {
- if (S_ISDIR(buf.st_mode)) {
- // was a dir link, recurse
- linkFound = true;
- }
size += buf.st_size;
}
}
- if (dirEntry->d_type == DT_DIR || linkFound) {
- // recursion for dirs and dir links
- size += walkDir(nameBuf, countHiddenFiles, countDirectoriesOnly, dirEntry, allowedRecursiveLevel - 1).size;
+ if (dirEntry->d_type == DT_DIR) {
+ // recursion for dirs
+ auto subdirResult = walkDir(nameBuf, countHiddenFiles, countDirectoriesOnly, allowedRecursiveLevel - 1);
+ if (subdirResult.size > 0) {
+ size += subdirResult.size;
+ }
}
}
}
}
#endif
-KDirectoryContentsCounterWorker::CountResult KDirectoryContentsCounterWorker::subItemsCount(const QString& path, Options options)
+KDirectoryContentsCounterWorker::CountResult KDirectoryContentsCounterWorker::subItemsCount(const QString &path, Options options)
{
const bool countHiddenFiles = options & CountHiddenFiles;
const bool countDirectoriesOnly = options & CountDirectoriesOnly;
} else {
filters |= QDir::AllEntries;
}
- return {dir.entryList(filters).count(), 0};
+ return {static_cast<int>(dir.entryList(filters).count()), 0};
#else
const uint maxRecursiveLevel = DetailsModeSettings::directorySizeCount() ? 1 : DetailsModeSettings::recursiveDirectorySizeLimit();
- QT_DIRENT *dirEntry = nullptr;
-
- auto res = walkDir(path, countHiddenFiles, countDirectoriesOnly, dirEntry, maxRecursiveLevel);
+ auto res = walkDir(path, countHiddenFiles, countDirectoriesOnly, maxRecursiveLevel);
return res;
#endif
}
-void KDirectoryContentsCounterWorker::countDirectoryContents(const QString& path, Options options)
+void KDirectoryContentsCounterWorker::countDirectoryContents(const QString &path, Options options)
{
auto res = subItemsCount(path, options);
Q_EMIT result(path, res.count, res.size);