diff --git a/src/gui/connectionvalidator.cpp b/src/gui/connectionvalidator.cpp index e9e0754c69b..94fc844dee3 100644 --- a/src/gui/connectionvalidator.cpp +++ b/src/gui/connectionvalidator.cpp @@ -286,13 +286,25 @@ 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()); + + // Ugh, #ifdefs are gross. #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 + } #endif } diff --git a/src/gui/shareusergroupwidget.cpp b/src/gui/shareusergroupwidget.cpp index eb48376e437..65e30f85dca 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 6eec82b5937..bf027e7b740 100644 --- a/src/libsync/capabilities.cpp +++ b/src/libsync/capabilities.cpp @@ -222,6 +222,12 @@ bool Capabilities::versioningEnabled() const return _capabilities.value(QStringLiteral("files")).toMap().value(QStringLiteral("versioning")).toBool(); } +bool Capabilities::avatarsAvailable() const +{ + // true by default for older servers, because turning off profile pictures was introduced in later versions + return _fileSharingPublicCapabilities.value(QStringLiteral("profile_picture"), true).toBool(); +} + QStringList Capabilities::blacklistedFiles() const { return _capabilities.value(QStringLiteral("files")).toMap().value(QStringLiteral("blacklisted_files")).toStringList(); @@ -243,4 +249,5 @@ bool TusSupport::isValid() const { return !version.isNull(); } -} + +} // namespace OCC diff --git a/src/libsync/capabilities.h b/src/libsync/capabilities.h index a5a538ad30e..08e9ab4ffd8 100644 --- a/src/libsync/capabilities.h +++ b/src/libsync/capabilities.h @@ -180,6 +180,9 @@ class OWNCLOUDSYNC_EXPORT Capabilities /** Is versioning available? */ bool versioningEnabled() const; + /** Are avatars (profile pictures) available? */ + bool avatarsAvailable() const; + private: QVariantMap _capabilities; QVariantMap _fileSharingCapabilities;