summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-04-24 14:13:05 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-04-24 14:13:05 +0300
commit0028fdfe6c7485515b2535bb73b1d9075f9bf4fe (patch)
tree3f79b29c5ec38d59737a8d8f051c8c0b6ae778d3 /src
parentFix CI errors (diff)
downloadnheko-0028fdfe6c7485515b2535bb73b1d9075f9bf4fe.tar.xz
Remove map from room_id to QPixmap from ChatPage
The avatars are loaded from cache
Diffstat (limited to 'src')
-rw-r--r--src/Cache.cc37
-rw-r--r--src/ChatPage.cc14
2 files changed, 44 insertions, 7 deletions
diff --git a/src/Cache.cc b/src/Cache.cc

index 129b6696..ea31e749 100644 --- a/src/Cache.cc +++ b/src/Cache.cc
@@ -859,6 +859,43 @@ Cache::getInviteRoomTopic(lmdb::txn &txn, lmdb::dbi &db) return QString(); } +QImage +Cache::getRoomAvatar(const QString &room_id) +{ + auto txn = lmdb::txn::begin(env_, nullptr, MDB_RDONLY); + + lmdb::val response; + + if (!lmdb::dbi_get(txn, roomsDb_, lmdb::val(room_id.toStdString()), response)) { + txn.commit(); + return QImage(); + } + + std::string media_url; + + try { + RoomInfo info = json::parse(std::string(response.data(), response.size())); + media_url = std::move(info.avatar_url); + + if (media_url.empty()) { + txn.commit(); + return QImage(); + } + } catch (const json::exception &e) { + qWarning() << "failed to parse room info" << e.what() + << QString::fromStdString(std::string(response.data(), response.size())); + } + + if (!lmdb::dbi_get(txn, mediaDb_, lmdb::val(media_url), response)) { + txn.commit(); + return QImage(); + } + + txn.commit(); + + return QImage::fromData(QByteArray(response.data(), response.size())); +} + std::vector<std::string> Cache::joinedRooms() { diff --git a/src/ChatPage.cc b/src/ChatPage.cc
index 58a6fb4b..59fcdc13 100644 --- a/src/ChatPage.cc +++ b/src/ChatPage.cc
@@ -459,7 +459,6 @@ ChatPage::logout() void ChatPage::resetUI() { - roomAvatars_.clear(); room_list_->clear(); top_bar_->reset(); user_info_widget_->reset(); @@ -571,8 +570,6 @@ ChatPage::initialSyncCompleted(const mtx::responses::Sync &response) void ChatPage::updateTopBarAvatar(const QString &roomid, const QPixmap &img) { - roomAvatars_.emplace(roomid, img); - if (current_room_ != roomid) return; @@ -646,15 +643,18 @@ ChatPage::changeTopRoomInfo(const QString &room_id) top_bar_->updateRoomName(name); top_bar_->updateRoomTopic(QString::fromStdString(room_info[room_id].topic)); - if (roomAvatars_.find(room_id) != roomAvatars_.end()) - top_bar_->updateRoomAvatar(roomAvatars_[room_id].toImage()); - else + auto img = cache_->getRoomAvatar(room_id); + + if (img.isNull()) top_bar_->updateRoomAvatarFromName(name); + else + top_bar_->updateRoomAvatar(img); - current_room_ = room_id; } catch (const lmdb::error &e) { qWarning() << "failed to change top bar room info" << e.what(); } + + current_room_ = room_id; } void