AbstractNetworkJob Allow finished() to defer Job deletion

This allows to reuse the Job
This commit is contained in:
Daniel Molkentin 2014-04-14 15:08:43 +02:00
parent 9f4ffd44d6
commit ef9a318cd9
7 changed files with 44 additions and 27 deletions

View file

@ -35,7 +35,7 @@ void ShibbolethUserJob::start()
AbstractNetworkJob::start();
}
void ShibbolethUserJob::finished()
bool ShibbolethUserJob::finished()
{
bool success = false;
QVariantMap json = QtJson::parse(QString::fromUtf8(reply()->readAll()), success).toMap();
@ -43,12 +43,13 @@ void ShibbolethUserJob::finished()
if (!success || json.isEmpty()) {
qDebug() << "cloud/user: invalid JSON!";
emit userFetched(QString());
return;
return true;
}
QString user = json.value("ocs").toMap().value("data").toMap().value("id").toString();
qDebug() << "cloud/user: " << json << "->" << user;
emit userFetched(user);
return true;
}

View file

@ -36,7 +36,7 @@ signals:
void tryAgain();
private slots:
virtual void finished();
virtual bool finished();
};

View file

@ -148,7 +148,7 @@ void AbstractNetworkJob::slotFinished()
_responseTimestamp = QString::fromAscii(_reply->rawHeader("Date"));
_duration = _durationTimer.elapsed();
finished();
bool discard = finished();
AbstractCredentials *creds = _account->credentials();
if (!creds->stillValid(_reply) &&! _ignoreCredentialFailure
&& _account->state() != Account::InvalidCredidential) {
@ -164,7 +164,9 @@ void AbstractNetworkJob::slotFinished()
creds->fetch(_account);
}
}
deleteLater();
if (discard) {
deleteLater();
}
}
quint64 AbstractNetworkJob::duration()
@ -228,7 +230,7 @@ void RequestEtagJob::start()
AbstractNetworkJob::start();
}
void RequestEtagJob::finished()
bool RequestEtagJob::finished()
{
if (reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute) == 207) {
// Parse DAV response
@ -247,6 +249,7 @@ void RequestEtagJob::finished()
}
emit etagRetreived(etag);
}
return true;
}
/*********************************************************************************************/
@ -265,9 +268,10 @@ void MkColJob::start()
AbstractNetworkJob::start();
}
void MkColJob::finished()
bool MkColJob::finished()
{
emit finished(reply()->error());
return true;
}
/*********************************************************************************************/
@ -297,7 +301,7 @@ void LsColJob::start()
AbstractNetworkJob::start();
}
void LsColJob::finished()
bool LsColJob::finished()
{
if (reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute) == 207) {
// Parse DAV response
@ -323,6 +327,7 @@ void LsColJob::finished()
}
emit directoryListing(folders);
}
return true;
}
/*********************************************************************************************/
@ -364,7 +369,7 @@ bool CheckServerJob::installed(const QVariantMap &info)
return info.value(QLatin1String("installed")).toBool();
}
void CheckServerJob::finished()
bool CheckServerJob::finished()
{
account()->setSslConfiguration(reply()->sslConfiguration());
@ -383,7 +388,7 @@ void CheckServerJob::finished()
resetTimeout();
setReply(getRequest(redirectUrl));
setupConnections(reply());
return;
return true;
}
}
@ -402,6 +407,7 @@ void CheckServerJob::finished()
} else {
qDebug() << "No proper answer on " << requestedUrl;
}
return true;
}
/*********************************************************************************************/
@ -451,7 +457,7 @@ QList<QByteArray> PropfindJob::properties() const
return _properties;
}
void PropfindJob::finished()
bool PropfindJob::finished()
{
int http_result_code = reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
@ -486,6 +492,7 @@ void PropfindJob::finished()
qDebug() << "Quota request *not* successful, http result code is" << http_result_code
<< (http_result_code == 302 ? reply()->header(QNetworkRequest::LocationHeader).toString() : QLatin1String(""));
}
return true;
}
/*********************************************************************************************/
@ -502,9 +509,10 @@ void EntityExistsJob::start()
AbstractNetworkJob::start();
}
void EntityExistsJob::finished()
bool EntityExistsJob::finished()
{
emit exists(reply());
return true;
}
/*********************************************************************************************/
@ -535,7 +543,7 @@ void CheckQuotaJob::start()
AbstractNetworkJob::start();
}
void CheckQuotaJob::finished()
bool CheckQuotaJob::finished()
{
if (reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute) == 207) {
// Parse DAV response
@ -560,6 +568,7 @@ void CheckQuotaJob::finished()
qint64 total = quotaUsedBytes + quotaAvailableBytes;
emit quotaRetrieved(total, quotaUsedBytes);
}
return true;
}
NetworkJobTimeoutPauser::NetworkJobTimeoutPauser(QNetworkReply *reply)

