summary refs log tree commit diff
path: root/src/ChatPage.cc
diff options
context:
space:
mode:
authorMax Sandholm <max@sandholm.org>2018-01-09 15:07:32 +0200
committermujx <mujx@users.noreply.github.com>2018-01-09 15:07:32 +0200
commit312df6f3bbcba0ad502864b13f9c51b4854ea2ce (patch)
treed43396836cb2ba21b13f218a6d25a7c82049338b /src/ChatPage.cc
parentMake usernames in timeline less bold (diff)
downloadnheko-312df6f3bbcba0ad502864b13f9c51b4854ea2ce.tar.xz
Communities (#195)
Diffstat (limited to 'src/ChatPage.cc')
-rw-r--r--src/ChatPage.cc80
1 files changed, 79 insertions, 1 deletions
diff --git a/src/ChatPage.cc b/src/ChatPage.cc

index 3958e2c2..3a78e1cc 100644 --- a/src/ChatPage.cc +++ b/src/ChatPage.cc
@@ -60,6 +60,17 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, topLayout_->setSpacing(0); topLayout_->setMargin(0); + communitiesSideBar_ = new QWidget(this); + communitiesSideBar_->setFixedWidth(ui::sidebar::CommunitiesSidebarSize); + communitiesSideBarLayout_ = new QVBoxLayout(communitiesSideBar_); + communitiesSideBarLayout_->setSpacing(0); + communitiesSideBarLayout_->setMargin(0); + + communitiesList_ = new CommunitiesList(client, this); + communitiesSideBarLayout_->addWidget(communitiesList_); + // communitiesSideBarLayout_->addStretch(1); + topLayout_->addWidget(communitiesSideBar_); + auto splitter = new Splitter(this); splitter->setHandleWidth(0); @@ -72,7 +83,18 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, sideBarLayout_->setSpacing(0); sideBarLayout_->setMargin(0); - sidebarActions_ = new SideBarActions(this); + sideBarTopLayout_ = new QVBoxLayout(); + sideBarTopLayout_->setSpacing(0); + sideBarTopLayout_->setMargin(0); + sideBarMainLayout_ = new QVBoxLayout(); + sideBarMainLayout_->setSpacing(0); + sideBarMainLayout_->setMargin(0); + + sideBarLayout_->addLayout(sideBarTopLayout_); + sideBarLayout_->addLayout(sideBarMainLayout_); + + sideBarTopWidget_ = new QWidget(sideBar_); + sidebarActions_ = new SideBarActions(this); connect( sidebarActions_, &SideBarActions::showSettings, this, &ChatPage::showUserSettingsPage); connect( @@ -87,6 +109,10 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, sideBarLayout_->addWidget(room_list_); sideBarLayout_->addWidget(sidebarActions_); + sideBarTopWidgetLayout_ = new QVBoxLayout(sideBarTopWidget_); + sideBarTopWidgetLayout_->setSpacing(0); + sideBarTopWidgetLayout_->setMargin(0); + // Content content_ = new QFrame(this); content_->setObjectName("mainContent"); @@ -274,6 +300,32 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, &MatrixClient::getOwnProfileResponse, this, &ChatPage::updateOwnProfileInfo); + connect(client_.data(), + SIGNAL(getOwnCommunitiesResponse(QList<QString>)), + this, + SLOT(updateOwnCommunitiesInfo(QList<QString>))); + connect(client_.data(), + &MatrixClient::communityProfileRetrieved, + this, + [=](QString communityId, QJsonObject profile) { + communityManager_[communityId]->parseProfile(profile); + }); + connect(client_.data(), + &MatrixClient::communityRoomsRetrieved, + this, + [=](QString communityId, QJsonObject rooms) { + communityManager_[communityId]->parseRooms(rooms); + + if (communityId == current_community_) { + if (communityId == "world") { + room_list_->setFilterRooms(false); + } else { + room_list_->setRoomFilter( + communityManager_[communityId]->getRoomList()); + } + } + }); + connect(client_.data(), &MatrixClient::ownAvatarRetrieved, this, &ChatPage::setOwnAvatar); connect(client_.data(), &MatrixClient::joinedRoom, this, [=](const QString &room_id) { emit showNotification("You joined the room."); @@ -304,6 +356,19 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, } }); + connect(communitiesList_, + &CommunitiesList::communityChanged, + this, + [=](const QString &communityId) { + current_community_ = communityId; + if (communityId == "world") { + room_list_->setFilterRooms(false); + } else { + room_list_->setRoomFilter( + communityManager_[communityId]->getRoomList()); + } + }); + AvatarProvider::init(client); instance_ = this; @@ -359,6 +424,7 @@ ChatPage::bootstrap(QString userid, QString homeserver, QString token) client_->setServer(homeserver); client_->setAccessToken(token); client_->getOwnProfile(); + client_->getOwnCommunities(); cache_ = QSharedPointer<Cache>(new Cache(userid)); room_list_->setCache(cache_); @@ -501,6 +567,18 @@ ChatPage::updateOwnProfileInfo(const QUrl &avatar_url, const QString &display_na } void +ChatPage::updateOwnCommunitiesInfo(const QList<QString> &own_communities) +{ + for (int i = 0; i < own_communities.size(); i++) { + QSharedPointer<Community> community = QSharedPointer<Community>(new Community()); + + communityManager_[own_communities[i]] = community; + } + + communitiesList_->setCommunities(communityManager_); +} + +void ChatPage::changeTopRoomInfo(const QString &room_id) { if (!state_manager_.contains(room_id))