diff --git a/include/RoomList.h b/include/RoomList.h index df668ac6cfa087e822365b871170c770afd26056..f1653a38bd9c14052c566e653a5199da53cc15c2 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 4091086bda5a92f637faa14316478846b74389de..8dd509be996fc2494e565b462ac802e2a27abcbe 100644 --- a/src/ChatPage.cc +++ b/src/ChatPage.cc @@ -362,7 +362,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()); @@ -570,7 +570,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); @@ -710,7 +710,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 a0b95748157e8c33f053b81044ec00638e7b3962..5b10d1c51747df87e18bfd79d7c6970a2ef362e0 100644 --- a/src/RoomList.cc +++ b/src/RoomList.cc @@ -72,19 +72,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 @@ -138,23 +141,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()) @@ -189,15 +179,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]; diff --git a/src/TextInputWidget.cc b/src/TextInputWidget.cc index d71769f4b185c0bf00f53a571120cacf5885d244..c086db8551fbc5091f05a86e8031b2c23af1563d 100644 --- a/src/TextInputWidget.cc +++ b/src/TextInputWidget.cc @@ -133,8 +133,8 @@ FilteredTextEdit::minimumSizeHint() const void FilteredTextEdit::submit() { - if (toPlainText().trimmed().isEmpty()) - return; + if (toPlainText().trimmed().isEmpty()) + return; if (true_history_.size() == INPUT_HISTORY_SIZE) true_history_.pop_back();