summary refs log tree commit diff
path: root/src/AvatarProvider.cc
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-03-25 15:59:47 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-03-25 15:59:47 +0300
commit72d5d6d2863a4e7c56089bb966ae9181e22e1b91 (patch)
treeeccdf668c865bd95edc7c71349f153f6b1a1c99c /src/AvatarProvider.cc
parentLink with pthread on Linux (diff)
downloadnheko-72d5d6d2863a4e7c56089bb966ae9181e22e1b91.tar.xz
Show avatars in the completion popup
Diffstat (limited to 'src/AvatarProvider.cc')
-rw-r--r--src/AvatarProvider.cc48
1 files changed, 14 insertions, 34 deletions
diff --git a/src/AvatarProvider.cc b/src/AvatarProvider.cc

index 1c509d0a..e6e98886 100644 --- a/src/AvatarProvider.cc +++ b/src/AvatarProvider.cc
@@ -21,7 +21,6 @@ QSharedPointer<MatrixClient> AvatarProvider::client_; std::map<QString, AvatarData> AvatarProvider::avatars_; -std::map<QString, std::vector<std::function<void(QImage)>>> AvatarProvider::toBeResolved_; void AvatarProvider::init(QSharedPointer<MatrixClient> client) @@ -32,22 +31,14 @@ AvatarProvider::init(QSharedPointer<MatrixClient> client) void AvatarProvider::updateAvatar(const QString &uid, const QImage &img) { - if (toBeResolved_.find(uid) != toBeResolved_.end()) { - auto callbacks = toBeResolved_[uid]; - - // Update all the timeline items with the resolved avatar. - for (const auto &callback : callbacks) - callback(img); - - toBeResolved_.erase(uid); - } - auto avatarData = &avatars_[uid]; avatarData->img = img; } void -AvatarProvider::resolve(const QString &userId, std::function<void(QImage)> callback) +AvatarProvider::resolve(const QString &userId, + QObject *receiver, + std::function<void(QImage)> callback) { if (avatars_.find(userId) == avatars_.end()) return; @@ -59,23 +50,19 @@ AvatarProvider::resolve(const QString &userId, std::function<void(QImage)> callb return; } - // Add the current timeline item to the waiting list for this avatar. - if (toBeResolved_.find(userId) == toBeResolved_.end()) { - client_->fetchUserAvatar(avatars_[userId].url, - [userId](QImage image) { updateAvatar(userId, image); }, - [userId](QString error) { - qWarning() - << error << ": failed to retrieve user avatar" - << userId; - }); + auto proxy = client_->fetchUserAvatar(avatars_[userId].url); - std::vector<std::function<void(QImage)>> items; - items.emplace_back(callback); + if (proxy == nullptr) + return; - toBeResolved_.emplace(userId, items); - } else { - toBeResolved_[userId].emplace_back(callback); - } + connect(proxy.data(), + &DownloadMediaProxy::avatarDownloaded, + receiver, + [userId, proxy, callback](const QImage &img) { + proxy->deleteLater(); + updateAvatar(userId, img); + callback(img); + }); } void @@ -86,10 +73,3 @@ AvatarProvider::setAvatarUrl(const QString &userId, const QUrl &url) avatars_.emplace(userId, data); } - -void -AvatarProvider::clear() -{ - avatars_.clear(); - toBeResolved_.clear(); -}