From ef1d98f3cf37daff56661cdccff10998138e2c9b Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 5 Mar 2021 21:52:48 +0400 Subject: [PATCH] Show about in voice chat channels. --- .../SourceFiles/calls/calls_group_members.cpp | 33 ++++++++++++++++++- Telegram/SourceFiles/data/data_group_call.cpp | 5 +++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/calls/calls_group_members.cpp b/Telegram/SourceFiles/calls/calls_group_members.cpp index 9965087815..9298f5e330 100644 --- a/Telegram/SourceFiles/calls/calls_group_members.cpp +++ b/Telegram/SourceFiles/calls/calls_group_members.cpp @@ -18,6 +18,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_peer_values.h" // Data::CanWriteValue. #include "data/data_session.h" // Data::Session::invitedToCallUsers. #include "settings/settings_common.h" // Settings::CreateButton. +#include "info/profile/info_profile_values.h" // Info::Profile::AboutValue. #include "ui/paint/arcs.h" #include "ui/paint/blobs.h" #include "ui/widgets/buttons.h" @@ -104,6 +105,7 @@ public: Invited, }; + void setAbout(const QString &about); void setSkipLevelUpdate(bool value); void updateState(const Data::GroupCall::Participant *participant); void updateLevel(float level); @@ -234,6 +236,7 @@ private: Ui::Animations::Simple _mutedAnimation; // For gray/red icon. Ui::Animations::Simple _activeAnimation; // For icon cross animation. Ui::Animations::Simple _arcsAnimation; // For volume arcs animation. + QString _aboutText; uint32 _ssrc = 0; int _volume = Group::kDefaultVolume; bool _sounding = false; @@ -356,6 +359,9 @@ Row::Row( : PeerListRow(participantPeer) , _delegate(delegate) { refreshStatus(); + if (const auto channel = participantPeer->asChannel()) { + _aboutText = channel->about(); + } } void Row::setSkipLevelUpdate(bool value) { @@ -656,6 +662,14 @@ void Row::paintStatusIcon( p.restore(); } +void Row::setAbout(const QString &about) { + if (_aboutText == about) { + return; + } + _aboutText = about; + _delegate->rowUpdateRow(this); +} + void Row::paintStatusText( Painter &p, const style::PeerListItem &st, @@ -665,7 +679,12 @@ void Row::paintStatusText( int outerWidth, bool selected) { const auto &font = st::normalFont; - if (_state != State::Invited && _state != State::MutedByMe) { + const auto about = (_state == State::Inactive || _state == State::Muted) + ? _aboutText + : QString(); + if (_aboutText.isEmpty() + && _state != State::Invited + && _state != State::MutedByMe) { p.save(); paintStatusIcon(p, st, font, selected); const auto translatedWidth = statusIconWidth(); @@ -693,6 +712,8 @@ void Row::paintStatusText( outerWidth, (_state == State::MutedByMe ? tr::lng_group_call_muted_by_me_status(tr::now) + : !_aboutText.isEmpty() + ? font->m.elidedText(_aboutText, Qt::ElideRight, availableWidth) : _delegate->rowIsMe(peer()) ? tr::lng_status_connecting(tr::now) : tr::lng_group_call_invited_status(tr::now))); @@ -817,6 +838,16 @@ MembersController::MembersController( } return true; }); + + _peer->session().changes().peerUpdates( + Data::PeerUpdate::Flag::About + ) | rpl::start_with_next([=](const Data::PeerUpdate &update) { + if (const auto channel = update.peer->asChannel()) { + if (const auto row = findRow(channel)) { + row->setAbout(channel->about()); + } + } + }, _lifetime); } MembersController::~MembersController() { diff --git a/Telegram/SourceFiles/data/data_group_call.cpp b/Telegram/SourceFiles/data/data_group_call.cpp index 7480bbdae3..a70edec88f 100644 --- a/Telegram/SourceFiles/data/data_group_call.cpp +++ b/Telegram/SourceFiles/data/data_group_call.cpp @@ -271,6 +271,11 @@ void GroupCall::applyParticipantsSlice( } return; } + if (const auto about = data.vabout()) { + if (const auto channel = participantPeer->asChannel()) { + channel->setAbout(qs(*about)); + } + } const auto was = (i != end(_participants)) ? std::make_optional(*i) : std::nullopt;