QAbstractFileEngine: add a path parameter to beginEntryList()

Change beginEntryList() to take a path parameter, which it passes on
to the QAFEIterator constructor; setting the path at construction
makes more sense, because typically the path isn't supposed to change
during iteration, and this simplifies the code at the call site.

Remove setPath(), the last usage in Qt repos was in QtCreator, and that
has been ported away from it.

Change-Id: I01baa688e0f9b582aacb63d7d98a794276e58034
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Ahmad Samir 2024-02-28 23:52:38 +02:00
parent e146d835a6
commit 886eb76aea
20 changed files with 61 additions and 62 deletions

View File

@ -39,9 +39,10 @@ QAbstractSocketEngine *ZipEngineHandler::create(const QString &fileName) const
//! [2] //! [2]
QAbstractFileEngine::IteratorUniquePtr QAbstractFileEngine::IteratorUniquePtr
CustomFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames) CustomFileEngine::beginEntryList(const QString &path, QDir::Filters filters,
const QStringList &filterNames)
{ {
return std::make_unique<CustomFileEngineIterator>(filters, filterNames); return std::make_unique<CustomFileEngineIterator>(path, filters, filterNames);
} }
//! [2] //! [2]
@ -50,8 +51,8 @@ CustomFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filte
class CustomIterator : public QAbstractFileEngineIterator class CustomIterator : public QAbstractFileEngineIterator
{ {
public: public:
CustomIterator(const QStringList &nameFilters, QDir::Filters filters) CustomIterator(const QString &path, const QStringList &nameFilters, QDir::Filters filters)
: QAbstractFileEngineIterator(nameFilters, filters), index(0) : QAbstractFileEngineIterator(path, nameFilters, filters), index(0)
{ {
// In a real iterator, these entries are fetched from the // In a real iterator, these entries are fetched from the
// file system based on the value of path(). // file system based on the value of path().

View File

@ -902,10 +902,11 @@ bool QAbstractFileEngine::cloneTo(QAbstractFileEngine *target)
Constructs a QAbstractFileEngineIterator, using the entry filters \a Constructs a QAbstractFileEngineIterator, using the entry filters \a
filters, and wildcard name filters \a nameFilters. filters, and wildcard name filters \a nameFilters.
*/ */
QAbstractFileEngineIterator::QAbstractFileEngineIterator(QDir::Filters filters, QAbstractFileEngineIterator::QAbstractFileEngineIterator(const QString &path, QDir::Filters filters,
const QStringList &nameFilters) const QStringList &nameFilters)
: m_filters(filters), : m_filters(filters),
m_nameFilters(nameFilters) m_nameFilters(nameFilters),
m_path(appendSlashIfNeeded(path))
{ {
} }
@ -920,10 +921,8 @@ QAbstractFileEngineIterator::~QAbstractFileEngineIterator()
/*! /*!
Returns the path for this iterator. It can be set using setPath(). Returns the path for this iterator. The path is set by beginEntryList().
Typically the path is passed to beginEntryList(), which sets the path. The path should't be changed once iteration begins.
\note The path should't be changed once iteration begins.
\sa nameFilters(), filters() \sa nameFilters(), filters()
*/ */
@ -932,17 +931,6 @@ QString QAbstractFileEngineIterator::path() const
return m_path; return m_path;
} }
/*!
\internal
Sets the iterator path to \a path. This function is called from within
QDirListing.
*/
void QAbstractFileEngineIterator::setPath(const QString &path)
{
m_path = appendSlashIfNeeded(path);
}
/*! /*!
Returns the name filters for this iterator. Returns the name filters for this iterator.
@ -1027,16 +1015,18 @@ QFileInfo QAbstractFileEngineIterator::currentFileInfo() const
*/ */
/*! /*!
Returns a QAbstractFileEngine::IteratorUniquePtr, that uses \a filters Returns a QAbstractFileEngine::IteratorUniquePtr, that can be used
for entry filtering and \a filterNames for name filtering. This function to iterate over the entries in \a path, using \a filters for entry
is called by QDirListing to initiate directory iteration. filtering and \a filterNames for name filtering. This function is called
by QDirListing to initiate directory iteration.
\sa QDirListing \sa QDirListing
*/ */
QAbstractFileEngine::IteratorUniquePtr QAbstractFileEngine::IteratorUniquePtr
QAbstractFileEngine::beginEntryList(QDir::Filters filters, QAbstractFileEngine::beginEntryList(const QString &path, QDir::Filters filters,
const QStringList &filterNames) const QStringList &filterNames)
{ {
Q_UNUSED(path);
Q_UNUSED(filters); Q_UNUSED(filters);
Q_UNUSED(filterNames); Q_UNUSED(filterNames);
return {}; return {};

View File

@ -130,7 +130,7 @@ public:
using IteratorUniquePtr = std::unique_ptr<Iterator>; using IteratorUniquePtr = std::unique_ptr<Iterator>;
virtual IteratorUniquePtr virtual IteratorUniquePtr
beginEntryList(QDir::Filters filters, const QStringList &filterNames); beginEntryList(const QString &path, QDir::Filters filters, const QStringList &filterNames);
virtual IteratorUniquePtr endEntryList() { return {}; } virtual IteratorUniquePtr endEntryList() { return {}; }
virtual qint64 read(char *data, qint64 maxlen); virtual qint64 read(char *data, qint64 maxlen);
@ -198,13 +198,13 @@ public:
class Q_CORE_EXPORT QAbstractFileEngineIterator class Q_CORE_EXPORT QAbstractFileEngineIterator
{ {
public: public:
QAbstractFileEngineIterator(QDir::Filters filters, const QStringList &nameFilters); QAbstractFileEngineIterator(const QString &path, QDir::Filters filters,
const QStringList &nameFilters);
virtual ~QAbstractFileEngineIterator(); virtual ~QAbstractFileEngineIterator();
virtual QString next() = 0; virtual QString next() = 0;
virtual bool hasNext() const = 0; virtual bool hasNext() const = 0;
void setPath(const QString &path);
QString path() const; QString path() const;
QStringList nameFilters() const; QStringList nameFilters() const;
QDir::Filters filters() const; QDir::Filters filters() const;

View File

@ -165,8 +165,7 @@ void QDirListingPrivate::pushDirectory(QDirEntryInfo &entryInfo)
if (engine) { if (engine) {
engine->setFileName(path); engine->setFileName(path);
if (auto it = engine->beginEntryList(filters, nameFilters)) { if (auto it = engine->beginEntryList(path, filters, nameFilters)) {
it->setPath(path);
fileEngineIterators.emplace(std::move(it)); fileEngineIterators.emplace(std::move(it));
} else { } else {
// No iterator; no entry list. // No iterator; no entry list.

View File

@ -792,9 +792,10 @@ qint64 QFSFileEnginePrivate::writeFdFh(const char *data, qint64 len)
\internal \internal
*/ */
QAbstractFileEngine::IteratorUniquePtr QAbstractFileEngine::IteratorUniquePtr
QFSFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames) QFSFileEngine::beginEntryList(const QString &path, QDir::Filters filters,
const QStringList &filterNames)
{ {
return std::make_unique<QFSFileEngineIterator>(filters, filterNames); return std::make_unique<QFSFileEngineIterator>(path, filters, filterNames);
} }
#endif // QT_NO_FILESYSTEMITERATOR #endif // QT_NO_FILESYSTEMITERATOR

View File

@ -9,8 +9,9 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
QFSFileEngineIterator::QFSFileEngineIterator(QDir::Filters filters, const QStringList &filterNames) QFSFileEngineIterator::QFSFileEngineIterator(const QString &path, QDir::Filters filters,
: QAbstractFileEngineIterator(filters, filterNames), const QStringList &filterNames)
: QAbstractFileEngineIterator(path, filters, filterNames),
done(false) done(false)
{ {
} }

View File

@ -26,7 +26,7 @@ QT_BEGIN_NAMESPACE
class QFSFileEngineIterator : public QAbstractFileEngineIterator class QFSFileEngineIterator : public QAbstractFileEngineIterator
{ {
public: public:
QFSFileEngineIterator(QDir::Filters filters, const QStringList &filterNames); QFSFileEngineIterator(const QString &path, QDir::Filters filters, const QStringList &filterNames);
~QFSFileEngineIterator(); ~QFSFileEngineIterator();
QString next() override; QString next() override;

View File

@ -82,7 +82,7 @@ public:
int handle() const override; int handle() const override;
#ifndef QT_NO_FILESYSTEMITERATOR #ifndef QT_NO_FILESYSTEMITERATOR
IteratorUniquePtr beginEntryList(QDir::Filters filters, IteratorUniquePtr beginEntryList(const QString &path, QDir::Filters filters,
const QStringList &filterNames) override; const QStringList &filterNames) override;
#endif #endif

View File

@ -1535,9 +1535,10 @@ QDateTime QResourceFileEngine::fileTime(FileTime time) const
\internal \internal
*/ */
QAbstractFileEngine::IteratorUniquePtr QAbstractFileEngine::IteratorUniquePtr
QResourceFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames) QResourceFileEngine::beginEntryList(const QString &path, QDir::Filters filters,
const QStringList &filterNames)
{ {
return std::make_unique<QResourceFileEngineIterator>(filters, filterNames); return std::make_unique<QResourceFileEngineIterator>(path, filters, filterNames);
} }
bool QResourceFileEngine::extension(Extension extension, const ExtensionOption *option, ExtensionReturn *output) bool QResourceFileEngine::extension(Extension extension, const ExtensionOption *option, ExtensionReturn *output)

View File

@ -8,9 +8,10 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
QResourceFileEngineIterator::QResourceFileEngineIterator(QDir::Filters filters, QResourceFileEngineIterator::QResourceFileEngineIterator(const QString &path, QDir::Filters filters,
const QStringList &filterNames) const QStringList &filterNames)
: QAbstractFileEngineIterator(filters, filterNames), index(-1) : QAbstractFileEngineIterator(path, filters, filterNames),
index(-1)
{ {
} }

View File

@ -24,7 +24,8 @@ class QResourceFileEngineIteratorPrivate;
class QResourceFileEngineIterator : public QAbstractFileEngineIterator class QResourceFileEngineIterator : public QAbstractFileEngineIterator
{ {
public: public:
QResourceFileEngineIterator(QDir::Filters filters, const QStringList &filterNames); QResourceFileEngineIterator(const QString &path, QDir::Filters filters,
const QStringList &filterNames);
~QResourceFileEngineIterator(); ~QResourceFileEngineIterator();
QString next() override; QString next() override;

View File

@ -49,7 +49,7 @@ public:
QDateTime fileTime(FileTime time) const override; QDateTime fileTime(FileTime time) const override;
IteratorUniquePtr beginEntryList(QDir::Filters filters, IteratorUniquePtr beginEntryList(const QString &path, QDir::Filters filters,
const QStringList &filterNames) override; const QStringList &filterNames) override;
bool extension(Extension extension, const ExtensionOption *option = nullptr, ExtensionReturn *output = nullptr) override; bool extension(Extension extension, const ExtensionOption *option = nullptr, ExtensionReturn *output = nullptr) override;

View File

@ -249,9 +249,10 @@ QString AndroidContentFileEngine::fileName(FileName f) const
} }
QAbstractFileEngine::IteratorUniquePtr QAbstractFileEngine::IteratorUniquePtr
AndroidContentFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames) AndroidContentFileEngine::beginEntryList(const QString &path, QDir::Filters filters,
const QStringList &filterNames)
{ {
return std::make_unique<AndroidContentFileEngineIterator>(filters, filterNames); return std::make_unique<AndroidContentFileEngineIterator>(path, filters, filterNames);
} }
AndroidContentFileEngineHandler::AndroidContentFileEngineHandler() = default; AndroidContentFileEngineHandler::AndroidContentFileEngineHandler() = default;
@ -265,9 +266,9 @@ QAbstractFileEngine* AndroidContentFileEngineHandler::create(const QString &file
return new AndroidContentFileEngine(fileName); return new AndroidContentFileEngine(fileName);
} }
AndroidContentFileEngineIterator::AndroidContentFileEngineIterator(QDir::Filters filters, AndroidContentFileEngineIterator::AndroidContentFileEngineIterator(
const QStringList &filterNames) const QString &path, QDir::Filters filters, const QStringList &filterNames)
: QAbstractFileEngineIterator(filters, filterNames) : QAbstractFileEngineIterator(path, filters, filterNames)
{ {
} }

View File

@ -30,7 +30,7 @@ public:
QDateTime fileTime(FileTime time) const override; QDateTime fileTime(FileTime time) const override;
FileFlags fileFlags(FileFlags type = FileInfoAll) const override; FileFlags fileFlags(FileFlags type = FileInfoAll) const override;
QString fileName(FileName file = DefaultName) const override; QString fileName(FileName file = DefaultName) const override;
IteratorUniquePtr beginEntryList(QDir::Filters filters, IteratorUniquePtr beginEntryList(const QString &path, QDir::Filters filters,
const QStringList &filterNames) override; const QStringList &filterNames) override;
private: private:
@ -52,7 +52,8 @@ public:
class AndroidContentFileEngineIterator : public QAbstractFileEngineIterator class AndroidContentFileEngineIterator : public QAbstractFileEngineIterator
{ {
public: public:
AndroidContentFileEngineIterator(QDir::Filters filters, const QStringList &filterNames); AndroidContentFileEngineIterator(const QString &path, QDir::Filters filters,
const QStringList &filterNames);
~AndroidContentFileEngineIterator(); ~AndroidContentFileEngineIterator();
QString next() override; QString next() override;
bool hasNext() const override; bool hasNext() const override;

View File

@ -171,7 +171,7 @@ public:
AndroidAbstractFileEngineIterator(QDir::Filters filters, AndroidAbstractFileEngineIterator(QDir::Filters filters,
const QStringList &nameFilters, const QStringList &nameFilters,
const QString &path) const QString &path)
: QAbstractFileEngineIterator(filters, nameFilters) : QAbstractFileEngineIterator(path, filters, nameFilters)
{ {
m_currentIterator = FolderIterator::fromCache(cleanedAssetPath(path), true); m_currentIterator = FolderIterator::fromCache(cleanedAssetPath(path), true);
} }
@ -368,8 +368,9 @@ public:
} }
IteratorUniquePtr IteratorUniquePtr
beginEntryList(QDir::Filters filters, const QStringList &filterNames) override beginEntryList(const QString &, QDir::Filters filters, const QStringList &filterNames) override
{ {
// AndroidAbstractFileEngineIterator use `m_fileName` as the path
if (m_assetInfo && m_assetInfo->type == AssetItem::Type::Folder) if (m_assetInfo && m_assetInfo->type == AssetItem::Type::Folder)
return std::make_unique<AndroidAbstractFileEngineIterator>(filters, filterNames, m_fileName); return std::make_unique<AndroidAbstractFileEngineIterator>(filters, filterNames, m_fileName);
return nullptr; return nullptr;

View File

@ -29,7 +29,7 @@ public:
void setFileName(const QString &file) override; void setFileName(const QString &file) override;
#ifndef QT_NO_FILESYSTEMITERATOR #ifndef QT_NO_FILESYSTEMITERATOR
IteratorUniquePtr beginEntryList(QDir::Filters filters, IteratorUniquePtr beginEntryList(const QString &path, QDir::Filters filters,
const QStringList &filterNames) override; const QStringList &filterNames) override;
#endif #endif

View File

@ -258,8 +258,8 @@ public:
QIOSAssetEnumerator *m_enumerator; QIOSAssetEnumerator *m_enumerator;
QIOSFileEngineIteratorAssetsLibrary( QIOSFileEngineIteratorAssetsLibrary(
QDir::Filters filters, const QStringList &nameFilters) const QString &path, QDir::Filters filters, const QStringList &nameFilters)
: QAbstractFileEngineIterator(filters, nameFilters) : QAbstractFileEngineIterator(path, filters, nameFilters)
, m_enumerator(new QIOSAssetEnumerator([[[ALAssetsLibrary alloc] init] autorelease], ALAssetsGroupAll)) , m_enumerator(new QIOSAssetEnumerator([[[ALAssetsLibrary alloc] init] autorelease], ALAssetsGroupAll))
{ {
} }
@ -441,9 +441,10 @@ void QIOSFileEngineAssetsLibrary::setFileName(const QString &file)
#ifndef QT_NO_FILESYSTEMITERATOR #ifndef QT_NO_FILESYSTEMITERATOR
QAbstractFileEngine::IteratorUniquePtr QAbstractFileEngine::IteratorUniquePtr
QIOSFileEngineAssetsLibrary::beginEntryList(QDir::Filters filters, const QStringList &filterNames) QIOSFileEngineAssetsLibrary::beginEntryList(
const QString &path, QDir::Filters filters, const QStringList &filterNames)
{ {
return std::make_unique<QIOSFileEngineIteratorAssetsLibrary>(filters, filterNames); return std::make_unique<QIOSFileEngineIteratorAssetsLibrary>(path, filters, filterNames);
} }
QT_END_NAMESPACE QT_END_NAMESPACE

View File

@ -430,8 +430,8 @@ public:
class Iterator : public QAbstractFileEngineIterator class Iterator : public QAbstractFileEngineIterator
{ {
public: public:
Iterator(QDir::Filters filters, const QStringList &filterNames) Iterator(const QString &path, QDir::Filters filters, const QStringList &filterNames)
: QAbstractFileEngineIterator(filters, filterNames) : QAbstractFileEngineIterator(path, filters, filterNames)
{ {
names.append("foo"); names.append("foo");
names.append("bar"); names.append("bar");
@ -461,9 +461,9 @@ public:
} }
IteratorUniquePtr IteratorUniquePtr
beginEntryList(QDir::Filters filters, const QStringList &filterNames) override beginEntryList(const QString &path, QDir::Filters filters, const QStringList &filterNames) override
{ {
return std::make_unique<Iterator>(filters, filterNames); return std::make_unique<Iterator>(path, filters, filterNames);
} }
FileFlags fileFlags(FileFlags type) const override FileFlags fileFlags(FileFlags type) const override
{ {

View File

@ -437,7 +437,7 @@ public:
{ } { }
IteratorUniquePtr IteratorUniquePtr
beginEntryList(QDir::Filters, const QStringList &) override beginEntryList(const QString &, QDir::Filters, const QStringList &) override
{ return nullptr; } { return nullptr; }
}; };

View File

@ -421,7 +421,7 @@ public:
: QFSFileEngine(fileName) : QFSFileEngine(fileName)
{ } { }
IteratorUniquePtr beginEntryList(QDir::Filters, const QStringList &) override IteratorUniquePtr beginEntryList(const QString &, QDir::Filters, const QStringList &) override
{ return nullptr; } { return nullptr; }
}; };