summary refs log tree commit diff
path: root/src/RoomList.cc
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-04-21 16:34:50 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-04-21 16:35:03 +0300
commit2f00fc51bf27708a9c0ac1ce186043059f93923e (patch)
tree2e65159dd08fd9576b18f7f1570b41b56029ccda /src/RoomList.cc
parentPopup improvements (diff)
downloadnheko-2f00fc51bf27708a9c0ac1ce186043059f93923e.tar.xz
Cache refactoring
Diffstat (limited to 'src/RoomList.cc')
-rw-r--r--src/RoomList.cc77
1 files changed, 35 insertions, 42 deletions
diff --git a/src/RoomList.cc b/src/RoomList.cc

index 866d28ae..7d17585c 100644 --- a/src/RoomList.cc +++ b/src/RoomList.cc
@@ -26,7 +26,6 @@ #include "OverlayModal.h" #include "RoomInfoListItem.h" #include "RoomList.h" -#include "RoomSettings.h" #include "RoomState.h" #include "UserSettingsPage.h" @@ -74,17 +73,11 @@ RoomList::RoomList(QSharedPointer<MatrixClient> client, } void -RoomList::clear() +RoomList::addRoom(const QString &room_id, const RoomInfo &info) { - rooms_.clear(); -} + auto room_item = new RoomInfoListItem(room_id, info, scrollArea_); + room_item->setRoomName(QString::fromStdString(std::move(info.name))); -void -RoomList::addRoom(const QSharedPointer<RoomSettings> &settings, - const QSharedPointer<RoomState> &state, - const QString &room_id) -{ - auto room_item = new RoomInfoListItem(settings, state, room_id, scrollArea_); connect(room_item, &RoomInfoListItem::clicked, this, &RoomList::highlightSelectedRoom); connect(room_item, &RoomInfoListItem::leaveRoom, this, [](const QString &room_id) { MainWindow::instance()->openLeaveRoomDialog(room_id); @@ -92,8 +85,8 @@ RoomList::addRoom(const QSharedPointer<RoomSettings> &settings, rooms_.emplace(room_id, QSharedPointer<RoomInfoListItem>(room_item)); - if (!state->getAvatar().toString().isEmpty()) - updateAvatar(room_id, state->getAvatar().toString()); + if (!info.avatar_url.empty()) + updateAvatar(room_id, QString::fromStdString(info.avatar_url)); int pos = contentsLayout_->count() - 1; contentsLayout_->insertWidget(pos, room_item); @@ -164,20 +157,19 @@ RoomList::calculateUnreadMessageCount() } void -RoomList::setInitialRooms(const std::map<QString, QSharedPointer<RoomSettings>> &settings, - const std::map<QString, QSharedPointer<RoomState>> &states) +RoomList::initialize(const QMap<QString, RoomInfo> &info) { + qDebug() << "initialize room list"; + rooms_.clear(); - if (settings.size() != states.size()) { - qWarning() << "Initializing room list"; - qWarning() << "Different number of room states and room settings"; - return; + for (auto it = info.begin(); it != info.end(); it++) { + if (it.value().is_invite) + addInvitedRoom(it.key(), it.value()); + else + addRoom(it.key(), it.value()); } - for (auto const &state : states) - addRoom(settings.at(state.first), state.second, state.first); - if (rooms_.empty()) return; @@ -190,21 +182,11 @@ RoomList::setInitialRooms(const std::map<QString, QSharedPointer<RoomSettings>> } void -RoomList::sync(const std::map<QString, QSharedPointer<RoomState>> &states, - const std::map<QString, QSharedPointer<RoomSettings>> &settings) +RoomList::sync(const std::map<QString, RoomInfo> &info) { - for (auto const &state : states) { - if (!roomExists(state.first)) - addRoom(settings.at(state.first), state.second, state.first); - - auto room = rooms_[state.first]; - auto new_avatar = state.second->getAvatar(); - - updateAvatar(state.first, new_avatar.toString()); - - room->setState(state.second); - } + for (const auto &room : info) + updateRoom(room.first, room.second); } void @@ -368,14 +350,24 @@ RoomList::paintEvent(QPaintEvent *) } void -RoomList::syncInvites(const std::map<std::string, mtx::responses::InvitedRoom> &rooms) +RoomList::updateRoom(const QString &room_id, const RoomInfo &info) { - for (auto it = rooms.cbegin(); it != rooms.cend(); ++it) { - const auto room_id = QString::fromStdString(it->first); + qDebug() << "updateRoom" << QString::fromStdString(info.name) << room_id; - if (!roomExists(room_id)) - addInvitedRoom(room_id, it->second); + if (!roomExists(room_id)) { + if (info.is_invite) + addInvitedRoom(room_id, info); + else + addRoom(room_id, info); + + return; } + + auto room = rooms_[room_id]; + updateAvatar(room_id, QString::fromStdString(info.avatar_url)); + room->setRoomName(QString::fromStdString(info.name)); + room->setRoomType(info.is_invite); + room->update(); } void @@ -386,15 +378,16 @@ RoomList::setRoomFilter(std::vector<QString> room_ids) } void -RoomList::addInvitedRoom(const QString &room_id, const mtx::responses::InvitedRoom &room) +RoomList::addInvitedRoom(const QString &room_id, const RoomInfo &info) { - auto room_item = new RoomInfoListItem(room_id, room, scrollArea_); + auto room_item = new RoomInfoListItem(room_id, info, scrollArea_); + connect(room_item, &RoomInfoListItem::acceptInvite, this, &RoomList::acceptInvite); connect(room_item, &RoomInfoListItem::declineInvite, this, &RoomList::declineInvite); rooms_.emplace(room_id, QSharedPointer<RoomInfoListItem>(room_item)); - updateAvatar(room_id, QString::fromStdString(room.avatar())); + updateAvatar(room_id, QString::fromStdString(info.avatar_url)); int pos = contentsLayout_->count() - 1; contentsLayout_->insertWidget(pos, room_item);