Utils: Use callbacks when iterating remote file systems

This will make recursion easier and has the potential to avoid creating
big intermediate lists.

Change-Id: I44d42925dae9c0048338c7d0a6aa26606f314c28
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
hjk
2021-12-14 12:15:40 +01:00
parent 9a28edfd87
commit 7677dc4ba0
11 changed files with 94 additions and 96 deletions

View File

@@ -721,8 +721,11 @@ FilePaths FilePath::dirEntries(const QStringList &nameFilters,
QDir::SortFlags sort) const
{
if (needsDevice()) {
QTC_ASSERT(s_deviceHooks.dirEntries, return {});
return s_deviceHooks.dirEntries(*this, nameFilters, filters, sort);
QTC_ASSERT(s_deviceHooks.iterateDirectory, return {});
FilePaths result;
const auto callBack = [&result](const FilePath &path) { result.append(path); return true; };
s_deviceHooks.iterateDirectory(*this, callBack, nameFilters, filters);
return result;
}
const QFileInfoList entryInfoList = QDir(m_data).entryInfoList(nameFilters, filters, sort);
@@ -741,10 +744,9 @@ void FilePath::iterateDirectory(const std::function<bool(const FilePath &item)>
QDirIterator::IteratorFlags flags) const
{
if (needsDevice()) {
for (const FilePath &filePath :
s_deviceHooks.dirEntries(*this, nameFilters, filters, QDir::NoSort))
if (!callBack(filePath))
return;
QTC_ASSERT(s_deviceHooks.iterateDirectory, return);
s_deviceHooks.iterateDirectory(*this, callBack, nameFilters, filters);
return;
}
QDirIterator it(m_data, nameFilters, filters, flags);