diff options
author | Ahmad Samir <[email protected]> | 2024-02-28 23:52:38 +0200 |
---|---|---|
committer | Ahmad Samir <[email protected]> | 2024-03-17 17:49:33 +0200 |
commit | 886eb76aeae5ba2cff6c4f0456ee14e63b19a9f7 (patch) | |
tree | 00baab76e18a316b5a82957e26560605265440be /src | |
parent | e146d835a69d57748bf2978cf5134ac5d86d81cf (diff) |
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 <[email protected]>
Diffstat (limited to 'src')
17 files changed, 55 insertions, 56 deletions
diff --git a/src/corelib/doc/snippets/code/src_corelib_io_qabstractfileengine.cpp b/src/corelib/doc/snippets/code/src_corelib_io_qabstractfileengine.cpp index f1315a78f0e..394db15f9f4 100644 --- a/src/corelib/doc/snippets/code/src_corelib_io_qabstractfileengine.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_io_qabstractfileengine.cpp @@ -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(). diff --git a/src/corelib/io/qabstractfileengine.cpp b/src/corelib/io/qabstractfileengine.cpp index 55655adfc41..2ad732cf3bd 100644 --- a/src/corelib/io/qabstractfileengine.cpp +++ b/src/corelib/io/qabstractfileengine.cpp @@ -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() */ @@ -933,17 +932,6 @@ QString QAbstractFileEngineIterator::path() const } /*! - \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. \sa QDir::nameFilters(), filters(), path() @@ -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 {}; diff --git a/src/corelib/io/qabstractfileengine_p.h b/src/corelib/io/qabstractfileengine_p.h index eef83fc46de..8d6a1b8a357 100644 --- a/src/corelib/io/qabstractfileengine_p.h +++ b/src/corelib/io/qabstractfileengine_p.h @@ -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; diff --git a/src/corelib/io/qdirlisting.cpp b/src/corelib/io/qdirlisting.cpp index 8200366a5aa..b673fa77e18 100644 --- a/src/corelib/io/qdirlisting.cpp +++ b/src/corelib/io/qdirlisting.cpp @@ -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. diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp index df8dd494eec..ee96e801f26 100644 --- a/src/corelib/io/qfsfileengine.cpp +++ b/src/corelib/io/qfsfileengine.cpp @@ -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 diff --git a/src/corelib/io/qfsfileengine_iterator.cpp b/src/corelib/io/qfsfileengine_iterator.cpp index c65b6e5d3e1..f9d802b17f3 100644 --- a/src/corelib/io/qfsfileengine_iterator.cpp +++ b/src/corelib/io/qfsfileengine_iterator.cpp @@ -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) { } diff --git a/src/corelib/io/qfsfileengine_iterator_p.h b/src/corelib/io/qfsfileengine_iterator_p.h index 7980605fbd5..4ad1bb03507 100644 --- a/src/corelib/io/qfsfileengine_iterator_p.h +++ b/src/corelib/io/qfsfileengine_iterator_p.h @@ -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; diff --git a/src/corelib/io/qfsfileengine_p.h b/src/corelib/io/qfsfileengine_p.h index a2dc6993055..3cc3b43a0bc 100644 --- a/src/corelib/io/qfsfileengine_p.h +++ b/src/corelib/io/qfsfileengine_p.h @@ -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 diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp index d61846084a5..dfc925b4169 100644 --- a/src/corelib/io/qresource.cpp +++ b/src/corelib/io/qresource.cpp @@ -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) diff --git a/src/corelib/io/qresource_iterator.cpp b/src/corelib/io/qresource_iterator.cpp index 58bdefdd207..c0f01069117 100644 --- a/src/corelib/io/qresource_iterator.cpp +++ b/src/corelib/io/qresource_iterator.cpp @@ -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) { } diff --git a/src/corelib/io/qresource_iterator_p.h b/src/corelib/io/qresource_iterator_p.h index 7bc546e44a1..8a29ef02190 100644 --- a/src/corelib/io/qresource_iterator_p.h +++ b/src/corelib/io/qresource_iterator_p.h @@ -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; diff --git a/src/corelib/io/qresource_p.h b/src/corelib/io/qresource_p.h index 01ff3c8c5f8..4df37b4c0ed 100644 --- a/src/corelib/io/qresource_p.h +++ b/src/corelib/io/qresource_p.h @@ -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; diff --git a/src/plugins/platforms/android/androidcontentfileengine.cpp b/src/plugins/platforms/android/androidcontentfileengine.cpp index 316daef1dad..67221080b20 100644 --- a/src/plugins/platforms/android/androidcontentfileengine.cpp +++ b/src/plugins/platforms/android/androidcontentfileengine.cpp @@ -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) { } diff --git a/src/plugins/platforms/android/androidcontentfileengine.h b/src/plugins/platforms/android/androidcontentfileengine.h index adaff7f6655..dd7985db80f 100644 --- a/src/plugins/platforms/android/androidcontentfileengine.h +++ b/src/plugins/platforms/android/androidcontentfileengine.h @@ -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; diff --git a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp index 6d5479a5599..20ce0b57101 100644 --- a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp +++ b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp @@ -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; diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h index 3d27dc48ed5..0ad54a9e114 100644 --- a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h @@ -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 diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm index a3593669cf8..87cc6d5bea2 100644 --- a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm @@ -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 |