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:
parent
e146d835a6
commit
886eb76aea
@ -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().
|
||||
|
@ -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 {};
|
||||
|
@ -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;
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -437,7 +437,7 @@ public:
|
||||
{ }
|
||||
|
||||
IteratorUniquePtr
|
||||
beginEntryList(QDir::Filters, const QStringList &) override
|
||||
beginEntryList(const QString &, QDir::Filters, const QStringList &) override
|
||||
{ return nullptr; }
|
||||
};
|
||||
|
||||
|
@ -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; }
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user