Browse Source

Merge pull request #312 from nextcloud/upstream/pr/6374

Move ClientProxy and and ConnectionValidator out of libsync
Roeland Jago Douma 7 years ago
parent
commit
335298f4e2

+ 24 - 25
src/cmd/cmd.cpp

@@ -23,17 +23,16 @@
 #include <QFileInfo>
 #include <QJsonDocument>
 #include <QJsonObject>
+#include <QNetworkProxy>
 #include <qdebug.h>
 
 #include "account.h"
-#include "clientproxy.h"
 #include "configfile.h" // ONLY ACCESS THE STATIC FUNCTIONS!
 #include "creds/httpcredentials.h"
 #include "simplesslerrorhandler.h"
 #include "syncengine.h"
 #include "common/syncjournaldb.h"
 #include "config.h"
-#include "connectionvalidator.h"
 
 #include "cmd.h"
 
@@ -83,8 +82,6 @@ struct CmdOptions
 // So we have to use a global variable
 CmdOptions *opts = 0;
 
-const qint64 timeoutToUseMsec = qMax(1000, ConnectionValidator::DefaultCallingIntervalMsec - 5 * 1000);
-
 class EchoDisabler
 {
 public:
@@ -327,7 +324,6 @@ int main(int argc, char **argv)
     options.restartTimes = 3;
     options.uplimit = 0;
     options.downlimit = 0;
-    ClientProxy clientProxy;
 
     parseOptions(app.arguments(), &options);
 
@@ -439,8 +435,6 @@ int main(int argc, char **argv)
         } else {
             qFatal("Could not read httpproxy. The proxy should have the format \"http://hostname:port\".");
         }
-    } else {
-        clientProxy.setupQtProxyFromConfig();
     }
 
     SimpleSslErrorHandler *sslErrorHandler = new SimpleSslErrorHandler;
@@ -454,24 +448,29 @@ int main(int argc, char **argv)
     account->setCredentials(cred);
     account->setSslErrorHandler(sslErrorHandler);
 
