summaryrefslogtreecommitdiff
path: root/src/libs/utils/filepath.cpp
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2022-01-21 12:22:54 +0100
committerhjk <hjk@qt.io>2022-01-26 13:13:41 +0000
commit1fc83d2a568dea3233212b351d6e9ffbc05c75e9 (patch)
treedb9cc36793eef961237f18ea1567baa7732be592 /src/libs/utils/filepath.cpp
parentc6fdb66b2bd5c1dd30220fb0e87d2fc2e0dc2615 (diff)
downloadqt-creator-1fc83d2a568dea3233212b351d6e9ffbc05c75e9.tar.gz
Utils: Wrap various file system iteration flags and filters
... into a single class. This makes passing them around as a whole easier, and opens a path to have "generic" filters in form of a lambda or such. Change-Id: Ibf644b2fedcf0f1a35258030710afff8f5873f88 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src/libs/utils/filepath.cpp')
-rw-r--r--src/libs/utils/filepath.cpp28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/libs/utils/filepath.cpp b/src/libs/utils/filepath.cpp
index 2b665d0c84..bcf713687a 100644
--- a/src/libs/utils/filepath.cpp
+++ b/src/libs/utils/filepath.cpp
@@ -718,19 +718,16 @@ bool FilePath::createDir() const
return dir.mkpath(dir.absolutePath());
}
-FilePaths FilePath::dirEntries(const QStringList &nameFilters,
- QDir::Filters filters,
- QDirIterator::IteratorFlags flags,
- QDir::SortFlags sort) const
+FilePaths FilePath::dirEntries(const FileFilter &filter, QDir::SortFlags sort) const
{
FilePaths result;
if (needsDevice()) {
QTC_ASSERT(s_deviceHooks.iterateDirectory, return {});
const auto callBack = [&result](const FilePath &path) { result.append(path); return true; };
- s_deviceHooks.iterateDirectory(*this, callBack, nameFilters, filters, flags);
+ s_deviceHooks.iterateDirectory(*this, callBack, filter);
} else {
- QDirIterator dit(m_data, nameFilters, filters, flags);
+ QDirIterator dit(m_data, filter.nameFilters, filter.fileFilters, filter.iteratorFlags);
while (dit.hasNext())
result.append(FilePath::fromString(dit.next()));
}
@@ -748,7 +745,7 @@ FilePaths FilePath::dirEntries(const QStringList &nameFilters,
FilePaths FilePath::dirEntries(QDir::Filters filters) const
{
- return dirEntries({}, filters);
+ return dirEntries(FileFilter({}, filters));
}
// This runs \a callBack on each directory entry matching all \a filters and
@@ -756,17 +753,15 @@ FilePaths FilePath::dirEntries(QDir::Filters filters) const
// An empty \nameFilters list matches every name.
void FilePath::iterateDirectory(const std::function<bool(const FilePath &item)> &callBack,
- const QStringList &nameFilters,
- QDir::Filters filters,
- QDirIterator::IteratorFlags flags) const
+ const FileFilter &filter) const
{
if (needsDevice()) {
QTC_ASSERT(s_deviceHooks.iterateDirectory, return);
- s_deviceHooks.iterateDirectory(*this, callBack, nameFilters, filters, flags);
+ s_deviceHooks.iterateDirectory(*this, callBack, filter);
return;
}
- QDirIterator it(m_data, nameFilters, filters, flags);
+ QDirIterator it(m_data, filter.nameFilters, filter.fileFilters, filter.iteratorFlags);
while (it.hasNext()) {
if (!callBack(FilePath::fromString(it.next())))
return;
@@ -1454,6 +1449,15 @@ QTextStream &operator<<(QTextStream &s, const FilePath &fn)
return s << fn.toString();
}
+FileFilter::FileFilter(const QStringList &nameFilters,
+ const QDir::Filters fileFilters,
+ const QDirIterator::IteratorFlags flags)
+ : nameFilters(nameFilters),
+ fileFilters(fileFilters),
+ iteratorFlags(flags)
+{
+}
+
} // namespace Utils
std::hash<Utils::FilePath>::result_type