diff --git a/include/AvatarProvider.h b/include/AvatarProvider.h index a58ef0b7e6b7ecea65f25019efe2acb04a8d7c13..906f2593a7d7dcacabdccb508e02bd9960c0f4ed 100644 --- a/include/AvatarProvider.h +++ b/include/AvatarProvider.h @@ -24,6 +24,12 @@ class MatrixClient; class TimelineItem; +struct AvatarData +{ + QImage img; + QUrl url; +}; + class AvatarProvider : public QObject { Q_OBJECT @@ -39,8 +45,8 @@ private: static void updateAvatar(const QString &uid, const QImage &img); static QSharedPointer<MatrixClient> client_; - static QMap<QString, QList<TimelineItem *>> toBeResolved_; - static QMap<QString, QImage> userAvatars_; - static QMap<QString, QUrl> avatarUrls_; + using UserID = QString; + static QMap<UserID, AvatarData> avatars_; + static QMap<UserID, QList<TimelineItem *>> toBeResolved_; }; diff --git a/src/AvatarProvider.cc b/src/AvatarProvider.cc index ab938cb153ca6664eb5058f4062622003df7153e..7e8c9e4973133fd7049124d4227c3fc2f359e3e8 100644 --- a/src/AvatarProvider.cc +++ b/src/AvatarProvider.cc @@ -21,8 +21,7 @@ QSharedPointer<MatrixClient> AvatarProvider::client_; -QMap<QString, QImage> AvatarProvider::userAvatars_; -QMap<QString, QUrl> AvatarProvider::avatarUrls_; +QMap<QString, AvatarData> AvatarProvider::avatars_; QMap<QString, QList<TimelineItem *>> AvatarProvider::toBeResolved_; void @@ -46,45 +45,50 @@ AvatarProvider::updateAvatar(const QString &uid, const QImage &img) toBeResolved_.remove(uid); } - userAvatars_.insert(uid, img); + auto avatarData = avatars_[uid]; + avatarData.img = img; + + avatars_.insert(uid, avatarData); } void AvatarProvider::resolve(const QString &userId, TimelineItem *item) { - if (userAvatars_.contains(userId)) { - auto img = userAvatars_[userId]; + if (!avatars_.contains(userId)) + return; - item->setUserAvatar(img); + auto img = avatars_[userId].img; + if (!img.isNull()) { + item->setUserAvatar(img); return; } - if (avatarUrls_.contains(userId)) { - // Add the current timeline item to the waiting list for this avatar. - if (!toBeResolved_.contains(userId)) { - client_->fetchUserAvatar(userId, avatarUrls_[userId]); + // Add the current timeline item to the waiting list for this avatar. + if (!toBeResolved_.contains(userId)) { + client_->fetchUserAvatar(userId, avatars_[userId].url); - QList<TimelineItem *> timelineItems; - timelineItems.push_back(item); + QList<TimelineItem *> timelineItems; + timelineItems.push_back(item); - toBeResolved_.insert(userId, timelineItems); - } else { - toBeResolved_[userId].push_back(item); - } + toBeResolved_.insert(userId, timelineItems); + } else { + toBeResolved_[userId].push_back(item); } } void AvatarProvider::setAvatarUrl(const QString &userId, const QUrl &url) { - avatarUrls_.insert(userId, url); + AvatarData data; + data.url = url; + + avatars_.insert(userId, data); } void AvatarProvider::clear() { - userAvatars_.clear(); - avatarUrls_.clear(); + avatars_.clear(); toBeResolved_.clear(); } diff --git a/src/EmojiPickButton.cc b/src/EmojiPickButton.cc index 17716f6fb4fc67310742da6c3acef34dbdf136e4..a63ca0b2f28190bcaf494ac8d1d050830acfffde 100644 --- a/src/EmojiPickButton.cc +++ b/src/EmojiPickButton.cc @@ -15,8 +15,8 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "EmojiPanel.h" #include "EmojiPickButton.h" +#include "EmojiPanel.h" EmojiPickButton::EmojiPickButton(QWidget *parent) : FlatButton(parent) diff --git a/src/Login.cc b/src/Login.cc index 69338f2ce33938f26ec225491443675f58b8dbe0..a9e303f9ef10dff3c4ac76f37578f492f0f0cb5e 100644 --- a/src/Login.cc +++ b/src/Login.cc @@ -15,8 +15,8 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "Deserializable.h" #include "Login.h" +#include "Deserializable.h" LoginRequest::LoginRequest() {} diff --git a/src/LoginPage.cc b/src/LoginPage.cc index c1ba352cd3518188953e398aa4bc55a0da33937b..528b744242889cf3c41993142b33028d16aa8b45 100644 --- a/src/LoginPage.cc +++ b/src/LoginPage.cc @@ -15,11 +15,11 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "LoginPage.h" #include "Config.h" #include "FlatButton.h" #include "InputValidator.h" #include "LoadingIndicator.h" -#include "LoginPage.h" #include "MatrixClient.h" #include "OverlayModal.h" #include "RaisedButton.h" diff --git a/src/Profile.cc b/src/Profile.cc index 38795e4912d01d13e0ade1990f39e9a0c759f469..8eaafe0733ae99a6f19696429ebfae3d026bb8be 100644 --- a/src/Profile.cc +++ b/src/Profile.cc @@ -16,6 +16,7 @@ */ #include "Deserializable.h" + #include "Profile.h" void diff --git a/src/Register.cc b/src/Register.cc index 0fe2ddceac62eb7033a3cfe15a118949c5d5849f..7453c94320ee65dfc53b4293e850330aca6404d7 100644 --- a/src/Register.cc +++ b/src/Register.cc @@ -16,6 +16,7 @@ */ #include "Deserializable.h" + #include "Register.h" RegisterRequest::RegisterRequest(const QString &username, const QString &password) diff --git a/src/RegisterPage.cc b/src/RegisterPage.cc index d8186f65cfcff6edf4164af2da0b57596694a31d..304a7dc0d1c093e69eabf4216ea342fdd3dfa647 100644 --- a/src/RegisterPage.cc +++ b/src/RegisterPage.cc @@ -15,13 +15,13 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "RegisterPage.h" #include "Avatar.h" #include "Config.h" #include "FlatButton.h" #include "InputValidator.h" #include "MatrixClient.h" #include "RaisedButton.h" -#include "RegisterPage.h" #include "TextField.h" RegisterPage::RegisterPage(QSharedPointer<MatrixClient> client, QWidget *parent)