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
path: root/src
diff options
context:
space:
mode:
authorErik Verbruggen <erik@verbruggen.consulting>2021-10-06 18:52:18 +0300
committerHannah von Reth <vonreth@kde.org>2021-10-07 17:29:54 +0300
commit88c4661d7d8beaa39b2d37636d14fd179c721507 (patch)
treee52e95b311c102158a850d0b3e11cfcaf274117d /src
parent35d059e2875732696b0bc6a164cb90f45c56e40a (diff)
Do not try to (repeatedly) fetch profile pictures when not available
The server has a capability to indicate that profile pictures (avatars) are not available. Previously, the client would try to fetch them no matter what, and even retry when the server responded with a 404. Now we take the server capability into account, and do not try to fetch those when not available. Fixes: #8758
Diffstat (limited to 'src')
-rw-r--r--src/gui/connectionvalidator.cpp22
-rw-r--r--src/gui/shareusergroupwidget.cpp10
-rw-r--r--src/libsync/capabilities.cpp10
-rw-r--r--src/libsync/capabilities.h3
4 files changed, 35 insertions, 10 deletions
diff --git a/src/gui/connectionvalidator.cpp b/src/gui/connectionvalidator.cpp
index e9e0754c6..88479cf09 100644
--- a/src/gui/connectionvalidator.cpp
+++ b/src/gui/connectionvalidator.cpp
@@ -286,14 +286,24 @@ void ConnectionValidator::slotUserFetched(const QJsonDocument &json)
if (!displayName.isEmpty()) {
_account->setDavDisplayName(displayName);
}
+
+ auto capabilities = _account->capabilities();
+ // We should have received the capabilities by now. Check that assumption in a debug build. If
+ // it's not the case, the code below will assume that they are not available.
+ Q_ASSERT(capabilities.isValid());
+
#ifndef TOKEN_AUTH_ONLY
- AvatarJob *job = new AvatarJob(_account, _account->davUser(), 128, this);
- job->setTimeout(20 * 1000);
- QObject::connect(job, &AvatarJob::avatarPixmap, this, &ConnectionValidator::slotAvatarImage);
- job->start();
-#else
- reportResult(Connected);
+ if (capabilities.isValid() && capabilities.avatarsAvailable()) {
+ AvatarJob *job = new AvatarJob(_account, _account->davUser(), 128, this);
+ job->setTimeout(20 * 1000);
+ QObject::connect(job, &AvatarJob::avatarPixmap, this, &ConnectionValidator::slotAvatarImage);
+ job->start();
+ // reportResult will be called when the avatar has been received by `slotAvatarImage`
+ } else
#endif
+ {
+ reportResult(Connected);
+ }
}
#ifndef TOKEN_AUTH_ONLY
diff --git a/src/gui/shareusergroupwidget.cpp b/src/gui/shareusergroupwidget.cpp
index eb48376e4..65e30f85d 100644
--- a/src/gui/shareusergroupwidget.cpp
+++ b/src/gui/shareusergroupwidget.cpp
@@ -465,9 +465,13 @@ void ShareUserLine::loadAvatar()
* Currently only regular users can have avatars.
*/
if (_share->getShareWith()->type() == Sharee::User) {
- AvatarJob *job = new AvatarJob(_share->account(), _share->getShareWith()->shareWith(), avatarSize, this);
- connect(job, &AvatarJob::avatarPixmap, this, &ShareUserLine::slotAvatarLoaded);
- job->start();
+ auto account = _share->account();
+ auto capabilities = account->capabilities();
+ if (capabilities.isValid() && capabilities.avatarsAvailable()) {
+ AvatarJob *job = new AvatarJob(account, _share->getShareWith()->shareWith(), avatarSize, this);
+ connect(job, &AvatarJob::avatarPixmap, this, &ShareUserLine::slotAvatarLoaded);
+ job->start();
+ }
}
}
diff --git a/src/libsync/capabilities.cpp b/src/libsync/capabilities.cpp
index 6eec82b59..6eed99bd5 100644
--- a/src/libsync/capabilities.cpp
+++ b/src/libsync/capabilities.cpp
@@ -222,6 +222,13 @@ bool Capabilities::versioningEnabled() const
return _capabilities.value(QStringLiteral("files")).toMap().value(QStringLiteral("versioning")).toBool();
}
+bool Capabilities::avatarsAvailable() const
+{
+ auto userCaps = _fileSharingCapabilities.value(QStringLiteral("user")).toMap();
+ // true by default for older servers, because turning off profile pictures was introduced in later versions
+ return userCaps.value(QStringLiteral("profile_picture"), true).toBool();
+}
+
QStringList Capabilities::blacklistedFiles() const
{
return _capabilities.value(QStringLiteral("files")).toMap().value(QStringLiteral("blacklisted_files")).toStringList();
@@ -243,4 +250,5 @@ bool TusSupport::isValid() const
{
return !version.isNull();
}
-}
+
+} // namespace OCC
diff --git a/src/libsync/capabilities.h b/src/libsync/capabilities.h
index a5a538ad3..08e9ab4ff 100644
--- a/src/libsync/capabilities.h
+++ b/src/libsync/capabilities.h
@@ -180,6 +180,9 @@ public:
/** Is versioning available? */
bool versioningEnabled() const;
+ /** Are avatars (profile pictures) available? */
+ bool avatarsAvailable() const;
+
private:
QVariantMap _capabilities;
QVariantMap _fileSharingCapabilities;