From 55c4bb98d72071fec5d98900865f24fe75922975 Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Wed, 28 Sep 2016 18:17:43 +0300 Subject: [PATCH] [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. --- platform/qt/src/http_file_source.cpp | 9 +++++---- platform/qt/src/http_file_source.hpp | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/platform/qt/src/http_file_source.cpp b/platform/qt/src/http_file_source.cpp index 87948609d..61fa1ca61 100644 --- a/platform/qt/src/http_file_source.cpp +++ b/platform/qt/src/http_file_source.cpp @@ -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(sender()); + const QUrl& url = reply->url(); auto it = m_pending.find(url); if (it == m_pending.end()) { diff --git a/platform/qt/src/http_file_source.hpp b/platform/qt/src/http_file_source.hpp index 777228d19..077670706 100644 --- a/platform/qt/src/http_file_source.hpp +++ b/platform/qt/src/http_file_source.hpp @@ -28,7 +28,7 @@ public: void cancel(HTTPRequest *); public slots: - void replyFinish(QNetworkReply *); + void onReplyFinished(); private: QMap>> m_pending;