summary refs log tree commit diff
path: root/src/ChatPage.cc
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2017-10-04 11:33:34 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2017-10-04 11:33:34 +0300
commitd60c2b76e30dcbdb1eae2a69b2d3ddff128d00c5 (patch)
treeb54dfe5e789c3f42ce8ef26f988a2f30ab62ad4c /src/ChatPage.cc
parentRecover from corrupted cache data (diff)
downloadnheko-d60c2b76e30dcbdb1eae2a69b2d3ddff128d00c5.tar.xz
Receive typing notifications (#88)
Diffstat (limited to 'src/ChatPage.cc')
-rw-r--r--src/ChatPage.cc31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/ChatPage.cc b/src/ChatPage.cc

index 9f983b9f..52468f64 100644 --- a/src/ChatPage.cc +++ b/src/ChatPage.cc
@@ -101,8 +101,10 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, QWidget *parent) view_manager_ = new TimelineViewManager(client, this); mainContentLayout_->addWidget(view_manager_); - text_input_ = new TextInputWidget(this); + text_input_ = new TextInputWidget(this); + typingDisplay_ = new TypingDisplay(this); contentLayout_->addWidget(text_input_); + contentLayout_->addWidget(typingDisplay_); user_info_widget_ = new UserInfoWidget(sideBarTopWidget_); sideBarTopWidgetLayout_->addWidget(user_info_widget_); @@ -117,6 +119,15 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, QWidget *parent) connect( top_bar_, &TopRoomBar::leaveRoom, this, [=]() { client_->leaveRoom(current_room_); }); + connect(room_list_, &RoomList::roomChanged, this, [=](const QString &roomid) { + QStringList users; + + if (typingUsers_.contains(roomid)) + users = typingUsers_[roomid]; + + typingDisplay_->setUsers(users); + }); + connect(room_list_, &RoomList::roomChanged, this, &ChatPage::changeTopRoomInfo); connect(room_list_, &RoomList::roomChanged, text_input_, &TextInputWidget::focusLineEdit); connect( @@ -308,6 +319,8 @@ ChatPage::syncCompleted(const SyncResponse &response) auto joined = response.rooms().join(); for (auto it = joined.constBegin(); it != joined.constEnd(); it++) { + updateTypingUsers(it.key(), it.value().typingUserIDs()); + RoomState room_state; // Merge the new updates for rooms that we are tracking. @@ -620,6 +633,22 @@ ChatPage::removeRoom(const QString &room_id) room_list_->removeRoom(room_id, room_id == current_room_); } +void +ChatPage::updateTypingUsers(const QString &roomid, const QList<QString> &user_ids) +{ + QStringList users; + + for (const auto uid : user_ids) + users.append(TimelineViewManager::displayName(uid)); + + users.sort(); + + if (current_room_ == roomid) + typingDisplay_->setUsers(users); + + typingUsers_.insert(roomid, users); +} + ChatPage::~ChatPage() { sync_timer_->stop();