Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannah von Reth <hannah.vonreth@owncloud.com>2022-02-11 14:39:55 +0300
committerHannah von Reth <vonreth@kde.org>2022-02-11 18:01:29 +0300
commitec4e2069ff65e66e1f2246b3216e768351a0d2b6 (patch)
tree9d3ec666890451eed402c0eb97fef4b586c98adc /src/libsync
parent908d53c47dccc54dbdf6874e3e00f76575f03dcc (diff)
Fix connects on replies
Diffstat (limited to 'src/libsync')
-rw-r--r--src/libsync/networkjobs.cpp32
-rw-r--r--src/libsync/networkjobs.h9
-rw-r--r--src/libsync/propagateupload.cpp27
-rw-r--r--src/libsync/propagateupload.h22
-rw-r--r--src/libsync/propagateuploadtus.cpp10
5 files changed, 65 insertions, 35 deletions
diff --git a/src/libsync/networkjobs.cpp b/src/libsync/networkjobs.cpp
index 45328e0d7..2a16be727 100644
--- a/src/libsync/networkjobs.cpp
+++ b/src/libsync/networkjobs.cpp
@@ -431,14 +431,6 @@ void CheckServerJob::start()
req.setRawHeader(QByteArrayLiteral("OC-Connection-Validator"), QByteArrayLiteral("desktop"));
req.setMaximumRedirectsAllowed(_maxRedirectsAllowed);
sendRequest("GET", Utility::concatUrlPath(_serverUrl, path()), req);
- connect(reply(), &QNetworkReply::metaDataChanged, this, &CheckServerJob::metaDataChangedSlot);
- connect(reply(), &QNetworkReply::encrypted, this, &CheckServerJob::encryptedSlot);
- connect(reply(), &QNetworkReply::redirected, this, [this] {
- const auto code = reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
- if (code == 302 || code == 307) {
- _redirectDistinct = false;
- }
- });
AbstractNetworkJob::start();
}
@@ -486,6 +478,18 @@ void CheckServerJob::encryptedSlot()
mergeSslConfigurationForSslButton(reply()->sslConfiguration(), account());
}
+void CheckServerJob::newReplyHook(QNetworkReply *reply)
+{
+ connect(reply, &QNetworkReply::metaDataChanged, this, &CheckServerJob::metaDataChangedSlot);
+ connect(reply, &QNetworkReply::encrypted, this, &CheckServerJob::encryptedSlot);
+ connect(reply, &QNetworkReply::redirected, this, [reply, this] {
+ const auto code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
+ if (code == 302 || code == 307) {
+ _redirectDistinct = false;
+ }
+ });
+}
+
int CheckServerJob::maxRedirectsAllowed() const
{
return _maxRedirectsAllowed;
@@ -843,6 +847,11 @@ void SimpleNetworkJob::start()
AbstractNetworkJob::start();
}
+void SimpleNetworkJob::addNewReplyHook(std::function<void(QNetworkReply *)> &&hook)
+{
+ _replyHooks.push_back(hook);
+}
+
void SimpleNetworkJob::prepareRequest(const QByteArray &verb, const QUrl &url,
const QNetworkRequest &req, QIODevice *requestBody)
{
@@ -878,6 +887,13 @@ bool SimpleNetworkJob::finished()
return true;
}
+void SimpleNetworkJob::newReplyHook(QNetworkReply *reply)
+{
+ for (const auto &hook : _replyHooks) {
+ hook(reply);
+ }
+}
+
void fetchPrivateLinkUrl(AccountPtr account, const QString &remotePath, QObject *target,
std::function<void(const QString &url)> targetFun)
{
diff --git a/src/libsync/networkjobs.h b/src/libsync/networkjobs.h
index b9346fd40..7dab57309 100644
--- a/src/libsync/networkjobs.h
+++ b/src/libsync/networkjobs.h
@@ -283,6 +283,9 @@ private slots:
virtual void metaDataChangedSlot();
virtual void encryptedSlot();
+protected:
+ void newReplyHook(QNetworkReply *) override;
+
private:
bool _subdirFallback;
@@ -427,16 +430,22 @@ public:
void start() override;
+ void addNewReplyHook(std::function<void(QNetworkReply *)> &&hook);
+
signals:
void finishedSignal(QNetworkReply *reply);
private slots:
bool finished() override;
+protected:
+ void newReplyHook(QNetworkReply *) override;
+
private:
QByteArray _simpleVerb;
QUrl _simpleUrl;
QIODevice *_simpleBody;
QNetworkRequest _simpleRequest;
+ std::vector<std::function<void(QNetworkReply *)>> _replyHooks;
};
/**
diff --git a/src/libsync/propagateupload.cpp b/src/libsync/propagateupload.cpp
index eb147a13c..1793d632a 100644
--- a/src/libsync/propagateupload.cpp
+++ b/src/libsync/propagateupload.cpp
@@ -61,6 +61,21 @@ static bool fileIsStillChanging(const SyncFileItem &item)
&& msSinceMod > -10000;
}
+PUTFileJob::PUTFileJob(AccountPtr account, const QString &path, std::unique_ptr<QIODevice> device, const QMap<QByteArray, QByteArray> &headers, int chunk, QObject *parent)
+ : PUTFileJob(account, Utility::concatUrlPath(account->davUrl(), path), std::move(device), headers, chunk, parent)
+{
+}
+
+PUTFileJob::PUTFileJob(AccountPtr account, const QUrl &url, std::unique_ptr<QIODevice> device, const QMap<QByteArray, QByteArray> &headers, int chunk, QObject *parent)
+ : AbstractNetworkJob(account, QString(), parent)
+ , _device(device.release())
+ , _headers(headers)
+ , _url(url)
+ , _chunk(chunk)
+{
+ _device->setParent(this);
+}
+
PUTFileJob::~PUTFileJob()
{
// Make sure that we destroy the QNetworkReply before our _device of which it keeps an internal pointer.
@@ -76,13 +91,8 @@ void PUTFileJob::start()
req.setPriority(QNetworkRequest::LowPriority); // Long uploads must not block non-propagation jobs.
- if (_url.isValid()) {
- sendRequest("PUT", _url, req, _device);
- } else {
- sendRequest("PUT", makeDavUrl(path()), req, _device);
- }
+ sendRequest("PUT", _url, req, _device);
- connect(reply(), &QNetworkReply::uploadProgress, this, &PUTFileJob::uploadProgress);
connect(this, &AbstractNetworkJob::networkActivity, account().data(), &Account::propagatorNetworkActivity);
_requestTimer.start();
AbstractNetworkJob::start();
@@ -101,6 +111,11 @@ bool PUTFileJob::finished()
return true;
}
+void PUTFileJob::newReplyHook(QNetworkReply *reply)
+{
+ connect(reply, &QNetworkReply::uploadProgress, this, &PUTFileJob::uploadProgress);
+}
+
void PropagateUploadFileCommon::setDeleteExisting(bool enabled)
{
_deleteExisting = enabled;
diff --git a/src/libsync/propagateupload.h b/src/libsync/propagateupload.h
index 720c0d8a5..c1a24f0ce 100644
--- a/src/libsync/propagateupload.h
+++ b/src/libsync/propagateupload.h
@@ -98,24 +98,9 @@ private:
public:
explicit PUTFileJob(AccountPtr account, const QString &path, std::unique_ptr<QIODevice> device,
- const QMap<QByteArray, QByteArray> &headers, int chunk, QObject *parent = nullptr)
- : AbstractNetworkJob(account, path, parent)
- , _device(device.release())
- , _headers(headers)
- , _chunk(chunk)
- {
- _device->setParent(this);
- }
+ const QMap<QByteArray, QByteArray> &headers, int chunk, QObject *parent = nullptr);
explicit PUTFileJob(AccountPtr account, const QUrl &url, std::unique_ptr<QIODevice> device,
- const QMap<QByteArray, QByteArray> &headers, int chunk, QObject *parent = nullptr)
- : AbstractNetworkJob(account, QString(), parent)
- , _device(device.release())
- , _headers(headers)
- , _url(url)
- , _chunk(chunk)
- {
- _device->setParent(this);
- }
+ const QMap<QByteArray, QByteArray> &headers, int chunk, QObject *parent = nullptr);
~PUTFileJob() override;
int _chunk;
@@ -139,6 +124,9 @@ public:
return std::chrono::milliseconds(_requestTimer.elapsed());
}
+protected:
+ void newReplyHook(QNetworkReply *reply) override;
+
signals:
void finishedSignal();
void uploadProgress(qint64, qint64);
diff --git a/src/libsync/propagateuploadtus.cpp b/src/libsync/propagateuploadtus.cpp
index dd27d5d69..93b9f6775 100644
--- a/src/libsync/propagateuploadtus.cpp
+++ b/src/libsync/propagateuploadtus.cpp
@@ -151,13 +151,15 @@ void PropagateUploadFileTUS::startNextChunk()
<< "Chunk:" << chunkSize << chunkSize / (_item->_size + 1) * 100;
_jobs.append(job);
- job->start();
connect(job, &SimpleNetworkJob::finishedSignal, this, &PropagateUploadFileTUS::slotChunkFinished);
connect(job, &SimpleNetworkJob::destroyed, this, &PropagateUploadFileCommon::slotJobDestroyed);
- connect(job->reply(), &QNetworkReply::uploadProgress, device, &UploadDevice::slotJobUploadProgress);
- connect(job->reply(), &QNetworkReply::uploadProgress, this, [this](qint64 bytesSent, qint64) {
- propagator()->reportProgress(*_item, _currentOffset + bytesSent);
+ job->addNewReplyHook([device, this](QNetworkReply *reply) {
+ connect(reply, &QNetworkReply::uploadProgress, device, &UploadDevice::slotJobUploadProgress);
+ connect(reply, &QNetworkReply::uploadProgress, this, [this](qint64 bytesSent, qint64) {
+ propagator()->reportProgress(*_item, _currentOffset + bytesSent);
+ });
});
+ job->start();
}
void PropagateUploadFileTUS::slotChunkFinished()