From 49fb0bef2fd7b4e4276a49efcf1ca5825cc0556b Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 23 Jul 2026 17:51:05 +0400 Subject: [PATCH] Show community status across ordinary peer lists Task: 2026/07/23/show-community-status-in-peer-lists --- Telegram/SourceFiles/boxes/peer_list_box.cpp | 7 +---- .../boxes/peer_list_controllers.cpp | 6 +++++ .../boxes/peers/add_to_community_box.cpp | 26 ------------------- .../dialogs/ui/dialogs_suggestions.cpp | 2 +- 4 files changed, 8 insertions(+), 33 deletions(-) diff --git a/Telegram/SourceFiles/boxes/peer_list_box.cpp b/Telegram/SourceFiles/boxes/peer_list_box.cpp index 386d5a3dff..238800af0f 100644 --- a/Telegram/SourceFiles/boxes/peer_list_box.cpp +++ b/Telegram/SourceFiles/boxes/peer_list_box.cpp @@ -31,7 +31,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_peer_values.h" #include "data/data_channel.h" #include "data/data_chat.h" -#include "data/data_community.h" #include "data/data_session.h" #include "data/data_changes.h" #include "data/stickers/data_custom_emoji.h" @@ -747,11 +746,7 @@ void PeerListRow::refreshStatus() { setStatusText(tr::lng_group_status(tr::now)); } else if (const auto channel = peer()->asChannel()) { if (channel->isCommunity()) { - const auto info = channel->communityInfo(); - const auto count = info ? int(info->histories().size()) : 0; - setStatusText(count - ? tr::lng_community_chats(tr::now, lt_count, count) - : tr::lng_community_status(tr::now)); + setStatusText(tr::lng_community_status(tr::now)); } else { setStatusText(tr::lng_channel_status(tr::now)); } diff --git a/Telegram/SourceFiles/boxes/peer_list_controllers.cpp b/Telegram/SourceFiles/boxes/peer_list_controllers.cpp index 69c507d435..0e8a76e64d 100644 --- a/Telegram/SourceFiles/boxes/peer_list_controllers.cpp +++ b/Telegram/SourceFiles/boxes/peer_list_controllers.cpp @@ -1056,6 +1056,12 @@ auto ChooseRecipientBoxController::createRow( auto result = std::make_unique( history, _moneyRestrictionError ? &computeListSt().item : nullptr); + if (const auto info = JoinedCommunityChats(peer)) { + result->setCustomStatus(tr::lng_community_chats( + tr::now, + lt_count, + int(info->histories().size()))); + } return result; } diff --git a/Telegram/SourceFiles/boxes/peers/add_to_community_box.cpp b/Telegram/SourceFiles/boxes/peers/add_to_community_box.cpp index 72ea446e04..159e615256 100644 --- a/Telegram/SourceFiles/boxes/peers/add_to_community_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/add_to_community_box.cpp @@ -11,9 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "apiwrap.h" #include "boxes/peer_list_box.h" #include "boxes/peers/manage_community_box.h" -#include "data/data_changes.h" #include "data/data_channel.h" -#include "data/data_community.h" #include "data/data_peer.h" #include "data/data_session.h" #include "lang/lang_hardcoded.h" @@ -55,7 +53,6 @@ public: private: void appendRow(not_null community); - void updateStatus(not_null row); const not_null _peer; const Fn)> _callback; @@ -75,16 +72,6 @@ Main::Session &Controller::session() const { } void Controller::prepare() { - session().changes().peerUpdates( - Data::PeerUpdate::Flag::FullInfo - ) | rpl::on_next([=](const Data::PeerUpdate &update) { - if (const auto row = delegate()->peerListFindRow( - update.peer->id.value)) { - updateStatus(row); - delegate()->peerListUpdateRow(row); - } - }, lifetime()); - session().api().communities().requestJoinedCommunities(crl::guard( this, [=](const std::vector> &list) { @@ -107,20 +94,7 @@ void Controller::appendRow(not_null community) { return; } auto row = std::make_unique(community); - updateStatus(row.get()); delegate()->peerListAppendRow(std::move(row)); - if (!community->wasFullUpdated()) { - session().api().requestFullPeer(community); - } -} - -void Controller::updateStatus(not_null row) { - const auto community = row->peer()->asChannel(); - const auto info = community ? community->communityInfo() : nullptr; - const auto count = info ? int(info->linkedPeers().size()) : 0; - row->setCustomStatus(count - ? tr::lng_community_chats(tr::now, lt_count, count) - : tr::lng_community_status(tr::now)); } void CreateCommunityBox( diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_suggestions.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_suggestions.cpp index c1eba53be5..eb6d12f6dc 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_suggestions.cpp +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_suggestions.cpp @@ -266,7 +266,7 @@ RecentRow::RecentRow(not_null peer) chat->count)); } } else if (const auto channel = peer->asChannel()) { - if (channel->membersCountKnown()) { + if (!channel->isCommunity() && channel->membersCountKnown()) { setCustomStatus((channel->isBroadcast() ? tr::lng_chat_status_subscribers : tr::lng_chat_status_members)(