summary refs log tree commit diff
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2017-11-21 17:34:32 +0200
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2017-11-21 17:34:32 +0200
commit937caddacd628e823ab077507611a60bf823c894 (patch)
tree11db8c67f52f89595969f45b373b6f9db26192c4
parentDon't send empty messages (diff)
downloadnheko-937caddacd628e823ab077507611a60bf823c894.tar.xz
Keep track of newly joined rooms in the settings manager
fixes #134
-rw-r--r--include/RoomList.h5
-rw-r--r--src/ChatPage.cc5
-rw-r--r--src/RoomList.cc39
-rw-r--r--src/TextInputWidget.cc4
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<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 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<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 a0b95748..5b10d1c5 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 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();