From: Markus Goetz Date: Mon, 26 Sep 2016 13:45:30 +0000 (+0200) Subject: Wizard: Do the system proxy lookup in a thread (#5160) X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~1081 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=95c479aa07e29cce0b3a948964e5056de355edd4;p=nextcloud-desktop.git Wizard: Do the system proxy lookup in a thread (#5160) This is analogous to the code in ConnectionValidator. --- diff --git a/src/gui/owncloudsetupwizard.cpp b/src/gui/owncloudsetupwizard.cpp index 0f4637845..993bf04f0 100644 --- a/src/gui/owncloudsetupwizard.cpp +++ b/src/gui/owncloudsetupwizard.cpp @@ -30,6 +30,7 @@ #include "networkjobs.h" #include "sslerrordialog.h" #include "accountmanager.h" +#include "clientproxy.h" #include "creds/credentialsfactory.h" #include "creds/abstractcredentials.h" @@ -128,7 +129,38 @@ void OwncloudSetupWizard::slotDetermineAuthType(const QString &urlString) account->setUrl(url); // Reset the proxy which might had been determined previously in ConnectionValidator::checkServerAndAuth() // when there was a previous account. - account->networkAccessManager()->setProxy(QNetworkProxy(QNetworkProxy::DefaultProxy)); + account->networkAccessManager()->setProxy(QNetworkProxy(QNetworkProxy::NoProxy)); + + // Lookup system proxy in a thread https://github.com/owncloud/client/issues/2993 + if (ClientProxy::isUsingSystemDefault()) { + qDebug() << "Trying to look up system proxy"; + ClientProxy::lookupSystemProxyAsync(account->url(), + this, SLOT(slotSystemProxyLookupDone(QNetworkProxy))); + } else { + // We want to reset the QNAM proxy so that the global proxy settings are used (via ClientProxy settings) + account->networkAccessManager()->setProxy(QNetworkProxy(QNetworkProxy::DefaultProxy)); + // use a queued invocation so we're as asynchronous as with the other code path + QMetaObject::invokeMethod(this, "slotContinueDetermineAuth", Qt::QueuedConnection); + } +} + +void OwncloudSetupWizard::slotSystemProxyLookupDone(const QNetworkProxy &proxy) +{ + if (proxy.type() != QNetworkProxy::NoProxy) { + qDebug() << "Setting QNAM proxy to be system proxy" << printQNetworkProxy(proxy); + } else { + qDebug() << "No system proxy set by OS"; + } + AccountPtr account = _ocWizard->account(); + account->networkAccessManager()->setProxy(proxy); + + slotContinueDetermineAuth(); +} + +void OwncloudSetupWizard::slotContinueDetermineAuth() +{ + AccountPtr account = _ocWizard->account(); + // Set fake credentials before we check what credential it actually is. account->setCredentials(CredentialsFactory::create("dummy")); CheckServerJob *job = new CheckServerJob(_ocWizard->account(), this); @@ -136,7 +168,7 @@ void OwncloudSetupWizard::slotDetermineAuthType(const QString &urlString) connect(job, SIGNAL(instanceFound(QUrl,QVariantMap)), SLOT(slotOwnCloudFoundAuth(QUrl,QVariantMap))); connect(job, SIGNAL(instanceNotFound(QNetworkReply*)), SLOT(slotNoOwnCloudFoundAuth(QNetworkReply*))); connect(job, SIGNAL(timeout(const QUrl&)), SLOT(slotNoOwnCloudFoundAuthTimeout(const QUrl&))); - job->setTimeout(10*1000); + job->setTimeout((account->url().scheme() == "https") ? 30*1000 : 10*1000); job->start(); } diff --git a/src/gui/owncloudsetupwizard.h b/src/gui/owncloudsetupwizard.h index 65075ad47..8f172c8db 100644 --- a/src/gui/owncloudsetupwizard.h +++ b/src/gui/owncloudsetupwizard.h @@ -66,6 +66,8 @@ signals: private slots: void slotDetermineAuthType(const QString&); + void slotSystemProxyLookupDone(const QNetworkProxy &proxy); + void slotContinueDetermineAuth(); void slotOwnCloudFoundAuth(const QUrl&, const QVariantMap&); void slotNoOwnCloudFoundAuth(QNetworkReply *reply); void slotNoOwnCloudFoundAuthTimeout(const QUrl&url); diff --git a/src/libsync/clientproxy.cpp b/src/libsync/clientproxy.cpp index 721906645..b2fb18d30 100644 --- a/src/libsync/clientproxy.cpp +++ b/src/libsync/clientproxy.cpp @@ -129,7 +129,6 @@ SystemProxyRunnable::SystemProxyRunnable(const QUrl &url) : QObject(), QRunnable void SystemProxyRunnable::run() { - qDebug() << Q_FUNC_INFO << "Starting system proxy lookup"; qRegisterMetaType("QNetworkProxy"); QList proxies = QNetworkProxyFactory::systemProxyForQuery(QNetworkProxyQuery(_url)); diff --git a/src/libsync/clientproxy.h b/src/libsync/clientproxy.h index c377a04d8..6d7fbfdda 100644 --- a/src/libsync/clientproxy.h +++ b/src/libsync/clientproxy.h @@ -57,7 +57,7 @@ private: QUrl _url; }; -QString printQNetworkProxy(const QNetworkProxy &proxy); +OWNCLOUDSYNC_EXPORT QString printQNetworkProxy(const QNetworkProxy &proxy); }