]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/private/kdirectorycontentscounterworker.cpp
Add clang-format and format code as in Frameworks
[dolphin.git] / src / kitemviews / private / kdirectorycontentscounterworker.cpp
index 3117d07aa4ea4e6175002bbeec4a812f61661ab5..e227c1bc6895815733042b152e210c6264dfd8c9 100644 (file)
@@ -1,22 +1,9 @@
-/***************************************************************************
- *   Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com>             *
- *   Copyright (C) 2013 by Frank Reininghaus <frank78ac@googlemail.com>    *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
- ***************************************************************************/
+/*
+ * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
+ * SPDX-FileCopyrightText: 2013 Frank Reininghaus <frank78ac@googlemail.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
 
 #include "kdirectorycontentscounterworker.h"
 
 
 #include "dolphin_detailsmodesettings.h"
 
-KDirectoryContentsCounterWorker::KDirectoryContentsCounterWorker(QObject* parent) :
-    QObject(parent)
+KDirectoryContentsCounterWorker::KDirectoryContentsCounterWorker(QObject *parent)
+    QObject(parent)
 {
     qRegisterMetaType<KDirectoryContentsCounterWorker::Options>();
 }
 
-KDirectoryContentsCounterWorker::CountResult walkDir(const QString &dirPath,
-                                                     const bool countHiddenFiles,
-                                                     const bool countDirectoriesOnly,
-                                                     QT_DIRENT *dirEntry,
-                                                     const uint allowedRecursiveLevel)
+#ifndef Q_OS_WIN
+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))) {
@@ -64,31 +51,25 @@ KDirectoryContentsCounterWorker::CountResult walkDir(const QString &dirPath,
             // 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;
+                    }
                 }
             }
         }
@@ -96,8 +77,9 @@ KDirectoryContentsCounterWorker::CountResult walkDir(const QString &dirPath,
     }
     return KDirectoryContentsCounterWorker::CountResult{count, size};
 }
+#endif
 
-KDirectoryContentsCounterWorker::CountResult KDirectoryContentsCounterWorker::subItemsCount(const QStringpath, Options options)
+KDirectoryContentsCounterWorker::CountResult KDirectoryContentsCounterWorker::subItemsCount(const QString &path, Options options)
 {
     const bool countHiddenFiles = options & CountHiddenFiles;
     const bool countDirectoriesOnly = options & CountDirectoriesOnly;
@@ -113,21 +95,19 @@ KDirectoryContentsCounterWorker::CountResult KDirectoryContentsCounterWorker::su
     } 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(QFile::encodeName(path), countHiddenFiles, countDirectoriesOnly, dirEntry, maxRecursiveLevel);
+    auto res = walkDir(path, countHiddenFiles, countDirectoriesOnly, maxRecursiveLevel);
 
     return res;
 #endif
 }
 
-void KDirectoryContentsCounterWorker::countDirectoryContents(const QStringpath, Options options)
+void KDirectoryContentsCounterWorker::countDirectoryContents(const QString &path, Options options)
 {
     auto res = subItemsCount(path, options);
-    emit result(path, res.count, res.size);
+    Q_EMIT result(path, res.count, res.size);
 }