diff --git a/Telegram/SourceFiles/ayu/ui/utils/ayu_profile_values.cpp b/Telegram/SourceFiles/ayu/ui/utils/ayu_profile_values.cpp index aa19bf79c..567dd459f 100644 --- a/Telegram/SourceFiles/ayu/ui/utils/ayu_profile_values.cpp +++ b/Telegram/SourceFiles/ayu/ui/utils/ayu_profile_values.cpp @@ -35,6 +35,17 @@ QString IDString(not_null peer) { return resultId; } +QString IDString(MsgId topic_root_id) { + auto resultId = QString::number(topic_root_id.bare); + + return resultId; +} + + rpl::producer IDValue(not_null peer) { return rpl::single(IDString(peer)) | Ui::Text::ToWithEntities(); +} + +rpl::producer IDValue(MsgId topic_root_id) { + return rpl::single(IDString(topic_root_id)) | Ui::Text::ToWithEntities(); } \ No newline at end of file diff --git a/Telegram/SourceFiles/ayu/ui/utils/ayu_profile_values.h b/Telegram/SourceFiles/ayu/ui/utils/ayu_profile_values.h index c7577ab6c..d80ef7b08 100644 --- a/Telegram/SourceFiles/ayu/ui/utils/ayu_profile_values.h +++ b/Telegram/SourceFiles/ayu/ui/utils/ayu_profile_values.h @@ -9,5 +9,7 @@ QString IDString(not_null peer); +QString IDString(MsgId topic_root_id); -rpl::producer IDValue(not_null peer); \ No newline at end of file +rpl::producer IDValue(not_null peer); +rpl::producer IDValue(MsgId topic_root_id); \ No newline at end of file diff --git a/Telegram/SourceFiles/info/profile/info_profile_actions.cpp b/Telegram/SourceFiles/info/profile/info_profile_actions.cpp index b89463366..4762a024d 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_actions.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_actions.cpp @@ -482,6 +482,7 @@ object_ptr DetailsFiller::setupInfo() { } if (settings->showPeerId != 0) { + auto idDrawableText = IDValue( user ) | rpl::map([](TextWithEntities &&text) { @@ -565,12 +566,12 @@ object_ptr DetailsFiller::setupInfo() { addTranslateToMenu(about.text, AboutValue(_peer)); } - if (settings->showPeerId != 0) { + if (settings->showPeerId != 0 && !_topic) { auto idDrawableText = IDValue( _peer - ) | rpl::map([](TextWithEntities &&text) { - return Ui::Text::Code(text.text); - }); + ) | rpl::map([](TextWithEntities &&text) { + return Ui::Text::Code(text.text); + }); auto idInfo = addInfoOneLine( rpl::single(QString("ID")), std::move(idDrawableText), @@ -587,6 +588,30 @@ object_ptr DetailsFiller::setupInfo() { return false; }); } + + if (settings->showPeerId != 0 && _topic) { + const auto topicRootId = _topic->rootId(); + auto idDrawableText = IDValue( + _peer->forumTopicFor(topicRootId)->topicRootId() + ) | rpl::map([](TextWithEntities &&text) { + return Ui::Text::Code(text.text); + }); + auto idInfo = addInfoOneLine( + rpl::single(QString("ID")), + std::move(idDrawableText), + tr::ayu_ContextCopyID(tr::now) + ); + + idInfo.text->setClickHandlerFilter([=, peer = _peer](auto &&...) { + const auto idText = IDString(peer); + if (!idText.isEmpty()) { + QGuiApplication::clipboard()->setText(idText); + const auto msg = tr::ayu_IDCopiedToast(tr::now); + controller->showToast(msg); + } + return false; + }); + } } if (!_peer->isSelf()) { // No notifications toggle for Self => no separator.