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:
-rw-r--r--changelog/unreleased/98325
-rw-r--r--src/libsync/abstractnetworkjob.cpp11
-rw-r--r--src/libsync/abstractnetworkjob.h5
-rw-r--r--src/libsync/networkjobs.cpp12
-rw-r--r--src/libsync/propagatedownload.cpp6
-rw-r--r--src/libsync/propagateupload.cpp7
6 files changed, 37 insertions, 9 deletions
diff --git a/changelog/unreleased/9832 b/changelog/unreleased/9832
new file mode 100644
index 000000000..b5e6ee012
--- /dev/null
+++ b/changelog/unreleased/9832
@@ -0,0 +1,5 @@
+Enhancement: Run vfs downloads with a high priority
+
+This should reduce the occurance of timeouts when downloading vfs files in the Windows explorer.
+
+https://github.com/owncloud/client/issues/9832
diff --git a/src/libsync/abstractnetworkjob.cpp b/src/libsync/abstractnetworkjob.cpp
index 514a42227..766f86b81 100644
--- a/src/libsync/abstractnetworkjob.cpp
+++ b/src/libsync/abstractnetworkjob.cpp
@@ -170,6 +170,7 @@ void AbstractNetworkJob::sendRequest(const QByteArray &verb, const QUrl &url,
_verb = verb;
_request = req;
_request.setUrl(url);
+ _request.setPriority(_priority);
_requestBody = requestBody;
if (!isAuthenticationJob() && _account->jobQueue()->enqueue(this)) {
return;
@@ -442,6 +443,16 @@ void AbstractNetworkJob::abort()
}
}
+void AbstractNetworkJob::setPriority(QNetworkRequest::Priority priority)
+{
+ _priority = priority;
+}
+
+QNetworkRequest::Priority AbstractNetworkJob::priority() const
+{
+ return _priority;
+}
+
} // namespace OCC
QDebug operator<<(QDebug debug, const OCC::AbstractNetworkJob *job)
diff --git a/src/libsync/abstractnetworkjob.h b/src/libsync/abstractnetworkjob.h
index af5f2b28d..51c26274b 100644
--- a/src/libsync/abstractnetworkjob.h
+++ b/src/libsync/abstractnetworkjob.h
@@ -71,6 +71,9 @@ public:
qint64 timeoutMsec() const { return _timer.interval(); }
bool timedOut() const { return _timedout; }
+ void setPriority(QNetworkRequest::Priority priority);
+ QNetworkRequest::Priority priority() const;
+
/** Returns an error message, if any. */
QString errorString() const;
@@ -196,6 +199,8 @@ private:
bool _isAuthenticationJob = false;
int _retryCount = 0;
+ QNetworkRequest::Priority _priority = QNetworkRequest::NormalPriority;
+
friend QDebug(::operator<<)(QDebug debug, const AbstractNetworkJob *job);
};
diff --git a/src/libsync/networkjobs.cpp b/src/libsync/networkjobs.cpp
index 41de2d467..8e7590137 100644
--- a/src/libsync/networkjobs.cpp
+++ b/src/libsync/networkjobs.cpp
@@ -314,12 +314,20 @@ LsColJob::LsColJob(AccountPtr account, const QString &path, QObject *parent)
: AbstractNetworkJob(account, QString(), parent)
, _url(makeDavUrl(path))
{
+ // Always have a higher priority than the propagator because we use this from the UI
+ // and really want this to be done first (no matter what internal scheduling QNAM uses).
+ // Also possibly useful for avoiding false timeouts.
+ setPriority(QNetworkRequest::HighPriority);
}
LsColJob::LsColJob(AccountPtr account, const QUrl &url, QObject *parent)
: AbstractNetworkJob(account, QString(), parent)
, _url(url)
{
+ // Always have a higher priority than the propagator because we use this from the UI
+ // and really want this to be done first (no matter what internal scheduling QNAM uses).
+ // Also possibly useful for avoiding false timeouts.
+ setPriority(QNetworkRequest::HighPriority);
}
void LsColJob::setProperties(const QList<QByteArray> &properties)
@@ -582,10 +590,6 @@ void PropfindJob::start()
Q_EMIT result(values);
});
QNetworkRequest req;
- // Always have a higher priority than the propagator because we use this from the UI
- // and really want this to be done first (no matter what internal scheduling QNAM uses).
- // Also possibly useful for avoiding false timeouts.
- req.setPriority(QNetworkRequest::HighPriority);
req.setRawHeader(QByteArrayLiteral("Depth"), QByteArrayLiteral("0"));
startImpl(req);
}
diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp
index 3ba988776..b23cacd2d 100644
--- a/src/libsync/propagatedownload.cpp
+++ b/src/libsync/propagatedownload.cpp
@@ -79,6 +79,8 @@ GETFileJob::GETFileJob(AccountPtr account, const QString &path, QIODevice *devic
, _resumeStart(resumeStart)
, _hasEmittedFinishedSignal(false)
{
+ // Long downloads must not block non-propagation jobs.
+ setPriority(QNetworkRequest::LowPriority);
}
GETFileJob::GETFileJob(AccountPtr account, const QUrl &url, QIODevice *device,
@@ -94,6 +96,8 @@ GETFileJob::GETFileJob(AccountPtr account, const QUrl &url, QIODevice *device,
, _directDownloadUrl(url)
, _hasEmittedFinishedSignal(false)
{
+ // Long downloads must not block non-propagation jobs.
+ setPriority(QNetworkRequest::LowPriority);
}
void GETFileJob::start()
@@ -109,8 +113,6 @@ void GETFileJob::start()
req.setRawHeader(it.key(), it.value());
}
- req.setPriority(QNetworkRequest::LowPriority); // Long downloads must not block non-propagation jobs.
-
if (_directDownloadUrl.isEmpty()) {
sendRequest("GET", makeDavUrl(path()), req);
} else {
diff --git a/src/libsync/propagateupload.cpp b/src/libsync/propagateupload.cpp
index e0b657fb8..e56e035b4 100644
--- a/src/libsync/propagateupload.cpp
+++ b/src/libsync/propagateupload.cpp
@@ -64,6 +64,8 @@ static bool fileIsStillChanging(const SyncFileItem &item)
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)
{
+ // Long uploads must not block non-propagation jobs.
+ setPriority(QNetworkRequest::LowPriority);
}
PUTFileJob::PUTFileJob(AccountPtr account, const QUrl &url, std::unique_ptr<QIODevice> device, const QMap<QByteArray, QByteArray> &headers, int chunk, QObject *parent)
@@ -74,6 +76,8 @@ PUTFileJob::PUTFileJob(AccountPtr account, const QUrl &url, std::unique_ptr<QIOD
, _chunk(chunk)
{
_device->setParent(this);
+ // Long uploads must not block non-propagation jobs.
+ setPriority(QNetworkRequest::LowPriority);
}
PUTFileJob::~PUTFileJob()
@@ -88,9 +92,6 @@ void PUTFileJob::start()
for (auto it = _headers.cbegin(); it != _headers.cend(); ++it) {
req.setRawHeader(it.key(), it.value());
}
-
- req.setPriority(QNetworkRequest::LowPriority); // Long uploads must not block non-propagation jobs.
-
sendRequest("PUT", _url, req, _device);
connect(this, &AbstractNetworkJob::networkActivity, account().data(), &Account::propagatorNetworkActivity);