diff --git a/src/mirall/account.h b/src/mirall/account.h index 85e91b61ab..383be5b314 100644 --- a/src/mirall/account.h +++ b/src/mirall/account.h @@ -154,8 +154,10 @@ public: QNetworkAccessManager* networkAccessManager(); QuotaInfo *quotaInfo(); + signals: void stateChanged(int state); + void propagatorNetworkActivity(); protected Q_SLOTS: void slotHandleErrors(QNetworkReply*,QList); diff --git a/src/mirall/networkjobs.cpp b/src/mirall/networkjobs.cpp index 0f28a92ce8..995afb96db 100644 --- a/src/mirall/networkjobs.cpp +++ b/src/mirall/networkjobs.cpp @@ -50,6 +50,15 @@ AbstractNetworkJob::AbstractNetworkJob(Account *account, const QString &path, QO _timer.setSingleShot(true); _timer.setInterval(10*1000); // default to 10 seconds. connect(&_timer, SIGNAL(timeout()), this, SLOT(slotTimeout())); + + connect(this, SIGNAL(networkActivity()), SLOT(resetTimeout())); + + // Network activity on the propagator jobs (GET/PUT) keeps all requests alive. + // This is a workaround for OC instances which only support one + // parallel up and download + if (_account) { + connect(_account, SIGNAL(propagatorNetworkActivity()), SLOT(resetTimeout())); + } } void AbstractNetworkJob::setReply(QNetworkReply *reply) @@ -80,11 +89,6 @@ void AbstractNetworkJob::setIgnoreCredentialFailure(bool ignore) _ignoreCredentialFailure = ignore; } -void AbstractNetworkJob::setAccount(Account *account) -{ - _account = account; -} - void AbstractNetworkJob::setPath(const QString &path) { _path = path; @@ -93,6 +97,8 @@ void AbstractNetworkJob::setPath(const QString &path) void AbstractNetworkJob::setupConnections(QNetworkReply *reply) { connect(reply, SIGNAL(finished()), SLOT(slotFinished())); + connect(reply, SIGNAL(downloadProgress(qint64,qint64)), SIGNAL(networkActivity())); + connect(reply, SIGNAL(uploadProgress(qint64,qint64)), SIGNAL(networkActivity())); } QNetworkReply* AbstractNetworkJob::addTimer(QNetworkReply *reply) @@ -179,9 +185,11 @@ QString AbstractNetworkJob::responseTimestamp() return _responseTimestamp; } -AbstractNetworkJob::~AbstractNetworkJob() { - if (_reply) +AbstractNetworkJob::~AbstractNetworkJob() +{ + if (_reply) { _reply->deleteLater(); + } } void AbstractNetworkJob::start() diff --git a/src/mirall/networkjobs.h b/src/mirall/networkjobs.h index fc1687d37d..58cc4966c4 100644 --- a/src/mirall/networkjobs.h +++ b/src/mirall/networkjobs.h @@ -55,15 +55,14 @@ public: virtual void start(); - void setAccount(Account *account); Account* account() const { return _account; } + void setPath(const QString &path); QString path() const { return _path; } void setReply(QNetworkReply *reply); QNetworkReply* reply() const { return _reply; } - void setIgnoreCredentialFailure(bool ignore); bool ignoreCredentialFailure() const { return _ignoreCredentialFailure; } @@ -75,6 +74,7 @@ public slots: void resetTimeout(); signals: void networkError(QNetworkReply *reply); + void networkActivity(); protected: void setupConnections(QNetworkReply *reply); QNetworkReply* davRequest(const QByteArray& verb, const QString &relPath, diff --git a/src/mirall/propagator_qnam.cpp b/src/mirall/propagator_qnam.cpp index e604f313d9..f1b6974e5f 100644 --- a/src/mirall/propagator_qnam.cpp +++ b/src/mirall/propagator_qnam.cpp @@ -94,7 +94,7 @@ void PUTFileJob::start() { } connect(reply(), SIGNAL(uploadProgress(qint64,qint64)), this, SIGNAL(uploadProgress(qint64,qint64))); - connect(reply(), SIGNAL(uploadProgress(qint64,qint64)), this, SLOT(resetTimeout())); + connect(this, SIGNAL(networkActivity()), account(), SIGNAL(propagatorNetworkActivity())); AbstractNetworkJob::start(); } @@ -469,6 +469,7 @@ void GETFileJob::start() { connect(reply(), SIGNAL(metaDataChanged()), this, SLOT(slotMetaDataChanged())); connect(reply(), SIGNAL(readyRead()), this, SLOT(slotReadyRead())); connect(reply(), SIGNAL(downloadProgress(qint64,qint64)), this, SIGNAL(downloadProgress(qint64,qint64))); + connect(this, SIGNAL(networkActivity()), account(), SIGNAL(propagatorNetworkActivity())); AbstractNetworkJob::start(); } @@ -556,7 +557,6 @@ void GETFileJob::slotReadyRead() return; } } - resetTimeout(); } void GETFileJob::slotTimeout()