mirror of
https://github.com/nextcloud/desktop.git
synced 2024-10-25 05:45:42 +03:00
ConValidator: Simplify and cleanup.
* This way using it with multiple accounts will be easier. * Timeouts on the authed requests are handled.
This commit is contained in:
parent
d8c59fcb73
commit
1a3041690f
4 changed files with 40 additions and 59 deletions
|
@ -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 )
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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<QByteArray>() << "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
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue