diff --git a/src/libsync/abstractnetworkjob.cpp b/src/libsync/abstractnetworkjob.cpp index a8a18c5e88..3e9bc7fdf6 100644 --- a/src/libsync/abstractnetworkjob.cpp +++ b/src/libsync/abstractnetworkjob.cpp @@ -125,8 +125,18 @@ QNetworkReply *AbstractNetworkJob::addTimer(QNetworkReply *reply) return reply; } +bool AbstractNetworkJob::retryAble() const +{ + return _retryAble; +} + +void AbstractNetworkJob::setRetryAble(bool retryAble) +{ + _retryAble = retryAble; +} + QNetworkReply *AbstractNetworkJob::sendRequest(const QByteArray &verb, const QUrl &url, - QNetworkRequest req, QIODevice *requestBody) +QNetworkRequest req, QIODevice *requestBody) { auto reply = _account->sendRawRequest(verb, url, req, requestBody); _requestBody = requestBody; @@ -196,7 +206,7 @@ void AbstractNetworkJob::slotFinished() if (_reply->error() != QNetworkReply::NoError) { - if (_account->credentials()->retryIfNeeded(this)) + if (retryAble() && _account->credentials()->retryIfNeeded(this)) return; if (!_ignoreCredentialFailure || _reply->error() != QNetworkReply::AuthenticationRequiredError) { diff --git a/src/libsync/abstractnetworkjob.h b/src/libsync/abstractnetworkjob.h index 560bb21f6c..a5bfc9aa41 100644 --- a/src/libsync/abstractnetworkjob.h +++ b/src/libsync/abstractnetworkjob.h @@ -98,6 +98,10 @@ public: */ static int httpTimeout; + /** whether or noth this job can be retried */ + bool retryAble() const; + void setRetryAble(bool retryAble); + public slots: void setTimeout(qint64 msec); void resetTimeout(); @@ -202,6 +206,8 @@ private: // // Reparented to the currently running QNetworkReply. QPointer _requestBody; + + bool _retryAble = true; }; /** diff --git a/src/libsync/creds/oauth.cpp b/src/libsync/creds/oauth.cpp index 13ce21ae65..aa825ca10d 100644 --- a/src/libsync/creds/oauth.cpp +++ b/src/libsync/creds/oauth.cpp @@ -249,6 +249,7 @@ SimpleNetworkJob *OAuth::postTokenRequest(const QList> & auto job = _account->sendRequest("POST", requestTokenUrl, req, requestBody); job->setTimeout(qMin(30 * 1000ll, job->timeoutMsec())); + job->setRetryAble(false); return job; }