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]
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]
@ -50,8 +51,8 @@ CustomFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filte
class CustomIterator : public QAbstractFileEngineIterator
{
public:
CustomIterator(const QStringList &nameFilters, QDir::Filters filters)
: QAbstractFileEngineIterator(nameFilters, filters), index(0)
CustomIterator(const QString &path, const QStringList &nameFilters, QDir::Filters filters)
: QAbstractFileEngineIterator(path, nameFilters, filters), index(0)
{
// In a real iterator, these entries are fetched from the
// 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
filters, and wildcard name filters \a nameFilters.
*/
QAbstractFileEngineIterator::QAbstractFileEngineIterator(QDir::Filters filters,
QAbstractFileEngineIterator::QAbstractFileEngineIterator(const QString &path, QDir::Filters filters,
const QStringList &nameFilters)
: 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().
Typically the path is passed to beginEntryList(), which sets the path.
\note The path should't be changed once iteration begins.
Returns the path for this iterator. The path is set by beginEntryList().
The path should't be changed once iteration begins.
\sa nameFilters(), filters()
*/
@ -932,17 +931,6 @@ QString QAbstractFileEngineIterator::path() const
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.
@ -1027,16 +1015,18 @@ QFileInfo QAbstractFileEngineIterator::currentFileInfo() const
*/
/*!
Returns a QAbstractFileEngine::IteratorUniquePtr, that uses \a filters
for entry filtering and \a filterNames for name filtering. This function
is called by QDirListing to initiate directory iteration.
Returns a QAbstractFileEngine::IteratorUniquePtr, that can be used
to iterate over the entries in \a path, using \a filters for entry
filtering and \a filterNames for name filtering. This function is called
by QDirListing to initiate directory iteration.
\sa QDirListing
*/
QAbstractFileEngine::IteratorUniquePtr
QAbstractFileEngine::beginEntryList(QDir::Filters filters,
QAbstractFileEngine::beginEntryList(const QString &path, QDir::Filters filters,
const QStringList &filterNames)
{
Q_UNUSED(path);
Q_UNUSED(filters);
Q_UNUSED(filterNames);
return {};

View File

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

View File

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

View File

@ -792,9 +792,10 @@ qint64 QFSFileEnginePrivate::writeFdFh(const char *data, qint64 len)
\internal
*/
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

View File

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

View File

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

View File

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

View File

@ -1535,9 +1535,10 @@ QDateTime QResourceFileEngine::fileTime(FileTime time) const
\internal
*/
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)

View File

@ -8,9 +8,10 @@
QT_BEGIN_NAMESPACE
QResourceFileEngineIterator::QResourceFileEngineIterator(QDir::Filters filters,
QResourceFileEngineIterator::QResourceFileEngineIterator(const QString &path, QDir::Filters filters,
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
{
public:
QResourceFileEngineIterator(QDir::Filters filters, const QStringList &filterNames);
QResourceFileEngineIterator(const QString &path, QDir::Filters filters,
const QStringList &filterNames);
~QResourceFileEngineIterator();
QString next() override;

View File

@ -49,7 +49,7 @@ public:
QDateTime fileTime(FileTime time) const override;
IteratorUniquePtr beginEntryList(QDir::Filters filters,
IteratorUniquePtr beginEntryList(const QString &path, QDir::Filters filters,
const QStringList &filterNames) 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
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;
@ -265,9 +266,9 @@ QAbstractFileEngine* AndroidContentFileEngineHandler::create(const QString &file
return new AndroidContentFileEngine(fileName);
}
AndroidContentFileEngineIterator::AndroidContentFileEngineIterator(QDir::Filters filters,
const QStringList &filterNames)
: QAbstractFileEngineIterator(filters, filterNames)
AndroidContentFileEngineIterator::AndroidContentFileEngineIterator(
const QString &path, QDir::Filters filters, const QStringList &filterNames)
: QAbstractFileEngineIterator(path, filters, filterNames)
{
}

View File

@ -30,7 +30,7 @@ public:
QDateTime fileTime(FileTime time) const override;
FileFlags fileFlags(FileFlags type = FileInfoAll) 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;
private:
@ -52,7 +52,8 @@ public:
class AndroidContentFileEngineIterator : public QAbstractFileEngineIterator
{
public:
AndroidContentFileEngineIterator(QDir::Filters filters, const QStringList &filterNames);
AndroidContentFileEngineIterator(const QString &path, QDir::Filters filters,
const QStringList &filterNames);
~AndroidContentFileEngineIterator();
QString next() override;
bool hasNext() const override;

View File

@ -171,7 +171,7 @@ public:
AndroidAbstractFileEngineIterator(QDir::Filters filters,
const QStringList &nameFilters,
const QString &path)
: QAbstractFileEngineIterator(filters, nameFilters)
: QAbstractFileEngineIterator(path, filters, nameFilters)
{
m_currentIterator = FolderIterator::fromCache(cleanedAssetPath(path), true);
}
@ -368,8 +368,9 @@ public:
}
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)
return std::make_unique<AndroidAbstractFileEngineIterator>(filters, filterNames, m_fileName);
return nullptr;

View File

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

View File

@ -258,8 +258,8 @@ public:
QIOSAssetEnumerator *m_enumerator;
QIOSFileEngineIteratorAssetsLibrary(
QDir::Filters filters, const QStringList &nameFilters)
: QAbstractFileEngineIterator(filters, nameFilters)
const QString &path, QDir::Filters filters, const QStringList &nameFilters)
: QAbstractFileEngineIterator(path, filters, nameFilters)
, m_enumerator(new QIOSAssetEnumerator([[[ALAssetsLibrary alloc] init] autorelease], ALAssetsGroupAll))
{
}
@ -441,9 +441,10 @@ void QIOSFileEngineAssetsLibrary::setFileName(const QString &file)
#ifndef QT_NO_FILESYSTEMITERATOR
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

View File

@ -430,8 +430,8 @@ public:
class Iterator : public QAbstractFileEngineIterator
{
public:
Iterator(QDir::Filters filters, const QStringList &filterNames)
: QAbstractFileEngineIterator(filters, filterNames)
Iterator(const QString &path, QDir::Filters filters, const QStringList &filterNames)
: QAbstractFileEngineIterator(path, filters, filterNames)
{
names.append("foo");
names.append("bar");
@ -461,9 +461,9 @@ public:
}
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
{

View File

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

View File

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