aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlan Alpert <aalpert@rim.com>2013-02-28 09:13:23 -0800
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-03-04 19:47:38 +0100
commite65a7e2f9955bb873c569fcb7e40dd645d9846c2 (patch)
tree97c7166713efbab0dd9eb190c49ae487e80ce1e1 /src
parent5be0938e28b656fecd5b2cb6a56de1716ae79c70 (diff)
Work with synchronous replies from a custom QNetworkAccessManager
Forward port of e5783b79887299d094 from QtQuick 1. Task-number: QTBUG-27723 Change-Id: I4332dd72bb9d65167307c1ac5ce24e93b14cff5f Reviewed-by: Peter Hartmann <phartmann@rim.com>
Diffstat (limited to 'src')
-rw-r--r--src/qml/qml/qqmltypeloader.cpp27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp
index 5910f60667..9547204760 100644
--- a/src/qml/qml/qqmltypeloader.cpp
+++ b/src/qml/qml/qqmltypeloader.cpp
@@ -124,6 +124,7 @@ public:
public slots:
void finished();
void downloadProgress(qint64, qint64);
+ void manualFinished(QNetworkReply*);
private:
QQmlDataLoader *l;
@@ -183,6 +184,14 @@ void QQmlDataLoaderNetworkReplyProxy::downloadProgress(qint64 bytesReceived, qin
l->networkReplyProgress(reply, bytesReceived, bytesTotal);
}
+// This function is for when you want to shortcut the signals and call directly
+void QQmlDataLoaderNetworkReplyProxy::manualFinished(QNetworkReply *reply)
+{
+ qint64 replySize = reply->size();
+ l->networkReplyProgress(reply, replySize, replySize);
+ l->networkReplyFinished(reply);
+}
+
/*!
\class QQmlDataBlob
@@ -1008,17 +1017,23 @@ void QQmlDataLoader::loadThread(QQmlDataBlob *blob)
} else {
QNetworkReply *reply = m_thread->networkAccessManager()->get(QNetworkRequest(blob->m_url));
- QObject *nrp = m_thread->networkReplyProxy();
- QObject::connect(reply, SIGNAL(downloadProgress(qint64,qint64)),
- nrp, SLOT(downloadProgress(qint64,qint64)));
- QObject::connect(reply, SIGNAL(finished()),
- nrp, SLOT(finished()));
+ QQmlDataLoaderNetworkReplyProxy *nrp = m_thread->networkReplyProxy();
+ blob->addref();
m_networkReplies.insert(reply, blob);
+
+ if (reply->isFinished()) {
+ nrp->manualFinished(reply);
+ } else {
+ QObject::connect(reply, SIGNAL(downloadProgress(qint64,qint64)),
+ nrp, SLOT(downloadProgress(qint64,qint64)));
+ QObject::connect(reply, SIGNAL(finished()),
+ nrp, SLOT(finished()));
+ }
+
#ifdef DATABLOB_DEBUG
qWarning("QQmlDataBlob: requested %s", qPrintable(blob->url().toString()));
#endif
- blob->addref();
}
}