From 1a3041690fd5b624562b248f5371ac610cb83fe9 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Thu, 11 Dec 2014 13:55:59 +0100 Subject: [PATCH] ConValidator: Simplify and cleanup. * This way using it with multiple accounts will be easier. * Timeouts on the authed requests are handled. --- src/gui/application.cpp | 20 +++++------ src/gui/application.h | 3 +- src/libsync/connectionvalidator.cpp | 54 ++++++++++++----------------- src/libsync/connectionvalidator.h | 22 ++++-------- 4 files changed, 40 insertions(+), 59 deletions(-) diff --git a/src/gui/application.cpp b/src/gui/application.cpp index 931476819..8c84430e6 100644 --- a/src/gui/application.cpp +++ b/src/gui/application.cpp @@ -237,8 +237,8 @@ void Application::slotCheckConnection() if (_conValidator) _conValidator->deleteLater(); _conValidator = new ConnectionValidator(account); - connect( _conValidator, SIGNAL(connectionResult(ConnectionValidator::Status)), - this, SLOT(slotConnectionValidatorResult(ConnectionValidator::Status)) ); + connect( _conValidator, SIGNAL(connectionResult(ConnectionValidator::Status, QStringList)), + this, SLOT(slotConnectionValidatorResult(ConnectionValidator::Status, QStringList)) ); _conValidator->checkConnection(); } else { @@ -303,21 +303,19 @@ void Application::slotCrash() Utility::crash(); } -void Application::slotConnectionValidatorResult(ConnectionValidator::Status status) +void Application::slotConnectionValidatorResult(ConnectionValidator::Status status, + const QStringList& errors) { - qDebug() << "Connection Validator Result: " << _conValidator->statusString(status); - QStringList startupFails; + qDebug() << "Connection Validator Result: " << ConnectionValidator::statusString(status); - if( status != ConnectionValidator::Connected ) { - startupFails = _conValidator->errors(); - _startupNetworkError = _conValidator->networkError(); + bool isConnected = status == ConnectionValidator::Connected; + if( !isConnected ) { + _startupNetworkError = ConnectionValidator::isNetworkError(status); if (_userTriggeredConnect) { _userTriggeredConnect = false; } } - _gui->setConnectionErrors( (status == ConnectionValidator::Connected), startupFails); - - _conValidator->deleteLater(); + _gui->setConnectionErrors( isConnected, errors ); } void Application::slotownCloudWizardDone( int res ) diff --git a/src/gui/application.h b/src/gui/application.h index 1f68eb806..861c2a53b 100644 --- a/src/gui/application.h +++ b/src/gui/application.h @@ -73,7 +73,8 @@ signals: protected slots: void slotParseOptions( const QString&, QObject* ); void slotCheckConnection(); - void slotConnectionValidatorResult(ConnectionValidator::Status); + void slotConnectionValidatorResult(ConnectionValidator::Status, + const QStringList& errors); void slotStartUpdateDetector(); void slotUseMonoIconsChanged( bool ); void slotLogin(); diff --git a/src/libsync/connectionvalidator.cpp b/src/libsync/connectionvalidator.cpp index cb1fdad18..6530c7ce0 100644 --- a/src/libsync/connectionvalidator.cpp +++ b/src/libsync/connectionvalidator.cpp @@ -24,22 +24,11 @@ namespace OCC { ConnectionValidator::ConnectionValidator(Account *account, QObject *parent) : QObject(parent), - _account(account), - _networkError(QNetworkReply::NoError) + _account(account) { } -QStringList ConnectionValidator::errors() const -{ - return _errors; -} - -bool ConnectionValidator::networkError() const -{ - return _networkError; -} - -QString ConnectionValidator::statusString( Status stat ) const +QString ConnectionValidator::statusString( Status stat ) { QString re; @@ -56,15 +45,6 @@ QString ConnectionValidator::statusString( Status stat ) const case ServerVersionMismatch: re = QLatin1String("Server Version Mismatch"); break; - case CredentialsTooManyAttempts: - re = QLatin1String("Credentials Too Many Attempts"); - break; - case CredentialError: - re = QLatin1String("CredentialError"); - break; - case CredentialsUserCanceled: - re = QLatin1String("Credential User Canceled"); - break; case CredentialsWrong: re = QLatin1String("Credentials Wrong"); break; @@ -77,12 +57,16 @@ QString ConnectionValidator::statusString( Status stat ) const return re; } +bool ConnectionValidator::isNetworkError( Status status ) +{ + return status == StatusNotFound; +} void ConnectionValidator::checkConnection() { if( !_account ) { _errors << tr("No ownCloud account configured"); - emit connectionResult( NotConfigured ); + reportResult( NotConfigured ); return; } @@ -95,7 +79,7 @@ void ConnectionValidator::checkConnection() checkJob->setIgnoreCredentialFailure(true); connect(checkJob, SIGNAL(instanceFound(QUrl,QVariantMap)), SLOT(slotStatusFound(QUrl,QVariantMap))); connect(checkJob, SIGNAL(networkError(QNetworkReply*)), SLOT(slotNoStatusFound(QNetworkReply*))); - connect(checkJob, SIGNAL(timeout(QUrl)), SLOT(slotStatusTimeout(QUrl))); + connect(checkJob, SIGNAL(timeout(QUrl)), SLOT(slotJobTimeout(QUrl))); checkJob->start(); } } @@ -111,7 +95,7 @@ void ConnectionValidator::slotStatusFound(const QUrl&url, const QVariantMap &inf if( CheckServerJob::version(info).startsWith("4.0") ) { _errors.append( tr("The configured server for this client is too old") ); _errors.append( tr("Please update to the latest server and restart the client.") ); - emit connectionResult( ServerVersionMismatch ); + reportResult( ServerVersionMismatch ); return; } @@ -133,18 +117,16 @@ void ConnectionValidator::slotNoStatusFound(QNetworkReply *reply) _errors.append(tr("Unable to connect to %1").arg(_account->url().toString())); _errors.append( reply->errorString() ); - _networkError = (reply->error() != QNetworkReply::NoError); - emit connectionResult( StatusNotFound ); + reportResult( StatusNotFound ); } -void ConnectionValidator::slotStatusTimeout(const QUrl &url) +void ConnectionValidator::slotJobTimeout(const QUrl &url) { _account->setState(Account::Disconnected); _errors.append(tr("Unable to connect to %1").arg(url.toString())); _errors.append(tr("timeout")); - _networkError = true; - emit connectionResult( StatusNotFound ); + reportResult( StatusNotFound ); } @@ -161,6 +143,7 @@ void ConnectionValidator::slotCheckAuthentication() job->setProperties(QList() << "getlastmodified"); connect(job, SIGNAL(result(QVariantMap)), SLOT(slotAuthSuccess())); connect(job, SIGNAL(networkError(QNetworkReply*)), SLOT(slotAuthFailed(QNetworkReply*))); + connect(job, SIGNAL(timeout(QUrl)), SLOT(slotJobTimeout(QUrl))); job->start(); } @@ -182,13 +165,20 @@ void ConnectionValidator::slotAuthFailed(QNetworkReply *reply) _errors << reply->errorString(); } - emit connectionResult( stat ); + reportResult( stat ); } void ConnectionValidator::slotAuthSuccess() { _account->setState(Account::Connected); - emit connectionResult(Connected); + _errors.clear(); + reportResult(Connected); +} + +void ConnectionValidator::reportResult(Status status) +{ + emit connectionResult(status, _errors); + deleteLater(); } } // namespace OCC diff --git a/src/libsync/connectionvalidator.h b/src/libsync/connectionvalidator.h index 373edd8da..3d3da6afb 100644 --- a/src/libsync/connectionvalidator.h +++ b/src/libsync/connectionvalidator.h @@ -35,41 +35,33 @@ public: Connected, NotConfigured, ServerVersionMismatch, - CredentialsTooManyAttempts, - CredentialError, - CredentialsUserCanceled, CredentialsWrong, + // actually also used for timeouts or errors on the authed request StatusNotFound - }; - QStringList errors() const; - bool networkError() const; - void checkConnection(); - QString statusString( Status ) const; + static QString statusString( Status ); + static bool isNetworkError( Status status ); signals: - void connectionResult( ConnectionValidator::Status ); - // void connectionAvailable(); - // void connectionFailed(); - -public slots: + void connectionResult( ConnectionValidator::Status status, QStringList errors ); protected slots: void slotStatusFound(const QUrl&url, const QVariantMap &info); void slotNoStatusFound(QNetworkReply *reply); - void slotStatusTimeout(const QUrl& url); + void slotJobTimeout(const QUrl& url); void slotCheckAuthentication(); void slotAuthFailed(QNetworkReply *reply); void slotAuthSuccess(); private: + void reportResult(Status status); + QStringList _errors; Account *_account; - bool _networkError; }; }