]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
Wizard: Do the system proxy lookup in a thread (#5160)
authorMarkus Goetz <markus@woboq.com>
Mon, 26 Sep 2016 13:45:30 +0000 (15:45 +0200)
committerGitHub <noreply@github.com>
Mon, 26 Sep 2016 13:45:30 +0000 (15:45 +0200)
This is analogous to the code in ConnectionValidator.

src/gui/owncloudsetupwizard.cpp
src/gui/owncloudsetupwizard.h
src/libsync/clientproxy.cpp
src/libsync/clientproxy.h

index 0f4637845c2bbcf24aa3ca473df8aad26dceba4e..993bf04f00742c7f933664ee451acf634d4ae246 100644 (file)
@@ -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();
 }
 
index 65075ad4708b32d583f46eedbcc891ff618b2d48..8f172c8db3599a8d84a759d142f029de73cef8f8 100644 (file)
@@ -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);
index 721906645685bb02a308a32ab209af04dcdc4d9c..b2fb18d306e45ea7d339738840f7a29038988e8e 100644 (file)
@@ -129,7 +129,6 @@ SystemProxyRunnable::SystemProxyRunnable(const QUrl &url) : QObject(), QRunnable
 
 void SystemProxyRunnable::run()
 {
-    qDebug() << Q_FUNC_INFO << "Starting system proxy lookup";
     qRegisterMetaType<QNetworkProxy>("QNetworkProxy");
     QList<QNetworkProxy> proxies = QNetworkProxyFactory::systemProxyForQuery(QNetworkProxyQuery(_url));
 
index c377a04d85d1f122c8103473453d06f9bcca0a20..6d7fbfdda25e4f39608a97ff274e722e5652c138 100644 (file)
@@ -57,7 +57,7 @@ private:
     QUrl _url;
 };
 
-QString printQNetworkProxy(const QNetworkProxy &proxy);
+OWNCLOUDSYNC_EXPORT QString printQNetworkProxy(const QNetworkProxy &proxy);
 
 
 }