summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/binaryformatengine.cpp
diff options
context:
space:
mode:
authorKatja Marttila <katja.marttila@qt.io>2024-09-25 11:10:44 +0300
committerKatja Marttila <katja.marttila@qt.io>2024-10-04 07:17:51 +0000
commitd24e8c20ea263e4528f11553a4dfbd93433b203e (patch)
tree2adc53d576371156a8ded52a81ffaf2af3f75970 /src/libs/installer/binaryformatengine.cpp
parentc372ed8d058bd2708b6127247d2ebf0350935e6d (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.cpp99
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