[Qt] Connect to finished() and error() signals from QNetworkReply

Qt macOS network manage implementation differs from linux in a sense
that some requests do not generate a finished() signal, but a error()
instead - that is not caught up by the network access manager. This
made QMapboxGL.styleURL utest hang for macOS.
This commit is contained in:
Bruno de Oliveira Abinader
2016-09-28 18:17:43 +03:00
committed by Thiago Marcos P. Santos
parent 4ef66f36d4
commit 55c4bb98d7
2 changed files with 6 additions and 5 deletions

View File

@@ -34,8 +34,6 @@ HTTPFileSource::Impl::Impl() : m_manager(new QNetworkAccessManager(this))
if (m_ssl.caCertificates().isEmpty()) {
mbgl::Log::Warning(mbgl::Event::HttpRequest, "Could not load list of certificate authorities");
}
connect(m_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinish(QNetworkReply*)));
}
void HTTPFileSource::Impl::request(HTTPRequest* req)
@@ -54,6 +52,8 @@ void HTTPFileSource::Impl::request(HTTPRequest* req)
networkRequest.setSslConfiguration(m_ssl);
data.first = m_manager->get(networkRequest);
connect(data.first, SIGNAL(finished()), this, SLOT(onReplyFinished()));
connect(data.first, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onReplyFinished()));
}
void HTTPFileSource::Impl::cancel(HTTPRequest* req)
@@ -90,9 +90,10 @@ void HTTPFileSource::Impl::cancel(HTTPRequest* req)
}
}
void HTTPFileSource::Impl::replyFinish(QNetworkReply* reply)
void HTTPFileSource::Impl::onReplyFinished()
{
const QUrl& url = reply->request().url();
QNetworkReply* reply = qobject_cast<QNetworkReply *>(sender());
const QUrl& url = reply->url();
auto it = m_pending.find(url);
if (it == m_pending.end()) {

View File

@@ -28,7 +28,7 @@ public:
void cancel(HTTPRequest *);
public slots:
void replyFinish(QNetworkReply *);
void onReplyFinished();
private:
QMap<QUrl, QPair<QNetworkReply *, QVector<HTTPRequest *>>> m_pending;