Added ability to view stories anonymously from info stories section.

This commit is contained in:
23rd
2025-11-29 09:04:23 +03:00
parent fd52b3c23b
commit 59814aaeb0
4 changed files with 48 additions and 16 deletions

View File

@@ -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(

View File

@@ -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 <QtWidgets/QApplication>
#include <QtGui/QClipboard>
@@ -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),

View File

@@ -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<PeerData*> peer,
not_null<Window::SessionController*> 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);

View File

@@ -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<ChatHelpers::Show> show,
StealthModeDescriptor descriptor = {});
void AddStealthModeMenu(
const Ui::Menu::MenuCallback &add,
not_null<PeerData*> peer,
not_null<Window::SessionController*> controller);
[[nodiscard]] QString TimeLeftText(int left);
} // namespace Media::Stories