summary refs log tree commit diff
path: root/src/Cache.cc
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-05-01 19:35:28 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-05-01 19:35:28 +0300
commit763330fd3c259b7a877eb05944783e92c0afcb80 (patch)
treecf6810cba9aded346ecf8c3dbede7ed0e7d8d68f /src/Cache.cc
parentAdd prototype room settings menu (diff)
downloadnheko-763330fd3c259b7a877eb05944783e92c0afcb80.tar.xz
Add member list
Diffstat (limited to 'src/Cache.cc')
-rw-r--r--src/Cache.cc42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/Cache.cc b/src/Cache.cc

index 60181afc..92c86322 100644 --- a/src/Cache.cc +++ b/src/Cache.cc
@@ -1045,6 +1045,48 @@ Cache::searchUsers(const std::string &room_id, const std::string &query, std::ui return results; } +std::vector<RoomMember> +Cache::getMembers(const std::string &room_id, std::size_t startIndex, std::size_t len) +{ + auto txn = lmdb::txn::begin(env_, nullptr, MDB_RDONLY); + auto db = getMembersDb(txn, room_id); + auto cursor = lmdb::cursor::open(txn, db); + + std::size_t currentIndex = 0; + + const auto endIndex = std::min(startIndex + len, db.size(txn)); + + std::vector<RoomMember> members; + + std::string user_id, user_data; + while (cursor.get(user_id, user_data, MDB_NEXT)) { + if (currentIndex < startIndex) { + currentIndex += 1; + continue; + } + + if (currentIndex >= endIndex) + break; + + try { + MemberInfo tmp = json::parse(user_data); + members.emplace_back( + RoomMember{QString::fromStdString(user_id), + QString::fromStdString(tmp.name), + QImage::fromData(image(txn, tmp.avatar_url))}); + } catch (const json::exception &e) { + qWarning() << e.what(); + } + + currentIndex += 1; + } + + cursor.close(); + txn.commit(); + + return members; +} + QHash<QString, QString> Cache::DisplayNames; QHash<QString, QString> Cache::AvatarUrls;