From d543ab0fbd32f109458c1d7f936f75c687f35ed8 Mon Sep 17 00:00:00 2001 From: Artem Sokolovskii Date: Tue, 14 Sep 2021 14:20:50 +0200 Subject: [PATCH] FilePath: Add function which iterates through the directory Change-Id: Iaebd2b08341781307b98b6aae61b0b44b127ce18 Reviewed-by: hjk --- src/libs/utils/filepath.cpp | 17 +++++++++++++++++ src/libs/utils/filepath.h | 5 +++++ 2 files changed, 22 insertions(+) diff --git a/src/libs/utils/filepath.cpp b/src/libs/utils/filepath.cpp index 4e3f0f882e8..b35788705d4 100644 --- a/src/libs/utils/filepath.cpp +++ b/src/libs/utils/filepath.cpp @@ -33,6 +33,7 @@ #include "qtcassert.h" #include "savefile.h" +#include #include #include #include @@ -721,6 +722,22 @@ QList FilePath::dirEntries(QDir::Filters filters) const return dirEntries({}, filters); } +void FilePath::iterateDirectory(const std::function &callBack, + const QStringList &nameFilters, + QDir::Filters filters, + QDirIterator::IteratorFlags flags) +{ + if (needsDevice()) { + for (const FilePath &filePath : + s_deviceHooks.dirEntries(*this, nameFilters, filters, QDir::NoSort)) + callBack(filePath); + } + + QDirIterator it(m_data, nameFilters, filters, flags); + while (it.hasNext()) + callBack(FilePath::fromString(it.next())); +} + QByteArray FilePath::fileContents(qint64 maxSize, qint64 offset) const { if (needsDevice()) { diff --git a/src/libs/utils/filepath.h b/src/libs/utils/filepath.h index 129bdf76c86..ad1ac0f5b2e 100644 --- a/src/libs/utils/filepath.h +++ b/src/libs/utils/filepath.h @@ -30,6 +30,7 @@ #include "hostosinfo.h" #include +#include #include #include @@ -155,6 +156,10 @@ public: [[nodiscard]] Environment deviceEnvironment() const; [[nodiscard]] FilePath onDevice(const FilePath &deviceTemplate) const; [[nodiscard]] FilePath withNewPath(const QString &newPath) const; + void iterateDirectory(const std::function &callBack, + const QStringList &nameFilters, + QDir::Filters filters = QDir::NoFilter, + QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags); // makes sure that capitalization of directories is canonical // on Windows and macOS. This is rarely needed.