summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/RoomList.h5
-rw-r--r--src/ChatPage.cc5
-rw-r--r--src/RoomList.cc39
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];