diff options
| author | Katja Marttila <katja.marttila@qt.io> | 2024-09-25 11:10:44 +0300 |
|---|---|---|
| committer | Katja Marttila <katja.marttila@qt.io> | 2024-10-04 07:17:51 +0000 |
| commit | d24e8c20ea263e4528f11553a4dfbd93433b203e (patch) | |
| tree | 2adc53d576371156a8ded52a81ffaf2af3f75970 /src/libs/installer/binaryformatengine.cpp | |
| parent | c372ed8d058bd2708b6127247d2ebf0350935e6d (diff) | |
Fix building with Qt 6.8
QAbstractFileEngine interface has changed. Fixed so that IFW will build
with Qt6.8, and also with Qt6.6
QJSEngine no longer returns array for QVariantList, thus the changes in
the scriptengine test, see QTBUG-125289
Task-number: QTIFW-3507
Change-Id: Ida28fcfed63698c61066cdae31b9e7c4268774ea
Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
Diffstat (limited to 'src/libs/installer/binaryformatengine.cpp')
| -rw-r--r-- | src/libs/installer/binaryformatengine.cpp | 99 |
1 files changed, 84 insertions, 15 deletions
diff --git a/src/libs/installer/binaryformatengine.cpp b/src/libs/installer/binaryformatengine.cpp index 8001552bc..24d8a3f34 100644 --- a/src/libs/installer/binaryformatengine.cpp +++ b/src/libs/installer/binaryformatengine.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2023 The Qt Company Ltd. +** Copyright (C) 2024 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -35,27 +35,48 @@ namespace { class StringListIterator : public QAbstractFileEngineIterator { public: - StringListIterator( const QStringList &list, QDir::Filters filters, const QStringList &nameFilters) + StringListIterator(const QString &path, const QStringList &list, QDir::Filters filters, const QStringList &nameFilters) +#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0) + : QAbstractFileEngineIterator(path, filters, nameFilters) +#else : QAbstractFileEngineIterator(filters, nameFilters) +#endif + , list(list) + , index(-1) + { + } +#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0) + StringListIterator(const QString &path, const QStringList &list, QDirListing::IteratorFlags filters, const QStringList &nameFilters) + + : QAbstractFileEngineIterator(path, filters, nameFilters) , list(list) , index(-1) { } - bool hasNext() const + bool advance() override + { + if (index < list.size() - 1) { + ++index; + return true; + } + return false; + } +#else + bool hasNext() const override { return index < list.size() - 1; } - QString next() + QString next() override { if(!hasNext()) return QString(); ++index; return currentFilePath(); } - - QString currentFileName() const +#endif + QString currentFileName() const override { return index < 0 ? QString() : list[index]; } @@ -243,11 +264,50 @@ QAbstractFileEngine::FileFlags BinaryFormatEngine::fileFlags(FileFlags type) con /*! \internal */ +#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0) +QAbstractFileEngine::IteratorUniquePtr +BinaryFormatEngine::beginEntryList(const QString &path, QDir::Filters filters, + const QStringList &filterNames) +{ + const QStringList entries = entryList(filters, filterNames); + return std::make_unique<StringListIterator>(path, entries, filters, filterNames); +} + +QAbstractFileEngine::IteratorUniquePtr +BinaryFormatEngine::beginEntryList(const QString &path, QDirListing::IteratorFlags filters, const QStringList &filterNames) +{ + const QStringList entries = entryList(filters, filterNames); + return std::make_unique<StringListIterator>(path, entries, filters, filterNames); +} + +/*! + \internal +*/ +QStringList BinaryFormatEngine::entryList(QDirListing::IteratorFlags filters, const QStringList &filterNames) const +{ + if (!m_resource.isNull()) + return QStringList(); + + QStringList result; + if (!m_collection.name().isEmpty() + && (filters.testFlag(QDirListing::IteratorFlag::Default) || filters.testFlag(QDirListing::IteratorFlag::FilesOnly))) { + foreach (const QSharedPointer<Resource> &resource, m_collection.resources()) + result.append(QString::fromUtf8(resource->name())); + } else if (m_collection.name().isEmpty() + && (filters.testFlag(QDirListing::IteratorFlag::Default) || filters.testFlag(QDirListing::IteratorFlag::DirsOnly))) { + foreach (const ResourceCollection &collection, m_collections) + result.append(QString::fromUtf8(collection.name())); + } + return filterResults(result, filterNames); +} +#else QAbstractFileEngineIterator *BinaryFormatEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames) { const QStringList entries = entryList(filters, filterNames); - return new StringListIterator(entries, filters, filterNames); + return new StringListIterator(QString(), entries, filters, filterNames); } +#endif + /*! \internal @@ -265,6 +325,23 @@ QStringList BinaryFormatEngine::entryList(QDir::Filters filters, const QStringLi foreach (const ResourceCollection &collection, m_collections) result.append(QString::fromUtf8(collection.name())); } + return filterResults(result, filterNames); +} + + +/*! + \internal +*/ +qint64 BinaryFormatEngine::size() const +{ + return m_resource.isNull() ? 0 : m_resource->size(); +} + +/*! + \internal +*/ +QStringList BinaryFormatEngine::filterResults(QStringList result, const QStringList &filterNames) const +{ result.removeAll(QString()); // Remove empty names, will crash while using directory iterator. if (filterNames.isEmpty()) @@ -291,12 +368,4 @@ QStringList BinaryFormatEngine::entryList(QDir::Filters filters, const QStringLi return entries; } -/*! - \internal -*/ -qint64 BinaryFormatEngine::size() const -{ - return m_resource.isNull() ? 0 : m_resource->size(); -} - } // namespace QInstaller |