View file

@ -87,7 +87,7 @@ protected:
QNetworkReply* headRequest(const QUrl &url);
int maxRedirects() const { return 10; }
virtual void finished() = 0;
virtual bool finished() = 0;
QString _responseTimestamp;
QElapsedTimer _durationTimer;
quint64 _duration;
@ -118,7 +118,7 @@ signals:
void exists(QNetworkReply*);
private slots:
virtual void finished();
virtual bool finished();
};
/**
@ -134,7 +134,7 @@ signals:
void directoryListing(const QStringList &items);
private slots:
virtual void finished();
virtual bool finished();
};
/**
@ -152,7 +152,7 @@ signals:
void result(const QVariantMap &values);
private slots:
virtual void finished();
virtual bool finished();
private:
QList<QByteArray> _properties;
@ -171,7 +171,7 @@ signals:
void finished(QNetworkReply::NetworkError);
private slots:
virtual void finished();
virtual bool finished();
};
/**
@ -189,14 +189,16 @@ public:
signals:
void instanceFound(const QUrl&url, const QVariantMap &info);
void instanceNotFound(QNetworkReply *reply);
void timeout(const QUrl&url);
private slots:
virtual void finished();
virtual bool finished();
virtual void slotTimeout();
private:
bool _followRedirects;
bool _subdirFallback;
int _redirectCount;
};
@ -214,7 +216,7 @@ signals:
void etagRetreived(const QString &etag);
private slots:
virtual void finished();
virtual bool finished();
};
/**
@ -230,7 +232,8 @@ signals:
void quotaRetrieved(qint64 totalBytes, qint64 availableBytes);
private slots:
virtual void finished();
/** Return true if you want the job to be deleted after this slot has finished running. */
virtual bool finished();
};
} // namespace Mirall

View file

@ -446,7 +446,7 @@ void DetermineAuthTypeJob::start()
AbstractNetworkJob::start();
}
void DetermineAuthTypeJob::finished()
bool DetermineAuthTypeJob::finished()
{
QUrl redirection = reply()->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
qDebug() << Q_FUNC_INFO << redirection.toString();
@ -472,6 +472,7 @@ void DetermineAuthTypeJob::finished()
emit authType(WizardCommon::HttpCreds);
}
}
return true;
}
ValidateDavAuthJob::ValidateDavAuthJob(Account *account, QObject *parent)
@ -487,9 +488,10 @@ void ValidateDavAuthJob::start()
AbstractNetworkJob::start();
}
void ValidateDavAuthJob::finished()
bool ValidateDavAuthJob::finished()
{
emit authResult(reply());
return true;
}
} // ns Mirall

View file

@ -39,7 +39,7 @@ public:
signals:
void authResult(QNetworkReply*);
private slots:
void finished();
bool finished();
};
class DetermineAuthTypeJob : public AbstractNetworkJob {
@ -50,7 +50,7 @@ public:
signals:
void authType(WizardCommon::AuthType);
private slots:
void finished();
bool finished();
private:
int _redirects;
};

View file

@ -62,8 +62,9 @@ public:
virtual void start();
virtual void finished() {
virtual bool finished() {
emit finishedSignal();
return true;
}
signals:
@ -110,8 +111,9 @@ public:
_device(device), _headers(headers), _expectedEtagForResume(expectedEtagForResume) {}
virtual void start();
virtual void finished() {
virtual bool finished() {
emit finishedSignal();
return true;
}
QString errorString() {