summary refs log tree commit diff
path: root/src/Cache.cc
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/Cache.cc
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/Cache.cc')
-rw-r--r--src/Cache.cc37
1 files changed, 37 insertions, 0 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() {