diff options
-rw-r--r-- | include/RoomList.h | 5 | ||||
-rw-r--r-- | src/ChatPage.cc | 5 | ||||
-rw-r--r-- | src/RoomList.cc | 39 |
3 files changed, 21 insertions, 28 deletions
diff --git a/include/RoomList.h b/include/RoomList.h index df668ac6..f1653a38 100644 --- a/include/RoomList.h +++ b/include/RoomList.h @@ -44,11 +44,12 @@ public: void setInitialRooms(const QMap<QString, QSharedPointer<RoomSettings>> &settings, const QMap<QString, RoomState> &states); - void sync(const QMap<QString, RoomState> &states); + void sync(const QMap<QString, RoomState> &states, + QMap<QString, QSharedPointer<RoomSettings>> &settings); void clear(); - void addRoom(const QSharedPointer<RoomSettings> &settings, + void addRoom(const QMap<QString, QSharedPointer<RoomSettings>> &settings, const RoomState &state, const QString &room_id); void removeRoom(const QString &room_id, bool reset); diff --git a/src/ChatPage.cc b/src/ChatPage.cc index 37e05c34..acc60c03 100644 --- a/src/ChatPage.cc +++ b/src/ChatPage.cc @@ -363,7 +363,7 @@ ChatPage::syncCompleted(const SyncResponse &response) auto stateDiff = generateMembershipDifference(response.rooms().join(), state_manager_); QtConcurrent::run(cache_.data(), &Cache::setState, response.nextBatch(), stateDiff); - room_list_->sync(state_manager_); + room_list_->sync(state_manager_, settingsManager_); view_manager_->sync(response.rooms()); client_->setNextBatchToken(response.nextBatch()); @@ -571,7 +571,7 @@ ChatPage::addRoom(const QString &room_id) settingsManager_.insert(room_id, QSharedPointer<RoomSettings>(new RoomSettings(room_id))); - room_list_->addRoom(settingsManager_[room_id], state_manager_[room_id], room_id); + room_list_->addRoom(settingsManager_, state_manager_[room_id], room_id); room_list_->highlightSelectedRoom(room_id); changeTopRoomInfo(room_id); @@ -711,7 +711,6 @@ ChatPage::updateJoinedRooms(const QMap<QString, JoinedRoom> &rooms) state_manager_.insert(it.key(), room_state); - // TODO Doesn't work on the sidebar. settingsManager_.insert( it.key(), QSharedPointer<RoomSettings>(new RoomSettings(it.key()))); diff --git a/src/RoomList.cc b/src/RoomList.cc index f23b22cb..b1d3a9ca 100644 --- a/src/RoomList.cc +++ b/src/RoomList.cc @@ -70,19 +70,22 @@ RoomList::clear() } void -RoomList::addRoom(const QSharedPointer<RoomSettings> &settings, +RoomList::addRoom(const QMap<QString, QSharedPointer<RoomSettings>> &settings, const RoomState &state, const QString &room_id) { - RoomInfoListItem *room_item = new RoomInfoListItem(settings, state, room_id, scrollArea_); + RoomInfoListItem *room_item = + new RoomInfoListItem(settings[room_id], state, room_id, scrollArea_); connect(room_item, &RoomInfoListItem::clicked, this, &RoomList::highlightSelectedRoom); connect(room_item, &RoomInfoListItem::leaveRoom, this, &RoomList::openLeaveRoomDialog); rooms_.insert(room_id, QSharedPointer<RoomInfoListItem>(room_item)); - client_->fetchRoomAvatar(room_id, state.getAvatar()); + if (!state.getAvatar().toString().isEmpty()) + client_->fetchRoomAvatar(room_id, state.getAvatar()); - contentsLayout_->insertWidget(0, room_item); + int pos = contentsLayout_->count() - 1; + contentsLayout_->insertWidget(pos, room_item); } void @@ -136,23 +139,10 @@ RoomList::setInitialRooms(const QMap<QString, QSharedPointer<RoomSettings>> &set } for (auto it = states.constBegin(); it != states.constEnd(); ++it) { - auto room_id = it.key(); - auto state = it.value(); - - if (!state.getAvatar().toString().isEmpty()) - client_->fetchRoomAvatar(room_id, state.getAvatar()); + const auto room_id = it.key(); + const auto state = it.value(); - RoomInfoListItem *room_item = - new RoomInfoListItem(settings[room_id], state, room_id, scrollArea_); - connect( - room_item, &RoomInfoListItem::clicked, this, &RoomList::highlightSelectedRoom); - connect( - room_item, &RoomInfoListItem::leaveRoom, this, &RoomList::openLeaveRoomDialog); - - rooms_.insert(room_id, QSharedPointer<RoomInfoListItem>(room_item)); - - int pos = contentsLayout_->count() - 1; - contentsLayout_->insertWidget(pos, room_item); + addRoom(settings, state, room_id); } if (rooms_.isEmpty()) @@ -187,15 +177,18 @@ RoomList::openLeaveRoomDialog(const QString &room_id) } void -RoomList::sync(const QMap<QString, RoomState> &states) +RoomList::sync(const QMap<QString, RoomState> &states, + QMap<QString, QSharedPointer<RoomSettings>> &settings) + { for (auto it = states.constBegin(); it != states.constEnd(); ++it) { auto room_id = it.key(); auto state = it.value(); if (!rooms_.contains(room_id)) { - addRoom( - QSharedPointer<RoomSettings>(new RoomSettings(room_id)), state, room_id); + settings.insert(room_id, + QSharedPointer<RoomSettings>(new RoomSettings(room_id))); + addRoom(settings, state, room_id); } auto room = rooms_[room_id]; |