From ff2994a0fd472e1008fdd39cfeb881d1d578d43d Mon Sep 17 00:00:00 2001 From: "Tux3 / Mlkj / !Lev.uXFMLA" Date: Wed, 24 Sep 2014 17:55:54 +0200 Subject: [PATCH] Cache avatars --- core.cpp | 5 +++-- settings.cpp | 8 ++++---- settings.h | 4 ++-- widget/widget.cpp | 8 ++++++++ 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/core.cpp b/core.cpp index e63ec890b..e0e4e2c43 100644 --- a/core.cpp +++ b/core.cpp @@ -210,7 +210,7 @@ void Core::start() tox_get_address(tox, friendAddress); emit friendAddressGenerated(CFriendAddress::toString(friendAddress)); - QPixmap pic = Settings::getInstance().getSavedAvatar(); + QPixmap pic = Settings::getInstance().getSavedAvatar(getSelfId().toString()); if (!pic.isNull() && !pic.size().isEmpty()) { QByteArray data; @@ -471,6 +471,7 @@ void Core::onAvatarDataCallback(Tox*, int32_t friendnumber, uint8_t, else { qDebug() << "Core: Got avatar data from "<(core)->getFriendAddress(friendnumber)); emit static_cast(core)->friendAvatarChanged(friendnumber, pic); } } @@ -783,7 +784,7 @@ void Core::setAvatar(uint8_t format, const QByteArray& data) QPixmap pic; pic.loadFromData(data); - Settings::getInstance().saveAvatar(pic); + Settings::getInstance().saveAvatar(pic, getSelfId().toString()); emit selfAvatarChanged(pic); } diff --git a/settings.cpp b/settings.cpp index f3a9e0d8b..0748cd0ff 100644 --- a/settings.cpp +++ b/settings.cpp @@ -258,17 +258,17 @@ QString Settings::getSettingsDirPath() #endif } -QPixmap Settings::getSavedAvatar() +QPixmap Settings::getSavedAvatar(const QString &ownerId) { - QString filePath = QDir(getSettingsDirPath()).filePath(AVATAR_FILENAME); + QString filePath = QDir(getSettingsDirPath()).filePath("avatar_"+ownerId); QPixmap pic; pic.load(filePath); return pic; } -void Settings::saveAvatar(QPixmap& pic) +void Settings::saveAvatar(QPixmap& pic, const QString& ownerId) { - QString filePath = QDir(getSettingsDirPath()).filePath(AVATAR_FILENAME); + QString filePath = QDir(getSettingsDirPath()).filePath("avatar_"+ownerId); pic.save(filePath, "png"); } diff --git a/settings.h b/settings.h index eb8f0e23c..882a31f0f 100644 --- a/settings.h +++ b/settings.h @@ -58,8 +58,8 @@ public: bool getEncryptLogs() const; void setEncryptLogs(bool newValue); - QPixmap getSavedAvatar(); - void saveAvatar(QPixmap& pic); + QPixmap getSavedAvatar(const QString& ownerId); + void saveAvatar(QPixmap& pic, const QString& ownerId); // Assume all widgets have unique names // Don't use it to save every single thing you want to save, use it diff --git a/widget/widget.cpp b/widget/widget.cpp index 834a68412..73b6946a2 100644 --- a/widget/widget.cpp +++ b/widget/widget.cpp @@ -465,6 +465,14 @@ void Widget::addFriend(int friendId, const QString &userId) connect(core, &Core::avMediaChange, newfriend->chatForm, &ChatForm::onAvMediaChange); connect(core, &Core::friendAvatarChanged, newfriend->chatForm, &ChatForm::onAvatarChange); connect(core, &Core::friendAvatarChanged, newfriend->widget, &FriendWidget::onAvatarChange); + + // Try to get the avatar from the cache + QPixmap avatar = Settings::getInstance().getSavedAvatar(userId); + if (!avatar.isNull()) + { + newfriend->chatForm->onAvatarChange(friendId, avatar); + newfriend->widget->onAvatarChange(friendId, avatar); + } } void Widget::addFriendFailed(const QString&)