Add personal channel to ShortInfoBox.

This commit is contained in:
John Preston 2024-11-04 14:00:51 +04:00
parent fabdd89c4a
commit 4001899bdf
3 changed files with 27 additions and 0 deletions

View file

@ -775,6 +775,10 @@ void PeerShortInfoBox::prepareRows() {
result->setContextCopyText(contextCopyText);
return result;
};
addInfoOneLine(
tr::lng_settings_channel_label(),
channelValue(),
tr::lng_context_copy_link(tr::now));
addInfoOneLine(
tr::lng_info_link_label(),
linkValue(),
@ -836,6 +840,13 @@ rpl::producer<QString> PeerShortInfoBox::nameValue() const {
}) | rpl::distinct_until_changed();
}
rpl::producer<TextWithEntities> PeerShortInfoBox::channelValue() const {
return _fields.value(
) | rpl::map([](const PeerShortInfoFields &fields) {
return Ui::Text::Link(fields.channelName, fields.channelLink);
}) | rpl::distinct_until_changed();
}
rpl::producer<TextWithEntities> PeerShortInfoBox::linkValue() const {
return _fields.value(
) | rpl::map([](const PeerShortInfoFields &fields) {

View file

@ -37,6 +37,8 @@ enum class PeerShortInfoType {
struct PeerShortInfoFields {
QString name;
QString channelName;
QString channelLink;
QString phone;
QString link;
TextWithEntities about;
@ -169,6 +171,7 @@ private:
int fillRoundedTopHeight();
[[nodiscard]] rpl::producer<QString> nameValue() const;
[[nodiscard]] rpl::producer<TextWithEntities> channelValue() const;
[[nodiscard]] rpl::producer<TextWithEntities> linkValue() const;
[[nodiscard]] rpl::producer<QString> phoneValue() const;
[[nodiscard]] rpl::producer<QString> usernameValue() const;

View file

@ -202,6 +202,7 @@ void ProcessFullPhoto(
return peer->session().changes().peerFlagsValue(
peer,
(UpdateFlag::Name
| UpdateFlag::PersonalChannel
| UpdateFlag::PhoneNumber
| UpdateFlag::Username
| UpdateFlag::About
@ -209,8 +210,20 @@ void ProcessFullPhoto(
) | rpl::map([=] {
const auto user = peer->asUser();
const auto username = peer->username();
const auto channelId = user->personalChannelId();
const auto channel = channelId
? user->owner().channel(channelId).get()
: nullptr;
const auto channelUsername = channel
? channel->username()
: QString();
const auto hasChannel = !channelUsername.isEmpty();
return PeerShortInfoFields{
.name = peer->name(),
.channelName = hasChannel ? channel->name() : QString(),
.channelLink = (hasChannel
? channel->session().createInternalLinkFull(channelUsername)
: QString()),
.phone = user ? Ui::FormatPhone(user->phone()) : QString(),
.link = ((user || username.isEmpty())
? QString()