Add ability to fetch remote server avatars in usermodel avatar ImageResponse
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Sun, 20 Oct 2024 17:46:56 +0000 (01:46 +0800)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 22 Nov 2024 08:33:49 +0000 (16:33 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/gui/tray/usermodel.cpp

index c094b5090a9894eccfa55b85e8d8035753c34286..5c493f8138c4e4927f69c8c9a644a1986712baf3 100644 (file)
@@ -1642,6 +1642,25 @@ public:
             return;
         }
 
+        if (id.startsWith("user-id=")) {
+            // Format is "image://avatars/user-id=avatar-requested-user/local-user-id:0"
+            const auto userIdsString = id.split('=');
+            const auto userIds = userIdsString.last().split("/local-account:");
+            const auto avatarUserId = userIds.first();
+            const auto accountString = userIds.last();
+            const auto accountState = AccountManager::instance()->account(accountString);
+            Q_ASSERT(accountState);
+            if (!accountState) {
+                qCWarning(lcActivity) << "Account not found:" << accountString;
+                return;
+            }
+            const auto avatarJob = new AvatarJob(accountState->account(), avatarUserId, requestedSize.width());
+            connect(avatarJob, &AvatarJob::avatarPixmap, this, [&](const QImage &avatarImg) {
+                handleDone(AvatarJob::makeCircularAvatar(avatarImg));
+            });
+            avatarJob->start();
+            return;
+        }
 
         handleDone(UserModel::instance()->avatarById(id.toInt()));
     }