diff --git a/src/xmlpatterns/acceltree/qacceltreeresourceloader.cpp b/src/xmlpatterns/acceltree/qacceltreeresourceloader.cpp index 7c877c624acd2e87277e1cba1b29df2fdc02a927..85ea41ab37a5f66916f4c2dc9cbef45df5c39546 100644 --- a/src/xmlpatterns/acceltree/qacceltreeresourceloader.cpp +++ b/src/xmlpatterns/acceltree/qacceltreeresourceloader.cpp @@ -110,15 +110,20 @@ QNetworkReply *AccelTreeResourceLoader::load(const QUrl &uri, Q_ASSERT(networkManager); Q_ASSERT(uri.isValid()); - NetworkLoop networkLoop; - + const bool ftpSchemeUsed = (uri.scheme() == QStringLiteral("ftp")); + // QNAM doesn't have support for SynchronousRequestAttribute in its ftp backend. + QEventLoop ftpNetworkLoop; QNetworkRequest request(uri); + if (!ftpSchemeUsed) + request.setAttribute(QNetworkRequest::SynchronousRequestAttribute, true); QNetworkReply *const reply = networkManager->get(request); - networkLoop.connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(error(QNetworkReply::NetworkError))); - networkLoop.connect(reply, SIGNAL(finished()), SLOT(finished())); + if (ftpSchemeUsed) { + ftpNetworkLoop.connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(quit())); + ftpNetworkLoop.connect(reply, SIGNAL(finished()), SLOT(quit())); + ftpNetworkLoop.exec(QEventLoop::ExcludeUserInputEvents); + } - if(networkLoop.exec(QEventLoop::ExcludeUserInputEvents)) - { + if (reply->error() != QNetworkReply::NoError) { const QString errorMessage(escape(reply->errorString())); /* Note, we delete reply before we exit this function with error(). */ @@ -130,8 +135,7 @@ QNetworkReply *AccelTreeResourceLoader::load(const QUrl &uri, context->error(errorMessage, ReportContext::FODC0002, location); return 0; - } - else + } else return reply; } diff --git a/src/xmlpatterns/acceltree/qacceltreeresourceloader_p.h b/src/xmlpatterns/acceltree/qacceltreeresourceloader_p.h index 0adc8c8276c11bfac91b63a87dbdcaa7f58816a6..7ac43896a82a41db7f86abe3308773dbf157fe15 100644 --- a/src/xmlpatterns/acceltree/qacceltreeresourceloader_p.h +++ b/src/xmlpatterns/acceltree/qacceltreeresourceloader_p.h @@ -61,40 +61,6 @@ class QIODevice; namespace QPatternist { - /** - * @short An helper class which enables QNetworkAccessManager - * to be used in a blocking manner. - * - * @see AccelTreeResourceLoader::load() - * @author Frans Englich <frans.englich@nokia.com> - */ - class NetworkLoop : public QEventLoop - { - Q_OBJECT - public: - NetworkLoop() : m_hasReceivedError(false) - { - } - - public Q_SLOTS: - void error(QNetworkReply::NetworkError code) - { - Q_UNUSED(code); - m_hasReceivedError = true; - exit(1); - } - - void finished() - { - if(m_hasReceivedError) - exit(1); - else - exit(0); - } - private: - bool m_hasReceivedError; - }; - /** * @short Handles requests for documents, and instantiates * them as AccelTree instances.