5#include <private/qqmlengine_p.h>
6#include <private/qqmlextensionplugin_p.h>
7#include <private/qqmltypeloaderthread_p.h>
9#if QT_CONFIG(qml_network)
10#include <private/qqmltypeloadernetworkreplyproxy_p.h>
15QQmlTypeLoaderThread::QQmlTypeLoaderThread(QQmlTypeLoader *loader)
20QQmlTypeLoaderThread::~QQmlTypeLoaderThread()
23#if QT_CONFIG(qml_type_loader_thread)
24 Q_ASSERT(!thread()->isRunning());
32#if QT_CONFIG(qml_network)
33QNetworkAccessManager *QQmlTypeLoaderThread::networkAccessManager()
const
35 Q_ASSERT(isThisThread());
36 if (!m_networkAccessManager) {
37 m_networkAccessManager = m_loader->createNetworkAccessManager(
nullptr);
38 QObject::connect(thread(), &QThread::finished, m_networkAccessManager, &QObject::deleteLater);
39 m_networkReplyProxy =
new QQmlTypeLoaderNetworkReplyProxy(m_loader, threadObject());
40 QObject::connect(thread(), &QThread::finished, m_networkReplyProxy, &QObject::deleteLater);
43 return m_networkAccessManager;
46QQmlTypeLoaderNetworkReplyProxy *QQmlTypeLoaderThread::networkReplyProxy()
const
48 Q_ASSERT(isThisThread());
49 Q_ASSERT(m_networkReplyProxy);
50 return m_networkReplyProxy;
54void QQmlTypeLoaderThread::load(
const QQmlDataBlob::Ptr &b)
56 callMethodInThread(&This::loadThread, b);
59void QQmlTypeLoaderThread::loadAsync(
const QQmlDataBlob::Ptr &b)
61 postMethodToThread(&This::loadThread, b);
64void QQmlTypeLoaderThread::loadWithStaticData(
const QQmlDataBlob::Ptr &b,
const QByteArray &d)
66 callMethodInThread(&This::loadWithStaticDataThread, b, d);
69void QQmlTypeLoaderThread::loadWithStaticDataAsync(
const QQmlDataBlob::Ptr &b,
const QByteArray &d)
71 postMethodToThread(&This::loadWithStaticDataThread, b, d);
74void QQmlTypeLoaderThread::loadWithCachedUnit(
const QQmlDataBlob::Ptr &b,
const QQmlPrivate::CachedQmlUnit *unit)
76 callMethodInThread(&This::loadWithCachedUnitThread, b, unit);
79void QQmlTypeLoaderThread::loadWithCachedUnitAsync(
const QQmlDataBlob::Ptr &b,
const QQmlPrivate::CachedQmlUnit *unit)
81 postMethodToThread(&This::loadWithCachedUnitThread, b, unit);
84void QQmlTypeLoaderThread::callCompleted(
const QQmlDataBlob::Ptr &b)
86 postMethodToMain(&This::callCompletedMain, b);
89void QQmlTypeLoaderThread::callDownloadProgressChanged(
const QQmlDataBlob::Ptr &b, qreal p)
91 postMethodToMain(&This::callDownloadProgressChangedMain, b, p);
94void QQmlTypeLoaderThread::initializeEngine(QQmlExtensionInterface *iface,
97 callMethodInMain(&This::initializeExtensionMain, iface, uri);
100void QQmlTypeLoaderThread::initializeEngine(QQmlEngineExtensionInterface *iface,
103 callMethodInMain(&This::initializeEngineExtensionMain, iface, uri);
106void QQmlTypeLoaderThread::drop(
const QQmlDataBlob::Ptr &b)
108 postMethodToThread(&This::dropThread, b);
111void QQmlTypeLoaderThread::loadThread(
const QQmlDataBlob::Ptr &b)
113 m_loader->loadThread(b);
116void QQmlTypeLoaderThread::loadWithStaticDataThread(
const QQmlDataBlob::Ptr &b,
const QByteArray &d)
118 m_loader->loadWithStaticDataThread(b, d);
121void QQmlTypeLoaderThread::loadWithCachedUnitThread(
const QQmlDataBlob::Ptr &b,
const QQmlPrivate::CachedQmlUnit *unit)
123 m_loader->loadWithCachedUnitThread(b, unit);
126void QQmlTypeLoaderThread::callCompletedMain(
const QQmlDataBlob::Ptr &b)
129 qWarning(
"QQmlTypeLoaderThread: %s completed() callback", qPrintable(b->urlString()));
134void QQmlTypeLoaderThread::callDownloadProgressChangedMain(
const QQmlDataBlob::Ptr &b, qreal p)
137 qWarning(
"QQmlTypeLoaderThread: %s downloadProgressChanged(%f) callback",
138 qPrintable(b->urlString()), p);
140 b->downloadProgressChanged(p);
143void QQmlTypeLoaderThread::initializeExtensionMain(QQmlExtensionInterface *iface,
147 QQmlEngine *engine = m_loader->engine()->qmlEngine();
148 Q_ASSERT(engine && engine->thread() == QThread::currentThread());
149 iface->initializeEngine(engine, uri);
152void QQmlTypeLoaderThread::initializeEngineExtensionMain(QQmlEngineExtensionInterface *iface,
156 QQmlEngine *engine = m_loader->engine()->qmlEngine();
157 Q_ASSERT(engine && engine->thread() == QThread::currentThread());
158 iface->initializeEngine(engine, uri);
161void QQmlTypeLoaderThread::dropThread(
const QQmlDataBlob::Ptr &b)