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))
|