diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_stories_content.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_stories_content.cpp index 1a9d10218b..2d8feff45c 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_stories_content.cpp +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_stories_content.cpp @@ -247,22 +247,8 @@ void FillSourceMenu( add(viewProfileText, [=] { controller->showPeerInfo(peer); }, channel ? &st::menuIconInfo : &st::menuIconProfile); - if (peer->session().premiumPossible() - && peer->isUser() - && !peer->hasActiveVideoStream() - && peer->hasUnreadStories()) { - const auto now = base::unixtime::now(); - const auto stealth = owner->stories().stealthMode(); - add(tr::lng_stories_view_anonymously(tr::now), [=] { - Media::Stories::SetupStealthMode( - controller->uiShow(), - Media::Stories::StealthModeDescriptor{ - [=] { controller->openPeerStories(peer->id); }, - &st::storiesStealthStyleDefault, - }); - }, ((peer->session().premium() || (stealth.enabledTill > now)) - ? &st::menuIconStealth - : &st::menuIconStealthLocked)); + if (!peer->hasActiveVideoStream() && peer->hasUnreadStories()) { + Media::Stories::AddStealthModeMenu(add, peer, controller); } const auto in = [&](Data::StorySourcesList list) { return ranges::contains( diff --git a/Telegram/SourceFiles/info/media/info_media_list_widget.cpp b/Telegram/SourceFiles/info/media/info_media_list_widget.cpp index 913caaafed..87a20772c9 100644 --- a/Telegram/SourceFiles/info/media/info_media_list_widget.cpp +++ b/Telegram/SourceFiles/info/media/info_media_list_widget.cpp @@ -38,6 +38,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "history/history_item_helpers.h" #include "media/stories/media_stories_controller.h" // ...TogglePinnedToast. #include "media/stories/media_stories_share.h" // PrepareShareBox. +#include "media/stories/media_stories_stealth.h" #include "window/window_session_controller.h" #include "window/window_peer_menu.h" #include "ui/widgets/menu/menu_add_action_callback.h" @@ -74,6 +75,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_chat.h" #include "styles/style_credits.h" // giftBoxHiddenMark #include "styles/style_chat_helpers.h" +#include "styles/style_media_stories.h" #include #include @@ -1327,6 +1329,10 @@ void ListWidget::showContextMenu( } if (const auto peer = _controller->key().storiesPeer()) { if (!peer->isSelf() && IsStoryMsgId(globalId.itemId.msg)) { + ::Media::Stories::AddStealthModeMenu( + Ui::Menu::CreateAddActionCallback(_contextMenu), + peer, + _controller->parentController()); const auto storyId = FullStoryId{ globalId.itemId.peer, StoryIdFromMsgId(globalId.itemId.msg), diff --git a/Telegram/SourceFiles/media/stories/media_stories_stealth.cpp b/Telegram/SourceFiles/media/stories/media_stories_stealth.cpp index 4e2dea5a63..789deb84bc 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_stealth.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_stealth.cpp @@ -23,12 +23,15 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/text/text_utilities.h" #include "ui/toast/toast.h" #include "ui/widgets/buttons.h" +#include "ui/widgets/popup_menu.h" +#include "ui/widgets/menu/menu_add_action_callback.h" #include "ui/painter.h" #include "window/window_controller.h" #include "window/window_session_controller.h" #include "styles/style_media_view.h" #include "styles/style_media_stories.h" #include "styles/style_layers.h" +#include "styles/style_menu_icons.h" namespace Media::Stories { namespace { @@ -375,6 +378,30 @@ void SetupStealthMode( } } +void AddStealthModeMenu( + const Ui::Menu::MenuCallback &add, + not_null peer, + not_null controller) { + if (!peer->session().premiumPossible() || !peer->isUser()) { + return; + } + const auto now = base::unixtime::now(); + const auto stealth = peer->owner().stories().stealthMode(); + add( + tr::lng_stories_view_anonymously(tr::now), + [=] { + SetupStealthMode( + controller->uiShow(), + StealthModeDescriptor{ + [=] { controller->openPeerStories(peer->id); }, + &st::storiesStealthStyleDefault, + }); + }, + ((peer->session().premium() || (stealth.enabledTill > now)) + ? &st::menuIconStealth + : &st::menuIconStealthLocked)); +} + QString TimeLeftText(int left) { Expects(left >= 0); diff --git a/Telegram/SourceFiles/media/stories/media_stories_stealth.h b/Telegram/SourceFiles/media/stories/media_stories_stealth.h index 4036c419e3..9c1d69b476 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_stealth.h +++ b/Telegram/SourceFiles/media/stories/media_stories_stealth.h @@ -15,6 +15,14 @@ namespace ChatHelpers { class Show; } // namespace ChatHelpers +namespace Ui::Menu { +struct MenuCallback; +} // namespace Ui::Menu + +namespace Window { +class SessionController; +} // namespace Window + namespace Media::Stories { struct StealthModeDescriptor { @@ -26,6 +34,11 @@ void SetupStealthMode( std::shared_ptr show, StealthModeDescriptor descriptor = {}); +void AddStealthModeMenu( + const Ui::Menu::MenuCallback &add, + not_null peer, + not_null controller); + [[nodiscard]] QString TimeLeftText(int left); } // namespace Media::Stories