From 937caddacd628e823ab077507611a60bf823c894 Mon Sep 17 00:00:00 2001 From: Konstantinos Sideris Date: Tue, 21 Nov 2017 17:34:32 +0200 Subject: [PATCH] Keep track of newly joined rooms in the settings manager fixes #134 --- include/RoomList.h | 5 +++-- src/ChatPage.cc | 5 ++--- src/RoomList.cc | 39 ++++++++++++++++----------------------- src/TextInputWidget.cc | 4 ++-- 4 files changed, 23 insertions(+), 30 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> &settings, const QMap &states); - void sync(const QMap &states); + void sync(const QMap &states, + QMap> &settings); void clear(); - void addRoom(const QSharedPointer &settings, + void addRoom(const QMap> &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 4091086b..8dd509be 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(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 &rooms) state_manager_.insert(it.key(), room_state); - // TODO Doesn't work on the sidebar. settingsManager_.insert( it.key(), QSharedPointer(new RoomSettings(it.key()))); diff --git a/src/RoomList.cc b/src/RoomList.cc index a0b95748..5b10d1c5 100644 --- a/src/RoomList.cc +++ b/src/RoomList.cc @@ -72,19 +72,22 @@ RoomList::clear() } void -RoomList::addRoom(const QSharedPointer &settings, +RoomList::addRoom(const QMap> &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(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> &set } for (auto it = states.constBegin(); it != states.constEnd(); ++it) { - auto room_id = it.key(); - auto state = it.value(); + const auto room_id = it.key(); + const auto state = it.value(); - if (!state.getAvatar().toString().isEmpty()) - client_->fetchRoomAvatar(room_id, state.getAvatar()); - - 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(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 &states) +RoomList::sync(const QMap &states, + QMap> &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(new RoomSettings(room_id)), state, room_id); + settings.insert(room_id, + QSharedPointer(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 d71769f4..c086db85 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();