Ensure avatarJob is run on the respective account's QNAM thread
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Wed, 20 Nov 2024 06:09:40 +0000 (14:09 +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 20fbcd2eef6271e6914598df0488d9ab5a9200ae..30b3d699f81eef528178f519ca1351ae07d45625 100644 (file)
@@ -1655,12 +1655,20 @@ public:
                 qCWarning(lcActivity) << "Invalid account:" << accountString;
                 return;
             }
-            const auto avatarSize = requestedSize.width() > 0 ? requestedSize.width() : 64;
-            const auto avatarJob = new AvatarJob(accountState->account(), avatarUserId, avatarSize);
-            connect(avatarJob, &AvatarJob::avatarPixmap, this, [&](const QImage &avatarImg) {
-                handleDone(AvatarJob::makeCircularAvatar(avatarImg));
+
+            const auto account = accountState->account();
+            const auto qnam = account->networkAccessManager();
+
+            QMetaObject::invokeMethod(qnam, [this, requestedSize, avatarUserId, account]() {
+                const auto avatarSize = requestedSize.width() > 0 ? requestedSize.width() : 64;
+                const auto avatarJob = new AvatarJob(account, avatarUserId, avatarSize);
+                connect(avatarJob, &AvatarJob::avatarPixmap, this, [&](const QImage &avatarImg) {
+                    QMetaObject::invokeMethod(this, [this, avatarImg] {
+                        handleDone(AvatarJob::makeCircularAvatar(avatarImg));
+                    });
+                });
+                avatarJob->start();
             });
-            avatarJob->start();
             return;
         }