From fdb9d7ab40da1d6b40ae11c3988af7082b6bc7cd Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sat, 23 Jan 2021 00:30:45 +0100 Subject: Allow users to hide rooms with specific tags --- src/CommunitiesList.cpp | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'src/CommunitiesList.cpp') diff --git a/src/CommunitiesList.cpp b/src/CommunitiesList.cpp index f3af9932..38d27864 100644 --- a/src/CommunitiesList.cpp +++ b/src/CommunitiesList.cpp @@ -135,6 +135,14 @@ CommunitiesList::addCommunity(const std::string &group_id) &CommunitiesListItem::clicked, this, &CommunitiesList::highlightSelectedCommunity); + connect(list_item, &CommunitiesListItem::isDisabledChanged, this, [this]() { + for (const auto &community : communities_) { + if (community.second->isPressed()) { + emit highlightSelectedCommunity(community.first); + break; + } + } + }); if (group_id.empty() || group_id.front() != '+') return; @@ -157,7 +165,9 @@ CommunitiesList::addCommunity(const std::string &group_id) connect(this, &CommunitiesList::groupRoomsRetrieved, this, - [this](const QString &id, const std::map &rooms) { + [this](const QString &id, const std::set &rooms) { + nhlog::ui()->info( + "Fetched rooms for {}: {}", id.toStdString(), rooms.size()); if (communities_.find(id) == communities_.end()) return; @@ -179,9 +189,9 @@ CommunitiesList::addCommunity(const std::string &group_id) return; } - std::map room_ids; + std::set room_ids; for (const auto &room : res.at("chunk")) - room_ids.emplace(QString::fromStdString(room.at("room_id")), true); + room_ids.emplace(QString::fromStdString(room.at("room_id"))); emit groupRoomsRetrieved(id, room_ids); }); @@ -256,7 +266,7 @@ CommunitiesList::fetchCommunityAvatar(const QString &id, const QString &avatarUr }); } -std::map +std::set CommunitiesList::roomList(const QString &id) const { if (communityExists(id)) @@ -277,6 +287,18 @@ CommunitiesList::currentTags() const return tags; } +std::set +CommunitiesList::hiddenTagsAndCommunities() const +{ + std::set hiddenTags; + for (auto &entry : communities_) { + if (entry.second->isDisabled()) + hiddenTags.insert(entry.first); + } + + return hiddenTags; +} + void CommunitiesList::sortEntries() { -- cgit 1.5.1 From 6ae1a5e8ad4753d90b5adc11fb49216f8bf2b8e1 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sat, 23 Jan 2021 00:49:14 +0100 Subject: Persist hidden tags --- src/CommunitiesList.cpp | 10 ++++++++++ src/UserSettingsPage.cpp | 9 +++++++++ src/UserSettingsPage.h | 3 +++ 3 files changed, 22 insertions(+) (limited to 'src/CommunitiesList.cpp') diff --git a/src/CommunitiesList.cpp b/src/CommunitiesList.cpp index 38d27864..cf0e7290 100644 --- a/src/CommunitiesList.cpp +++ b/src/CommunitiesList.cpp @@ -3,6 +3,7 @@ #include "Logging.h" #include "MatrixClient.h" #include "Splitter.h" +#include "UserSettingsPage.h" #include #include @@ -125,9 +126,15 @@ CommunitiesList::setTagsForRoom(const QString &room_id, const std::vectorhiddenTags(); + const auto id = QString::fromStdString(group_id); CommunitiesListItem *list_item = new CommunitiesListItem(id, scrollArea_); + + if (hiddenTags.contains(id)) + list_item->setDisabled(true); + communities_.emplace(id, QSharedPointer(list_item)); contentsLayout_->insertWidget(contentsLayout_->count() - 1, list_item); @@ -142,6 +149,9 @@ CommunitiesList::addCommunity(const std::string &group_id) break; } } + + auto hiddenTags = hiddenTagsAndCommunities(); + UserSettings::instance()->setHiddenTags({hiddenTags.begin(), hiddenTags.end()}); }); if (group_id.empty() || group_id.front() != '+') diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index f90938c9..0e3bd667 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -81,6 +81,7 @@ UserSettings::load(std::optional profile) hasAlertOnNotification_ = settings.value("user/alert_on_notification", false).toBool(); startInTray_ = settings.value("user/window/start_in_tray", false).toBool(); groupView_ = settings.value("user/group_view", true).toBool(); + hiddenTags_ = settings.value("user/hidden_tags", QStringList{}).toStringList(); buttonsInTimeline_ = settings.value("user/timeline/buttons", true).toBool(); timelineMaxWidth_ = settings.value("user/timeline/max_width", 0).toInt(); messageHoverHighlight_ = @@ -184,6 +185,13 @@ UserSettings::setGroupView(bool state) save(); } +void +UserSettings::setHiddenTags(QStringList hiddenTags) +{ + hiddenTags_ = hiddenTags; + save(); +} + void UserSettings::setMarkdown(bool state) { @@ -538,6 +546,7 @@ UserSettings::save() settings.setValue("minor_events", sortByImportance_); settings.setValue("read_receipts", readReceipts_); settings.setValue("group_view", groupView_); + settings.setValue("hidden_tags", hiddenTags_); settings.setValue("markdown_enabled", markdown_); settings.setValue("desktop_notifications", hasDesktopNotifications_); settings.setValue("alert_on_notification", hasAlertOnNotification_); diff --git a/src/UserSettingsPage.h b/src/UserSettingsPage.h index 6744d101..15da235b 100644 --- a/src/UserSettingsPage.h +++ b/src/UserSettingsPage.h @@ -144,6 +144,7 @@ public: void setAccessToken(QString accessToken); void setDeviceId(QString deviceId); void setHomeserver(QString homeserver); + void setHiddenTags(QStringList hiddenTags); QString theme() const { return !theme_.isEmpty() ? theme_ : defaultTheme_; } bool messageHoverHighlight() const { return messageHoverHighlight_; } @@ -182,6 +183,7 @@ public: QString accessToken() const { return accessToken_; } QString deviceId() const { return deviceId_; } QString homeserver() const { return homeserver_; } + QStringList hiddenTags() const { return hiddenTags_; } signals: void groupViewStateChanged(bool state); @@ -257,6 +259,7 @@ private: QString accessToken_; QString deviceId_; QString homeserver_; + QStringList hiddenTags_; static QSharedPointer instance_; }; -- cgit 1.5.1 From 80eb2d915d666fc1a3e2788cb0e68f84f8d2d5b6 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sat, 23 Jan 2021 01:47:22 +0100 Subject: Fix Qt < 5.14 compat --- src/CommunitiesList.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/CommunitiesList.cpp') diff --git a/src/CommunitiesList.cpp b/src/CommunitiesList.cpp index cf0e7290..77e6368a 100644 --- a/src/CommunitiesList.cpp +++ b/src/CommunitiesList.cpp @@ -151,7 +151,11 @@ CommunitiesList::addCommunity(const std::string &group_id) } auto hiddenTags = hiddenTagsAndCommunities(); - UserSettings::instance()->setHiddenTags({hiddenTags.begin(), hiddenTags.end()}); + // Qt < 5.14 compat + QStringList hiddenTags_; + for (auto &&t : hiddenTags) + hiddenTags_.push_back(t); + UserSettings::instance()->setHiddenTags(hiddenTags_); }); if (group_id.empty() || group_id.front() != '+') -- cgit 1.5.1