-    //obtain capabilities using event loop
-    QEventLoop loop;
-
-    JsonApiJob *job = new JsonApiJob(account, QLatin1String("ocs/v1.php/cloud/capabilities"));
-    job->setTimeout(timeoutToUseMsec);
-    QObject::connect(job, &JsonApiJob::jsonReceived, [&](const QJsonDocument &json) {
-        auto caps = json.object().value("ocs").toObject().value("data").toObject().value("capabilities").toObject();
-        qDebug() << "Server capabilities" << caps;
-        account->setCapabilities(caps.toVariantMap());
-        loop.quit();
-    });
-    job->start();
-
-    loop.exec();
-
-    if (job->reply()->error() != QNetworkReply::NoError){
-        std::cout<<"Error connecting to server\n";
-        return EXIT_FAILURE;
+    // Perform a call to get the capabilities.
+    if (!options.nonShib) {
+        // Do not do it if '--nonshib' was passed. This mean we should only connect to the 'nonshib'
+        // dav endpoint. Since we do not get the capabilities, in that case, this has the additional
+        // side effect that chunking-ng will be disabled. (because otherwise it would use the new
+        // 'dav' endpoint instead of the nonshib one (which still use the old chunking)
+
+        QEventLoop loop;
+        JsonApiJob *job = new JsonApiJob(account, QLatin1String("ocs/v1.php/cloud/capabilities"));
+        QObject::connect(job, &JsonApiJob::jsonReceived, [&](const QJsonDocument &json) {
+            auto caps = json.object().value("ocs").toObject().value("data").toObject().value("capabilities").toObject();
+            qDebug() << "Server capabilities" << caps;
+            account->setCapabilities(caps.toVariantMap());
+            loop.quit();
+        });
+        job->start();
+
+        loop.exec();
+
+        if (job->reply()->error() != QNetworkReply::NoError){
+            std::cout<<"Error connecting to server\n";
+            return EXIT_FAILURE;
+        }
     }
 
     // much lower age than the default since this utility is usually made to be run right after a change in the tests

+ 2 - 0
src/gui/CMakeLists.txt

@@ -48,6 +48,8 @@ set(client_SRCS
     accountmanager.cpp
     accountsettings.cpp
     application.cpp
+    clientproxy.cpp
+    connectionvalidator.cpp
     folder.cpp
     folderman.cpp
     folderstatusmodel.cpp

+ 3 - 8
src/gui/accountstate.cpp

@@ -77,11 +77,6 @@ QStringList AccountState::connectionErrors() const
     return _connectionErrors;
 }
 
-QString AccountState::connectionStatusString(ConnectionStatus status)
-{
-    return ConnectionValidator::statusString(status);
-}
-
 AccountState::State AccountState::state() const
 {
     return _state;
@@ -258,7 +253,7 @@ void AccountState::checkConnectivity()
 void AccountState::slotConnectionValidatorResult(ConnectionValidator::Status status, const QStringList &errors)
 {
     if (isSignedOut()) {
-        qCWarning(lcAccountState) << "Signed out, ignoring" << connectionStatusString(status) << _account->url().toString();
+        qCWarning(lcAccountState) << "Signed out, ignoring" << status << _account->url().toString();
         return;
     }
 
@@ -281,8 +276,8 @@ void AccountState::slotConnectionValidatorResult(ConnectionValidator::Status sta
 
     if (_connectionStatus != status) {
         qCInfo(lcAccountState) << "AccountState connection status change: "
-                               << connectionStatusString(_connectionStatus) << "->"
-                               << connectionStatusString(status);
+                               << _connectionStatus << "->"
+                               << status;
         _connectionStatus = status;
     }
     _connectionErrors = errors;

+ 0 - 1
src/gui/accountstate.h

@@ -94,7 +94,6 @@ public:
 
     ConnectionStatus connectionStatus() const;
     QStringList connectionErrors() const;
-    static QString connectionStatusString(ConnectionStatus status);
 
     State state() const;
     static QString stateString(State state);

+ 0 - 0
src/libsync/clientproxy.cpp → src/gui/clientproxy.cpp


+ 2 - 2
src/libsync/clientproxy.h → src/gui/clientproxy.h

@@ -32,7 +32,7 @@ class ConfigFile;
  * @brief The ClientProxy class
  * @ingroup libsync
  */
-class OWNCLOUDSYNC_EXPORT ClientProxy : public QObject
+class ClientProxy : public QObject
 {
     Q_OBJECT
 public:
@@ -61,7 +61,7 @@ private:
     QUrl _url;
 };
 
-OWNCLOUDSYNC_EXPORT QString printQNetworkProxy(const QNetworkProxy &proxy);
+QString printQNetworkProxy(const QNetworkProxy &proxy);
 }
 
 #endif // CLIENTPROXY_H

+ 0 - 29
src/libsync/connectionvalidator.cpp → src/gui/connectionvalidator.cpp

@@ -41,35 +41,6 @@ ConnectionValidator::ConnectionValidator(AccountPtr account, QObject *parent)
 {
 }
 
-QString ConnectionValidator::statusString(Status stat)
-{
-    switch (stat) {
-    case Undefined:
-        return QLatin1String("Undefined");
-    case Connected:
-        return QLatin1String("Connected");
-    case NotConfigured:
-        return QLatin1String("Not configured");
-    case ServerVersionMismatch:
-        return QLatin1String("Server Version Mismatch");
-    case CredentialsNotReady:
-        return QLatin1String("Credentials not ready");
-    case CredentialsWrong:
-        return QLatin1String("Credentials Wrong");
-    case SslError:
-        return QLatin1String("SSL Error");
-    case StatusNotFound:
-        return QLatin1String("Status not found");
-    case ServiceUnavailable:
-        return QLatin1String("Service unavailable");
-    case MaintenanceMode:
-        return QLatin1String("Maintenance mode");
-    case Timeout:
-        return QLatin1String("Timeout");
-    }
-    return QLatin1String("status undeclared.");
-}
-
 void ConnectionValidator::checkServerAndAuth()
 {
     if (!_account) {

+ 3 - 4
src/libsync/connectionvalidator.h → src/gui/connectionvalidator.h

@@ -79,7 +79,7 @@ namespace OCC {
     \endcode
  */
 
-class OWNCLOUDSYNC_EXPORT ConnectionValidator : public QObject
+class ConnectionValidator : public QObject
 {
     Q_OBJECT
 public:
@@ -98,8 +98,7 @@ public:
         MaintenanceMode, // maintenance enabled in status.php
         Timeout // actually also used for other errors on the authed request
     };
-
-    static QString statusString(Status);
+    Q_ENUM(Status);
 
     // How often should the Application ask this object to check for the connection?
     enum { DefaultCallingIntervalMsec = 32 * 1000 };
@@ -113,7 +112,7 @@ public slots:
     void checkAuthentication();
 
 signals:
-    void connectionResult(ConnectionValidator::Status status, QStringList errors);
+    void connectionResult(ConnectionValidator::Status status, const QStringList &errors);
 
 protected slots:
     void slotCheckServerAndAuth();

+ 0 - 3
src/gui/folder.h

@@ -20,7 +20,6 @@
 #include "syncresult.h"
 #include "progressdispatcher.h"
 #include "common/syncjournaldb.h"
-#include "clientproxy.h"
 #include "networkjobs.h"
 
 #include <csync.h>
@@ -361,8 +360,6 @@ private:
 
     SyncJournalDb _journal;
 
-    ClientProxy _clientProxy;
-
     QScopedPointer<SyncRunFileLog> _fileLog;
 
     QTimer _scheduleSelfTimer;

+ 1 - 0
src/gui/folderman.cpp

@@ -37,6 +37,7 @@
 #include <QtCore>
 #include <QMutableSetIterator>
 #include <QSet>
+#include <QNetworkProxy>
 
 namespace OCC {
 

+ 0 - 2
src/libsync/CMakeLists.txt

@@ -24,8 +24,6 @@ set(libsync_SRCS
     wordlist.cpp
     bandwidthmanager.cpp
     capabilities.cpp
-    clientproxy.cpp
-    connectionvalidator.cpp
     cookiejar.cpp
     discoveryphase.cpp
     filesystem.cpp

+ 2 - 0
test/CMakeLists.txt

@@ -64,6 +64,8 @@ list(APPEND FolderMan_SRC ../src/gui/syncrunfilelog.cpp )
 list(APPEND FolderMan_SRC ../src/gui/lockwatcher.cpp )
 list(APPEND FolderMan_SRC ../src/gui/guiutility.cpp )
 list(APPEND FolderMan_SRC ../src/gui/navigationpanehelper.cpp )
+list(APPEND FolderMan_SRC ../src/gui/connectionvalidator.cpp )
+list(APPEND FolderMan_SRC ../src/gui/clientproxy.cpp )
 list(APPEND FolderMan_SRC ${FolderWatcher_SRC})
 list(APPEND FolderMan_SRC stub.cpp )
 owncloud_add_test(FolderMan "${FolderMan_SRC}")