PremiumPreview/BusinessFeature -> PremiumFeature.

This commit is contained in:
John Preston 2024-03-01 18:37:50 +04:00
parent f812166249
commit 88751896af
23 changed files with 242 additions and 196 deletions

View file

@ -776,7 +776,7 @@ void BackgroundPreviewBox::applyForPeer() {
} else { } else {
ShowPremiumPreviewBox( ShowPremiumPreviewBox(
_controller->uiShow(), _controller->uiShow(),
PremiumPreview::Wallpapers); PremiumFeature::Wallpapers);
} }
}); });
const auto cancel = CreateChild<RoundButton>( const auto cancel = CreateChild<RoundButton>(

View file

@ -682,7 +682,7 @@ void EditCaptionBox::setupEmojiPanel() {
&& !_controller->session().premium()) { && !_controller->session().premium()) {
ShowPremiumPreviewBox( ShowPremiumPreviewBox(
_controller, _controller,
PremiumPreview::AnimatedEmoji); PremiumFeature::AnimatedEmoji);
} else { } else {
Data::InsertCustomEmoji(_field.get(), data.document); Data::InsertCustomEmoji(_field.get(), data.document);
} }

View file

@ -587,7 +587,7 @@ void GiftsBox(
const auto content = box->addRow( const auto content = box->addRow(
object_ptr<Ui::VerticalLayout>(box), object_ptr<Ui::VerticalLayout>(box),
{}); {});
auto buttonCallback = [=](PremiumPreview section) { auto buttonCallback = [=](PremiumFeature section) {
stars->setPaused(true); stars->setPaused(true);
const auto previewBoxShown = [=]( const auto previewBoxShown = [=](
not_null<Ui::BoxContent*> previewBox) { not_null<Ui::BoxContent*> previewBox) {

View file

@ -1216,7 +1216,7 @@ void LanguageBox::setupTop(not_null<Ui::VerticalLayout*> container) {
if (checked && !premium) { if (checked && !premium) {
ShowPremiumPreviewToBuy( ShowPremiumPreviewToBuy(
_controller, _controller,
PremiumPreview::RealTimeTranslation); PremiumFeature::RealTimeTranslation);
_translateChatTurnOff.fire(false); _translateChatTurnOff.fire(false);
} }
return premium return premium

View file

@ -60,7 +60,7 @@ constexpr auto kStarPeriod = 3 * crl::time(1000);
using Data::ReactionId; using Data::ReactionId;
struct Descriptor { struct Descriptor {
PremiumPreview section = PremiumPreview::Stickers; PremiumFeature section = PremiumFeature::Stickers;
DocumentData *requestedSticker = nullptr; DocumentData *requestedSticker = nullptr;
bool fromSettings = false; bool fromSettings = false;
Fn<void()> hiddenCallback; Fn<void()> hiddenCallback;
@ -91,92 +91,118 @@ void PreloadSticker(const std::shared_ptr<Data::DocumentMedia> &media) {
media->videoThumbnailWanted(origin); media->videoThumbnailWanted(origin);
} }
[[nodiscard]] rpl::producer<QString> SectionTitle(PremiumPreview section) { [[nodiscard]] rpl::producer<QString> SectionTitle(PremiumFeature section) {
switch (section) { switch (section) {
case PremiumPreview::Wallpapers: case PremiumFeature::Wallpapers:
return tr::lng_premium_summary_subtitle_wallpapers(); return tr::lng_premium_summary_subtitle_wallpapers();
case PremiumPreview::Stories: case PremiumFeature::Stories:
return tr::lng_premium_summary_subtitle_stories(); return tr::lng_premium_summary_subtitle_stories();
case PremiumPreview::DoubleLimits: case PremiumFeature::DoubleLimits:
return tr::lng_premium_summary_subtitle_double_limits(); return tr::lng_premium_summary_subtitle_double_limits();
case PremiumPreview::MoreUpload: case PremiumFeature::MoreUpload:
return tr::lng_premium_summary_subtitle_more_upload(); return tr::lng_premium_summary_subtitle_more_upload();
case PremiumPreview::FasterDownload: case PremiumFeature::FasterDownload:
return tr::lng_premium_summary_subtitle_faster_download(); return tr::lng_premium_summary_subtitle_faster_download();
case PremiumPreview::VoiceToText: case PremiumFeature::VoiceToText:
return tr::lng_premium_summary_subtitle_voice_to_text(); return tr::lng_premium_summary_subtitle_voice_to_text();
case PremiumPreview::NoAds: case PremiumFeature::NoAds:
return tr::lng_premium_summary_subtitle_no_ads(); return tr::lng_premium_summary_subtitle_no_ads();
case PremiumPreview::EmojiStatus: case PremiumFeature::EmojiStatus:
return tr::lng_premium_summary_subtitle_emoji_status(); return tr::lng_premium_summary_subtitle_emoji_status();
case PremiumPreview::InfiniteReactions: case PremiumFeature::InfiniteReactions:
return tr::lng_premium_summary_subtitle_infinite_reactions(); return tr::lng_premium_summary_subtitle_infinite_reactions();
case PremiumPreview::TagsForMessages: case PremiumFeature::TagsForMessages:
return tr::lng_premium_summary_subtitle_tags_for_messages(); return tr::lng_premium_summary_subtitle_tags_for_messages();
case PremiumPreview::LastSeen: case PremiumFeature::LastSeen:
return tr::lng_premium_summary_subtitle_last_seen(); return tr::lng_premium_summary_subtitle_last_seen();
case PremiumPreview::MessagePrivacy: case PremiumFeature::MessagePrivacy:
return tr::lng_premium_summary_subtitle_message_privacy(); return tr::lng_premium_summary_subtitle_message_privacy();
case PremiumPreview::Stickers: case PremiumFeature::Stickers:
return tr::lng_premium_summary_subtitle_premium_stickers(); return tr::lng_premium_summary_subtitle_premium_stickers();
case PremiumPreview::AnimatedEmoji: case PremiumFeature::AnimatedEmoji:
return tr::lng_premium_summary_subtitle_animated_emoji(); return tr::lng_premium_summary_subtitle_animated_emoji();
case PremiumPreview::AdvancedChatManagement: case PremiumFeature::AdvancedChatManagement:
return tr::lng_premium_summary_subtitle_advanced_chat_management(); return tr::lng_premium_summary_subtitle_advanced_chat_management();
case PremiumPreview::ProfileBadge: case PremiumFeature::ProfileBadge:
return tr::lng_premium_summary_subtitle_profile_badge(); return tr::lng_premium_summary_subtitle_profile_badge();
case PremiumPreview::AnimatedUserpics: case PremiumFeature::AnimatedUserpics:
return tr::lng_premium_summary_subtitle_animated_userpics(); return tr::lng_premium_summary_subtitle_animated_userpics();
case PremiumPreview::RealTimeTranslation: case PremiumFeature::RealTimeTranslation:
return tr::lng_premium_summary_subtitle_translation(); return tr::lng_premium_summary_subtitle_translation();
case PremiumPreview::Business: case PremiumFeature::Business:
return tr::lng_premium_summary_subtitle_business(); return tr::lng_premium_summary_subtitle_business();
case PremiumFeature::BusinessLocation:
return tr::lng_business_subtitle_location();
case PremiumFeature::BusinessHours:
return tr::lng_business_subtitle_opening_hours();
case PremiumFeature::QuickReplies:
return tr::lng_business_subtitle_quick_replies();
case PremiumFeature::GreetingMessage:
return tr::lng_business_subtitle_greeting_messages();
case PremiumFeature::AwayMessage:
return tr::lng_business_subtitle_away_messages();
case PremiumFeature::BusinessBots:
return tr::lng_business_subtitle_chatbots();
} }
Unexpected("PremiumPreview in SectionTitle."); Unexpected("PremiumFeature in SectionTitle.");
} }
[[nodiscard]] rpl::producer<QString> SectionAbout(PremiumPreview section) { [[nodiscard]] rpl::producer<QString> SectionAbout(PremiumFeature section) {
switch (section) { switch (section) {
case PremiumPreview::Wallpapers: case PremiumFeature::Wallpapers:
return tr::lng_premium_summary_about_wallpapers(); return tr::lng_premium_summary_about_wallpapers();
case PremiumPreview::Stories: case PremiumFeature::Stories:
return tr::lng_premium_summary_about_stories(); return tr::lng_premium_summary_about_stories();
case PremiumPreview::DoubleLimits: case PremiumFeature::DoubleLimits:
return tr::lng_premium_summary_about_double_limits(); return tr::lng_premium_summary_about_double_limits();
case PremiumPreview::MoreUpload: case PremiumFeature::MoreUpload:
return tr::lng_premium_summary_about_more_upload(); return tr::lng_premium_summary_about_more_upload();
case PremiumPreview::FasterDownload: case PremiumFeature::FasterDownload:
return tr::lng_premium_summary_about_faster_download(); return tr::lng_premium_summary_about_faster_download();
case PremiumPreview::VoiceToText: case PremiumFeature::VoiceToText:
return tr::lng_premium_summary_about_voice_to_text(); return tr::lng_premium_summary_about_voice_to_text();
case PremiumPreview::NoAds: case PremiumFeature::NoAds:
return tr::lng_premium_summary_about_no_ads(); return tr::lng_premium_summary_about_no_ads();
case PremiumPreview::EmojiStatus: case PremiumFeature::EmojiStatus:
return tr::lng_premium_summary_about_emoji_status(); return tr::lng_premium_summary_about_emoji_status();
case PremiumPreview::InfiniteReactions: case PremiumFeature::InfiniteReactions:
return tr::lng_premium_summary_about_infinite_reactions(); return tr::lng_premium_summary_about_infinite_reactions();
case PremiumPreview::TagsForMessages: case PremiumFeature::TagsForMessages:
return tr::lng_premium_summary_about_tags_for_messages(); return tr::lng_premium_summary_about_tags_for_messages();
case PremiumPreview::LastSeen: case PremiumFeature::LastSeen:
return tr::lng_premium_summary_about_last_seen(); return tr::lng_premium_summary_about_last_seen();
case PremiumPreview::MessagePrivacy: case PremiumFeature::MessagePrivacy:
return tr::lng_premium_summary_about_message_privacy(); return tr::lng_premium_summary_about_message_privacy();
case PremiumPreview::Stickers: case PremiumFeature::Stickers:
return tr::lng_premium_summary_about_premium_stickers(); return tr::lng_premium_summary_about_premium_stickers();
case PremiumPreview::AnimatedEmoji: case PremiumFeature::AnimatedEmoji:
return tr::lng_premium_summary_about_animated_emoji(); return tr::lng_premium_summary_about_animated_emoji();
case PremiumPreview::AdvancedChatManagement: case PremiumFeature::AdvancedChatManagement:
return tr::lng_premium_summary_about_advanced_chat_management(); return tr::lng_premium_summary_about_advanced_chat_management();
case PremiumPreview::ProfileBadge: case PremiumFeature::ProfileBadge:
return tr::lng_premium_summary_about_profile_badge(); return tr::lng_premium_summary_about_profile_badge();
case PremiumPreview::AnimatedUserpics: case PremiumFeature::AnimatedUserpics:
return tr::lng_premium_summary_about_animated_userpics(); return tr::lng_premium_summary_about_animated_userpics();
case PremiumPreview::RealTimeTranslation: case PremiumFeature::RealTimeTranslation:
return tr::lng_premium_summary_about_translation(); return tr::lng_premium_summary_about_translation();
case PremiumPreview::Business: case PremiumFeature::Business:
return tr::lng_premium_summary_about_business(); return tr::lng_premium_summary_about_business();
case PremiumFeature::BusinessLocation:
return tr::lng_business_about_location();
case PremiumFeature::BusinessHours:
return tr::lng_business_about_opening_hours();
case PremiumFeature::QuickReplies:
return tr::lng_business_about_quick_replies();
case PremiumFeature::GreetingMessage:
return tr::lng_business_about_greeting_messages();
case PremiumFeature::AwayMessage:
return tr::lng_business_about_away_messages();
case PremiumFeature::BusinessBots:
return tr::lng_business_about_chatbots();
} }
Unexpected("PremiumPreview in SectionTitle."); Unexpected("PremiumFeature in SectionTitle.");
} }
[[nodiscard]] object_ptr<Ui::RpWidget> ChatBackPreview( [[nodiscard]] object_ptr<Ui::RpWidget> ChatBackPreview(
@ -468,33 +494,40 @@ struct VideoPreviewDocument {
RectPart align = RectPart::Bottom; RectPart align = RectPart::Bottom;
}; };
[[nodiscard]] bool VideoAlignToTop(PremiumPreview section) { [[nodiscard]] bool VideoAlignToTop(PremiumFeature section) {
return (section == PremiumPreview::MoreUpload) return (section == PremiumFeature::MoreUpload)
|| (section == PremiumPreview::NoAds) || (section == PremiumFeature::NoAds)
|| (section == PremiumPreview::AnimatedEmoji); || (section == PremiumFeature::AnimatedEmoji);
} }
[[nodiscard]] DocumentData *LookupVideo( [[nodiscard]] DocumentData *LookupVideo(
not_null<Main::Session*> session, not_null<Main::Session*> session,
PremiumPreview section) { PremiumFeature section) {
const auto name = [&] { const auto name = [&] {
switch (section) { switch (section) {
case PremiumPreview::MoreUpload: return "more_upload"; case PremiumFeature::MoreUpload: return "more_upload";
case PremiumPreview::FasterDownload: return "faster_download"; case PremiumFeature::FasterDownload: return "faster_download";
case PremiumPreview::VoiceToText: return "voice_to_text"; case PremiumFeature::VoiceToText: return "voice_to_text";
case PremiumPreview::NoAds: return "no_ads"; case PremiumFeature::NoAds: return "no_ads";
case PremiumPreview::AnimatedEmoji: return "animated_emoji"; case PremiumFeature::AnimatedEmoji: return "animated_emoji";
case PremiumPreview::AdvancedChatManagement: case PremiumFeature::AdvancedChatManagement:
return "advanced_chat_management"; return "advanced_chat_management";
case PremiumPreview::EmojiStatus: return "emoji_status"; case PremiumFeature::EmojiStatus: return "emoji_status";
case PremiumPreview::InfiniteReactions: return "infinite_reactions"; case PremiumFeature::InfiniteReactions: return "infinite_reactions";
case PremiumPreview::TagsForMessages: return "saved_tags"; case PremiumFeature::TagsForMessages: return "saved_tags";
case PremiumPreview::ProfileBadge: return "profile_badge"; case PremiumFeature::ProfileBadge: return "profile_badge";
case PremiumPreview::AnimatedUserpics: return "animated_userpics"; case PremiumFeature::AnimatedUserpics: return "animated_userpics";
case PremiumPreview::RealTimeTranslation: return "translations"; case PremiumFeature::RealTimeTranslation: return "translations";
case PremiumPreview::Wallpapers: return "wallpapers"; case PremiumFeature::Wallpapers: return "wallpapers";
case PremiumPreview::LastSeen: return "last_seen"; case PremiumFeature::LastSeen: return "last_seen";
case PremiumPreview::MessagePrivacy: return "message_privacy"; case PremiumFeature::MessagePrivacy: return "message_privacy";
case PremiumFeature::BusinessLocation: return "business_location";
case PremiumFeature::BusinessHours: return "business_hours";
case PremiumFeature::QuickReplies: return "quick_replies";
case PremiumFeature::GreetingMessage: return "greeting_message";
case PremiumFeature::AwayMessage: return "away_message";
case PremiumFeature::BusinessBots: return "business_bots";
} }
return ""; return "";
}(); }();
@ -721,7 +754,7 @@ struct VideoPreviewDocument {
[[nodiscard]] not_null<Ui::RpWidget*> GenericPreview( [[nodiscard]] not_null<Ui::RpWidget*> GenericPreview(
not_null<Ui::RpWidget*> parent, not_null<Ui::RpWidget*> parent,
std::shared_ptr<ChatHelpers::Show> show, std::shared_ptr<ChatHelpers::Show> show,
PremiumPreview section, PremiumFeature section,
Fn<void()> readyCallback) { Fn<void()> readyCallback) {
const auto result = Ui::CreateChild<Ui::RpWidget>(parent.get()); const auto result = Ui::CreateChild<Ui::RpWidget>(parent.get());
result->show(); result->show();
@ -762,10 +795,10 @@ struct VideoPreviewDocument {
[[nodiscard]] not_null<Ui::RpWidget*> GenerateDefaultPreview( [[nodiscard]] not_null<Ui::RpWidget*> GenerateDefaultPreview(
not_null<Ui::RpWidget*> parent, not_null<Ui::RpWidget*> parent,
std::shared_ptr<ChatHelpers::Show> show, std::shared_ptr<ChatHelpers::Show> show,
PremiumPreview section, PremiumFeature section,
Fn<void()> readyCallback) { Fn<void()> readyCallback) {
switch (section) { switch (section) {
case PremiumPreview::Stickers: case PremiumFeature::Stickers:
return StickersPreview(parent, std::move(show), readyCallback); return StickersPreview(parent, std::move(show), readyCallback);
default: default:
return GenericPreview( return GenericPreview(
@ -789,8 +822,8 @@ struct VideoPreviewDocument {
[[nodiscard]] object_ptr<Ui::RpWidget> CreateSwitch( [[nodiscard]] object_ptr<Ui::RpWidget> CreateSwitch(
not_null<Ui::RpWidget*> parent, not_null<Ui::RpWidget*> parent,
not_null<rpl::variable<PremiumPreview>*> selected, not_null<rpl::variable<PremiumFeature>*> selected,
std::vector<PremiumPreview> order) { std::vector<PremiumFeature> order) {
const auto padding = st::premiumDotPadding; const auto padding = st::premiumDotPadding;
const auto width = padding.left() + st::premiumDot + padding.right(); const auto width = padding.left() + st::premiumDot + padding.right();
const auto height = padding.top() + st::premiumDot + padding.bottom(); const auto height = padding.top() + st::premiumDot + padding.bottom();
@ -861,14 +894,20 @@ void PreviewBox(
Ui::Animations::Simple animation; Ui::Animations::Simple animation;
Fn<void()> preload; Fn<void()> preload;
std::vector<Hiding> hiding; std::vector<Hiding> hiding;
rpl::variable<PremiumPreview> selected; rpl::variable<PremiumFeature> selected;
std::vector<PremiumPreview> order; std::vector<PremiumFeature> order;
}; };
const auto state = outer->lifetime().make_state<State>(); const auto state = outer->lifetime().make_state<State>();
state->selected = descriptor.section; state->selected = descriptor.section;
state->order = Settings::PremiumPreviewOrder(&show->session()); auto premiumOrder = Settings::PremiumFeaturesOrder(&show->session());
auto businessOrder = Settings::BusinessFeaturesOrder(&show->session());
state->order = ranges::contains(businessOrder, descriptor.section)
? std::move(businessOrder)
: ranges::contains(businessOrder, descriptor.section)
? std::move(premiumOrder)
: std::vector{ descriptor.section };
const auto index = [=](PremiumPreview section) { const auto index = [=](PremiumFeature section) {
const auto it = ranges::find(state->order, section); const auto it = ranges::find(state->order, section);
return (it == end(state->order)) return (it == end(state->order))
? 0 ? 0
@ -911,7 +950,7 @@ void PreviewBox(
return; return;
} }
const auto now = state->selected.current(); const auto now = state->selected.current();
if (now != PremiumPreview::Stickers && !state->stickersPreload) { if (now != PremiumFeature::Stickers && !state->stickersPreload) {
const auto ready = [=] { const auto ready = [=] {
if (state->stickersPreload) { if (state->stickersPreload) {
state->stickersPreloadReady = true; state->stickersPreloadReady = true;
@ -922,14 +961,14 @@ void PreviewBox(
state->stickersPreload = GenerateDefaultPreview( state->stickersPreload = GenerateDefaultPreview(
outer, outer,
show, show,
PremiumPreview::Stickers, PremiumFeature::Stickers,
ready); ready);
state->stickersPreload->hide(); state->stickersPreload->hide();
} }
}; };
switch (descriptor.section) { switch (descriptor.section) {
case PremiumPreview::Stickers: case PremiumFeature::Stickers:
state->content = media state->content = media
? StickerPreview(outer, show, media, state->preload) ? StickerPreview(outer, show, media, state->preload)
: StickersPreview(outer, show, state->preload); : StickersPreview(outer, show, state->preload);
@ -945,7 +984,7 @@ void PreviewBox(
state->selected.value( state->selected.value(
) | rpl::combine_previous( ) | rpl::combine_previous(
) | rpl::start_with_next([=](PremiumPreview was, PremiumPreview now) { ) | rpl::start_with_next([=](PremiumFeature was, PremiumFeature now) {
const auto animationCallback = [=] { const auto animationCallback = [=] {
if (!state->animation.animating()) { if (!state->animation.animating()) {
for (const auto &hiding : base::take(state->hiding)) { for (const auto &hiding : base::take(state->hiding)) {
@ -987,7 +1026,7 @@ void PreviewBox(
.leftTill = state->content->x() - start, .leftTill = state->content->x() - start,
}); });
state->leftFrom = start; state->leftFrom = start;
if (now == PremiumPreview::Stickers && state->stickersPreload) { if (now == PremiumFeature::Stickers && state->stickersPreload) {
state->content = base::take(state->stickersPreload); state->content = base::take(state->stickersPreload);
state->content->show(); state->content->show();
if (base::take(state->stickersPreloadReady)) { if (base::take(state->stickersPreloadReady)) {
@ -1058,14 +1097,14 @@ void PreviewBox(
return Settings::LookupPremiumRef(state->selected.current()); return Settings::LookupPremiumRef(state->selected.current());
}; };
auto unlock = state->selected.value( auto unlock = state->selected.value(
) | rpl::map([=](PremiumPreview section) { ) | rpl::map([=](PremiumFeature section) {
return (section == PremiumPreview::InfiniteReactions) return (section == PremiumFeature::InfiniteReactions)
? tr::lng_premium_unlock_reactions() ? tr::lng_premium_unlock_reactions()
: (section == PremiumPreview::Stickers) : (section == PremiumFeature::Stickers)
? tr::lng_premium_unlock_stickers() ? tr::lng_premium_unlock_stickers()
: (section == PremiumPreview::AnimatedEmoji) : (section == PremiumFeature::AnimatedEmoji)
? tr::lng_premium_unlock_emoji() ? tr::lng_premium_unlock_emoji()
: (section == PremiumPreview::EmojiStatus) : (section == PremiumFeature::EmojiStatus)
? tr::lng_premium_unlock_status() ? tr::lng_premium_unlock_status()
: tr::lng_premium_more_about(); : tr::lng_premium_more_about();
}) | rpl::flatten_latest(); }) | rpl::flatten_latest();
@ -1212,19 +1251,19 @@ void Show(
descriptor.shownCallback(raw); descriptor.shownCallback(raw);
} }
return; return;
} else if (descriptor.section == PremiumPreview::DoubleLimits) { } else if (descriptor.section == PremiumFeature::DoubleLimits) {
show->showBox(Box([=](not_null<Ui::GenericBox*> box) { show->showBox(Box([=](not_null<Ui::GenericBox*> box) {
DoubledLimitsPreviewBox(box, &show->session()); DoubledLimitsPreviewBox(box, &show->session());
DecorateListPromoBox(box, show, descriptor); DecorateListPromoBox(box, show, descriptor);
})); }));
return; return;
} else if (descriptor.section == PremiumPreview::Stories) { } else if (descriptor.section == PremiumFeature::Stories) {
show->showBox(Box([=](not_null<Ui::GenericBox*> box) { show->showBox(Box([=](not_null<Ui::GenericBox*> box) {
UpgradedStoriesPreviewBox(box, &show->session()); UpgradedStoriesPreviewBox(box, &show->session());
DecorateListPromoBox(box, show, descriptor); DecorateListPromoBox(box, show, descriptor);
})); }));
return; return;
} else if (descriptor.section == PremiumPreview::Business) { } else if (descriptor.section == PremiumFeature::Business) {
const auto window = show->resolveWindow( const auto window = show->resolveWindow(
ChatHelpers::WindowUsage::PremiumPromo); ChatHelpers::WindowUsage::PremiumPromo);
if (window) { if (window) {
@ -1298,21 +1337,21 @@ void ShowStickerPreviewBox(
std::shared_ptr<ChatHelpers::Show> show, std::shared_ptr<ChatHelpers::Show> show,
not_null<DocumentData*> document) { not_null<DocumentData*> document) {
Show(std::move(show), Descriptor{ Show(std::move(show), Descriptor{
.section = PremiumPreview::Stickers, .section = PremiumFeature::Stickers,
.requestedSticker = document, .requestedSticker = document,
}); });
} }
void ShowPremiumPreviewBox( void ShowPremiumPreviewBox(
not_null<Window::SessionController*> controller, not_null<Window::SessionController*> controller,
PremiumPreview section, PremiumFeature section,
Fn<void(not_null<Ui::BoxContent*>)> shown) { Fn<void(not_null<Ui::BoxContent*>)> shown) {
ShowPremiumPreviewBox(controller->uiShow(), section, std::move(shown)); ShowPremiumPreviewBox(controller->uiShow(), section, std::move(shown));
} }
void ShowPremiumPreviewBox( void ShowPremiumPreviewBox(
std::shared_ptr<ChatHelpers::Show> show, std::shared_ptr<ChatHelpers::Show> show,
PremiumPreview section, PremiumFeature section,
Fn<void(not_null<Ui::BoxContent*>)> shown, Fn<void(not_null<Ui::BoxContent*>)> shown,
bool hideSubscriptionButton) { bool hideSubscriptionButton) {
Show(std::move(show), Descriptor{ Show(std::move(show), Descriptor{
@ -1324,7 +1363,7 @@ void ShowPremiumPreviewBox(
void ShowPremiumPreviewToBuy( void ShowPremiumPreviewToBuy(
not_null<Window::SessionController*> controller, not_null<Window::SessionController*> controller,
PremiumPreview section, PremiumFeature section,
Fn<void()> hiddenCallback) { Fn<void()> hiddenCallback) {
Show(controller->uiShow(), Descriptor{ Show(controller->uiShow(), Descriptor{
.section = section, .section = section,

View file

@ -45,7 +45,8 @@ void UpgradedStoriesPreviewBox(
not_null<Ui::GenericBox*> box, not_null<Ui::GenericBox*> box,
not_null<Main::Session*> session); not_null<Main::Session*> session);
enum class PremiumPreview { enum class PremiumFeature {
// Premium features.
Stories, Stories,
DoubleLimits, DoubleLimits,
MoreUpload, MoreUpload,
@ -66,23 +67,31 @@ enum class PremiumPreview {
MessagePrivacy, MessagePrivacy,
Business, Business,
// Business features.
BusinessLocation,
BusinessHours,
QuickReplies,
GreetingMessage,
AwayMessage,
BusinessBots,
kCount, kCount,
}; };
void ShowPremiumPreviewBox( void ShowPremiumPreviewBox(
not_null<Window::SessionController*> controller, not_null<Window::SessionController*> controller,
PremiumPreview section, PremiumFeature section,
Fn<void(not_null<Ui::BoxContent*>)> shown = nullptr); Fn<void(not_null<Ui::BoxContent*>)> shown = nullptr);
void ShowPremiumPreviewBox( void ShowPremiumPreviewBox(
std::shared_ptr<ChatHelpers::Show> show, std::shared_ptr<ChatHelpers::Show> show,
PremiumPreview section, PremiumFeature section,
Fn<void(not_null<Ui::BoxContent*>)> shown = nullptr, Fn<void(not_null<Ui::BoxContent*>)> shown = nullptr,
bool hideSubscriptionButton = false); bool hideSubscriptionButton = false);
void ShowPremiumPreviewToBuy( void ShowPremiumPreviewToBuy(
not_null<Window::SessionController*> controller, not_null<Window::SessionController*> controller,
PremiumPreview section, PremiumFeature section,
Fn<void()> hiddenCallback = nullptr); Fn<void()> hiddenCallback = nullptr);
void PremiumUnavailableBox(not_null<Ui::GenericBox*> box); void PremiumUnavailableBox(not_null<Ui::GenericBox*> box);

View file

@ -1135,7 +1135,7 @@ void SendFilesBox::setupEmojiPanel() {
_captionToPeer, _captionToPeer,
data.document) data.document)
: (_limits & SendFilesAllow::EmojiWithoutPremium))) { : (_limits & SendFilesAllow::EmojiWithoutPremium))) {
ShowPremiumPreviewBox(_show, PremiumPreview::AnimatedEmoji); ShowPremiumPreviewBox(_show, PremiumFeature::AnimatedEmoji);
} else { } else {
Data::InsertCustomEmoji(_caption.data(), data.document); Data::InsertCustomEmoji(_caption.data(), data.document);
} }

View file

@ -665,7 +665,7 @@ bool ShowSearchTagsPromo(
if (!controller) { if (!controller) {
return false; return false;
} }
ShowPremiumPreviewBox(controller, PremiumPreview::TagsForMessages); ShowPremiumPreviewBox(controller, PremiumFeature::TagsForMessages);
return true; return true;
} }

View file

@ -47,7 +47,7 @@ namespace {
if (const auto controller = my.sessionWindow.get()) { if (const auto controller = my.sessionWindow.get()) {
ShowPremiumPreviewBox( ShowPremiumPreviewBox(
controller, controller,
PremiumPreview::TagsForMessages); PremiumFeature::TagsForMessages);
} }
}); });
} }

View file

@ -160,7 +160,7 @@ void FillSponsoredMessagesMenu(
menu->addSeparator(&st::expandedMenuSeparator); menu->addSeparator(&st::expandedMenuSeparator);
} }
menu->addAction(tr::lng_sponsored_hide_ads(tr::now), [=] { menu->addAction(tr::lng_sponsored_hide_ads(tr::now), [=] {
ShowPremiumPreviewBox(controller, PremiumPreview::NoAds); ShowPremiumPreviewBox(controller, PremiumFeature::NoAds);
}, &st::menuIconCancel); }, &st::menuIconCancel);
} }

View file

@ -362,7 +362,7 @@ ClickHandlerPtr HideSponsoredClickHandler() {
return std::make_shared<LambdaClickHandler>([=](ClickContext context) { return std::make_shared<LambdaClickHandler>([=](ClickContext context) {
const auto my = context.other.value<ClickHandlerContext>(); const auto my = context.other.value<ClickHandlerContext>();
if (const auto controller = my.sessionWindow.get()) { if (const auto controller = my.sessionWindow.get()) {
ShowPremiumPreviewBox(controller, PremiumPreview::NoAds); ShowPremiumPreviewBox(controller, PremiumFeature::NoAds);
} }
}); });
} }
@ -793,7 +793,7 @@ void ShowTrialTranscribesToast(int left, TimeId until) {
} }
const auto filter = [=](const auto &...) { const auto filter = [=](const auto &...) {
if (const auto controller = window->sessionController()) { if (const auto controller = window->sessionController()) {
ShowPremiumPreviewBox(controller, PremiumPreview::VoiceToText); ShowPremiumPreviewBox(controller, PremiumFeature::VoiceToText);
window->activate(); window->activate();
} }
return false; return false;

View file

@ -3031,7 +3031,7 @@ void Message::refreshReactions() {
= ExtractController(context)) { = ExtractController(context)) {
ShowPremiumPreviewBox( ShowPremiumPreviewBox(
controller, controller,
PremiumPreview::TagsForMessages); PremiumFeature::TagsForMessages);
} }
return; return;
} }

View file

@ -238,7 +238,7 @@ void StickerToast::showWithTitle(const QString &title) {
&& (i->second->flags & Data::StickersSetFlag::Installed)) { && (i->second->flags & Data::StickersSetFlag::Installed)) {
ShowPremiumPreviewBox( ShowPremiumPreviewBox(
_controller, _controller,
PremiumPreview::AnimatedEmoji); PremiumFeature::AnimatedEmoji);
} else { } else {
_controller->show(Box<StickerSetBox>( _controller->show(Box<StickerSetBox>(
_controller->uiShow(), _controller->uiShow(),

View file

@ -272,7 +272,7 @@ ClickHandlerPtr TranscribeButton::link() {
if (const auto controller = my.sessionWindow.get()) { if (const auto controller = my.sessionWindow.get()) {
ShowPremiumPreviewBox( ShowPremiumPreviewBox(
controller, controller,
PremiumPreview::VoiceToText); PremiumFeature::VoiceToText);
} }
} else { } else {
const auto max = session->api().transcribes().trialsMaxLengthMs(); const auto max = session->api().transcribes().trialsMaxLengthMs();

View file

@ -281,7 +281,7 @@ bool EmojiStatusPanel::filter(
if (_chooseFilter) { if (_chooseFilter) {
return _chooseFilter(chosenId); return _chooseFilter(chosenId);
} else if (chosenId && !controller->session().premium()) { } else if (chosenId && !controller->session().premium()) {
ShowPremiumPreviewBox(controller, PremiumPreview::EmojiStatus); ShowPremiumPreviewBox(controller, PremiumFeature::EmojiStatus);
return false; return false;
} }
return true; return true;

View file

@ -352,7 +352,7 @@ struct Feature {
data->requested = false; data->requested = false;
const auto usage = ChatHelpers::WindowUsage::PremiumPromo; const auto usage = ChatHelpers::WindowUsage::PremiumPromo;
if (const auto window = show->resolveWindow(usage)) { if (const auto window = show->resolveWindow(usage)) {
ShowPremiumPreviewBox(window, PremiumPreview::Stories); ShowPremiumPreviewBox(window, PremiumFeature::Stories);
window->window().activate(); window->window().activate();
} }
} else if (now.mode.cooldownTill > now.now) { } else if (now.mode.cooldownTill > now.now) {

View file

@ -1254,7 +1254,7 @@ void OverlayWidget::showPremiumDownloadPromo() {
const auto filter = [=](const auto &...) { const auto filter = [=](const auto &...) {
const auto usage = ChatHelpers::WindowUsage::PremiumPromo; const auto usage = ChatHelpers::WindowUsage::PremiumPromo;
if (const auto window = uiShow()->resolveWindow(usage)) { if (const auto window = uiShow()->resolveWindow(usage)) {
ShowPremiumPreviewBox(window, PremiumPreview::Stories); ShowPremiumPreviewBox(window, PremiumFeature::Stories);
window->window().activate(); window->window().activate();
} }
return false; return false;

View file

@ -53,7 +53,7 @@ struct Entry {
const style::icon *icon; const style::icon *icon;
rpl::producer<QString> title; rpl::producer<QString> title;
rpl::producer<QString> description; rpl::producer<QString> description;
BusinessFeature feature = BusinessFeature::Location; PremiumFeature feature = PremiumFeature::BusinessLocation;
}; };
using Order = std::vector<QString>; using Order = std::vector<QString>;
@ -77,7 +77,7 @@ using Order = std::vector<QString>;
&st::settingsBusinessIconLocation, &st::settingsBusinessIconLocation,
tr::lng_business_subtitle_location(), tr::lng_business_subtitle_location(),
tr::lng_business_about_location(), tr::lng_business_about_location(),
BusinessFeature::Location, PremiumFeature::BusinessLocation,
}, },
}, },
{ {
@ -86,7 +86,7 @@ using Order = std::vector<QString>;
&st::settingsBusinessIconHours, &st::settingsBusinessIconHours,
tr::lng_business_subtitle_opening_hours(), tr::lng_business_subtitle_opening_hours(),
tr::lng_business_about_opening_hours(), tr::lng_business_about_opening_hours(),
BusinessFeature::OpeningHours, PremiumFeature::BusinessHours,
}, },
}, },
{ {
@ -95,7 +95,7 @@ using Order = std::vector<QString>;
&st::settingsBusinessIconReplies, &st::settingsBusinessIconReplies,
tr::lng_business_subtitle_quick_replies(), tr::lng_business_subtitle_quick_replies(),
tr::lng_business_about_quick_replies(), tr::lng_business_about_quick_replies(),
BusinessFeature::QuickReplies, PremiumFeature::QuickReplies,
}, },
}, },
{ {
@ -104,7 +104,7 @@ using Order = std::vector<QString>;
&st::settingsBusinessIconGreeting, &st::settingsBusinessIconGreeting,
tr::lng_business_subtitle_greeting_messages(), tr::lng_business_subtitle_greeting_messages(),
tr::lng_business_about_greeting_messages(), tr::lng_business_about_greeting_messages(),
BusinessFeature::GreetingMessages, PremiumFeature::GreetingMessage,
}, },
}, },
{ {
@ -113,7 +113,7 @@ using Order = std::vector<QString>;
&st::settingsBusinessIconAway, &st::settingsBusinessIconAway,
tr::lng_business_subtitle_away_messages(), tr::lng_business_subtitle_away_messages(),
tr::lng_business_about_away_messages(), tr::lng_business_about_away_messages(),
BusinessFeature::AwayMessages, PremiumFeature::AwayMessage,
}, },
}, },
{ {
@ -122,7 +122,7 @@ using Order = std::vector<QString>;
&st::settingsBusinessIconChatbots, &st::settingsBusinessIconChatbots,
tr::lng_business_subtitle_chatbots(), tr::lng_business_subtitle_chatbots(),
tr::lng_business_about_chatbots(), tr::lng_business_about_chatbots(),
BusinessFeature::Chatbots, PremiumFeature::BusinessBots,
}, },
}, },
}; };
@ -131,7 +131,7 @@ using Order = std::vector<QString>;
void AddBusinessSummary( void AddBusinessSummary(
not_null<Ui::VerticalLayout*> content, not_null<Ui::VerticalLayout*> content,
not_null<Window::SessionController*> controller, not_null<Window::SessionController*> controller,
Fn<void(BusinessFeature)> buttonCallback) { Fn<void(PremiumFeature)> buttonCallback) {
const auto &stDefault = st::settingsButton; const auto &stDefault = st::settingsButton;
const auto &stLabel = st::defaultFlatLabel; const auto &stLabel = st::defaultFlatLabel;
const auto iconSize = st::settingsPremiumIconDouble.size(); const auto iconSize = st::settingsPremiumIconDouble.size();
@ -359,15 +359,22 @@ void Business::setupContent() {
Ui::AddSkip(content, st::settingsFromFileTop); Ui::AddSkip(content, st::settingsFromFileTop);
AddBusinessSummary(content, _controller, [=](BusinessFeature feature) { AddBusinessSummary(content, _controller, [=](PremiumFeature feature) {
if (!_controller->session().premium()) {
_setPaused(true);
const auto hidden = crl::guard(this, [=] { _setPaused(false); });
ShowPremiumPreviewToBuy(_controller, feature, hidden);
return;
}
showOther([&] { showOther([&] {
switch (feature) { switch (feature) {
case BusinessFeature::AwayMessages: return AwayMessageId(); case PremiumFeature::AwayMessage: return AwayMessageId();
case BusinessFeature::OpeningHours: return WorkingHoursId(); case PremiumFeature::BusinessHours: return WorkingHoursId();
case BusinessFeature::Location: return LocationId(); case PremiumFeature::BusinessLocation: return LocationId();
case BusinessFeature::GreetingMessages: return GreetingId(); case PremiumFeature::GreetingMessage: return GreetingId();
case BusinessFeature::QuickReplies: return QuickRepliesId(); case PremiumFeature::QuickReplies: return QuickRepliesId();
case BusinessFeature::Chatbots: return ChatbotsId(); case PremiumFeature::BusinessBots: return ChatbotsId();
} }
Unexpected("Feature in Business::setupContent."); Unexpected("Feature in Business::setupContent.");
}()); }());
@ -591,7 +598,7 @@ void ShowBusiness(not_null<Window::SessionController*> controller) {
controller->showSettings(Settings::BusinessId()); controller->showSettings(Settings::BusinessId());
} }
std::vector<BusinessFeature> BusinessFeaturesOrder( std::vector<PremiumFeature> BusinessFeaturesOrder(
not_null<::Main::Session*> session) { not_null<::Main::Session*> session) {
const auto mtpOrder = session->account().appConfig().get<Order>( const auto mtpOrder = session->account().appConfig().get<Order>(
"business_promo_order", "business_promo_order",
@ -600,21 +607,21 @@ std::vector<BusinessFeature> BusinessFeaturesOrder(
mtpOrder mtpOrder
) | ranges::views::transform([](const QString &s) { ) | ranges::views::transform([](const QString &s) {
if (s == u"greeting_message"_q) { if (s == u"greeting_message"_q) {
return BusinessFeature::GreetingMessages; return PremiumFeature::GreetingMessage;
} else if (s == u"away_message"_q) { } else if (s == u"away_message"_q) {
return BusinessFeature::AwayMessages; return PremiumFeature::AwayMessage;
} else if (s == u"quick_replies"_q) { } else if (s == u"quick_replies"_q) {
return BusinessFeature::QuickReplies; return PremiumFeature::QuickReplies;
} else if (s == u"business_hours"_q) { } else if (s == u"business_hours"_q) {
return BusinessFeature::OpeningHours; return PremiumFeature::BusinessHours;
} else if (s == u"business_location"_q) { } else if (s == u"business_location"_q) {
return BusinessFeature::Location; return PremiumFeature::BusinessLocation;
} else if (s == u"business_bots"_q) { } else if (s == u"business_bots"_q) {
return BusinessFeature::Chatbots; return PremiumFeature::BusinessBots;
} }
return BusinessFeature::kCount; return PremiumFeature::kCount;
}) | ranges::views::filter([](BusinessFeature feature) { }) | ranges::views::filter([](PremiumFeature feature) {
return (feature != BusinessFeature::kCount); return (feature != PremiumFeature::kCount);
}) | ranges::to_vector; }) | ranges::to_vector;
} }

View file

@ -9,6 +9,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "settings/settings_type.h" #include "settings/settings_type.h"
enum class PremiumFeature;
namespace Main { namespace Main {
class Session; class Session;
} // namespace Main } // namespace Main
@ -19,22 +21,11 @@ class SessionController;
namespace Settings { namespace Settings {
enum class BusinessFeature {
Location,
OpeningHours,
QuickReplies,
GreetingMessages,
AwayMessages,
Chatbots,
kCount,
};
[[nodiscard]] Type BusinessId(); [[nodiscard]] Type BusinessId();
void ShowBusiness(not_null<Window::SessionController*> controller); void ShowBusiness(not_null<Window::SessionController*> controller);
[[nodiscard]] std::vector<BusinessFeature> BusinessFeaturesOrder( [[nodiscard]] std::vector<PremiumFeature> BusinessFeaturesOrder(
not_null<::Main::Session*> session); not_null<::Main::Session*> session);
} // namespace Settings } // namespace Settings

View file

@ -169,7 +169,7 @@ struct Entry {
const style::icon *icon; const style::icon *icon;
rpl::producer<QString> title; rpl::producer<QString> title;
rpl::producer<QString> description; rpl::producer<QString> description;
PremiumPreview section = PremiumPreview::DoubleLimits; PremiumFeature section = PremiumFeature::DoubleLimits;
bool newBadge = false; bool newBadge = false;
}; };
@ -209,7 +209,7 @@ using Order = std::vector<QString>;
&st::settingsPremiumIconTags, &st::settingsPremiumIconTags,
tr::lng_premium_summary_subtitle_tags_for_messages(), tr::lng_premium_summary_subtitle_tags_for_messages(),
tr::lng_premium_summary_about_tags_for_messages(), tr::lng_premium_summary_about_tags_for_messages(),
PremiumPreview::TagsForMessages, PremiumFeature::TagsForMessages,
true, true,
}, },
}, },
@ -219,7 +219,7 @@ using Order = std::vector<QString>;
&st::settingsPremiumIconLastSeen, &st::settingsPremiumIconLastSeen,
tr::lng_premium_summary_subtitle_last_seen(), tr::lng_premium_summary_subtitle_last_seen(),
tr::lng_premium_summary_about_last_seen(), tr::lng_premium_summary_about_last_seen(),
PremiumPreview::LastSeen, PremiumFeature::LastSeen,
true, true,
}, },
}, },
@ -229,7 +229,7 @@ using Order = std::vector<QString>;
&st::settingsPremiumIconPrivacy, &st::settingsPremiumIconPrivacy,
tr::lng_premium_summary_subtitle_message_privacy(), tr::lng_premium_summary_subtitle_message_privacy(),
tr::lng_premium_summary_about_message_privacy(), tr::lng_premium_summary_about_message_privacy(),
PremiumPreview::MessagePrivacy, PremiumFeature::MessagePrivacy,
true, true,
}, },
}, },
@ -239,7 +239,7 @@ using Order = std::vector<QString>;
&st::settingsPremiumIconWallpapers, &st::settingsPremiumIconWallpapers,
tr::lng_premium_summary_subtitle_wallpapers(), tr::lng_premium_summary_subtitle_wallpapers(),
tr::lng_premium_summary_about_wallpapers(), tr::lng_premium_summary_about_wallpapers(),
PremiumPreview::Wallpapers, PremiumFeature::Wallpapers,
}, },
}, },
{ {
@ -248,7 +248,7 @@ using Order = std::vector<QString>;
&st::settingsPremiumIconStories, &st::settingsPremiumIconStories,
tr::lng_premium_summary_subtitle_stories(), tr::lng_premium_summary_subtitle_stories(),
tr::lng_premium_summary_about_stories(), tr::lng_premium_summary_about_stories(),
PremiumPreview::Stories, PremiumFeature::Stories,
}, },
}, },
{ {
@ -257,7 +257,7 @@ using Order = std::vector<QString>;
&st::settingsPremiumIconDouble, &st::settingsPremiumIconDouble,
tr::lng_premium_summary_subtitle_double_limits(), tr::lng_premium_summary_subtitle_double_limits(),
tr::lng_premium_summary_about_double_limits(), tr::lng_premium_summary_about_double_limits(),
PremiumPreview::DoubleLimits, PremiumFeature::DoubleLimits,
}, },
}, },
{ {
@ -266,7 +266,7 @@ using Order = std::vector<QString>;
&st::settingsPremiumIconFiles, &st::settingsPremiumIconFiles,
tr::lng_premium_summary_subtitle_more_upload(), tr::lng_premium_summary_subtitle_more_upload(),
tr::lng_premium_summary_about_more_upload(), tr::lng_premium_summary_about_more_upload(),
PremiumPreview::MoreUpload, PremiumFeature::MoreUpload,
}, },
}, },
{ {
@ -275,7 +275,7 @@ using Order = std::vector<QString>;
&st::settingsPremiumIconSpeed, &st::settingsPremiumIconSpeed,
tr::lng_premium_summary_subtitle_faster_download(), tr::lng_premium_summary_subtitle_faster_download(),
tr::lng_premium_summary_about_faster_download(), tr::lng_premium_summary_about_faster_download(),
PremiumPreview::FasterDownload, PremiumFeature::FasterDownload,
}, },
}, },
{ {
@ -284,7 +284,7 @@ using Order = std::vector<QString>;
&st::settingsPremiumIconVoice, &st::settingsPremiumIconVoice,
tr::lng_premium_summary_subtitle_voice_to_text(), tr::lng_premium_summary_subtitle_voice_to_text(),
tr::lng_premium_summary_about_voice_to_text(), tr::lng_premium_summary_about_voice_to_text(),
PremiumPreview::VoiceToText, PremiumFeature::VoiceToText,
}, },
}, },
{ {
@ -293,7 +293,7 @@ using Order = std::vector<QString>;
&st::settingsPremiumIconChannelsOff, &st::settingsPremiumIconChannelsOff,
tr::lng_premium_summary_subtitle_no_ads(), tr::lng_premium_summary_subtitle_no_ads(),
tr::lng_premium_summary_about_no_ads(), tr::lng_premium_summary_about_no_ads(),
PremiumPreview::NoAds, PremiumFeature::NoAds,
}, },
}, },
{ {
@ -302,7 +302,7 @@ using Order = std::vector<QString>;
&st::settingsPremiumIconStatus, &st::settingsPremiumIconStatus,
tr::lng_premium_summary_subtitle_emoji_status(), tr::lng_premium_summary_subtitle_emoji_status(),
tr::lng_premium_summary_about_emoji_status(), tr::lng_premium_summary_about_emoji_status(),
PremiumPreview::EmojiStatus, PremiumFeature::EmojiStatus,
}, },
}, },
{ {
@ -311,7 +311,7 @@ using Order = std::vector<QString>;
&st::settingsPremiumIconLike, &st::settingsPremiumIconLike,
tr::lng_premium_summary_subtitle_infinite_reactions(), tr::lng_premium_summary_subtitle_infinite_reactions(),
tr::lng_premium_summary_about_infinite_reactions(), tr::lng_premium_summary_about_infinite_reactions(),
PremiumPreview::InfiniteReactions, PremiumFeature::InfiniteReactions,
}, },
}, },
{ {
@ -320,7 +320,7 @@ using Order = std::vector<QString>;
&st::settingsIconStickers, &st::settingsIconStickers,
tr::lng_premium_summary_subtitle_premium_stickers(), tr::lng_premium_summary_subtitle_premium_stickers(),
tr::lng_premium_summary_about_premium_stickers(), tr::lng_premium_summary_about_premium_stickers(),
PremiumPreview::Stickers, PremiumFeature::Stickers,
}, },
}, },
{ {
@ -329,7 +329,7 @@ using Order = std::vector<QString>;
&st::settingsIconEmoji, &st::settingsIconEmoji,
tr::lng_premium_summary_subtitle_animated_emoji(), tr::lng_premium_summary_subtitle_animated_emoji(),
tr::lng_premium_summary_about_animated_emoji(), tr::lng_premium_summary_about_animated_emoji(),
PremiumPreview::AnimatedEmoji, PremiumFeature::AnimatedEmoji,
}, },
}, },
{ {
@ -338,7 +338,7 @@ using Order = std::vector<QString>;
&st::settingsIconChat, &st::settingsIconChat,
tr::lng_premium_summary_subtitle_advanced_chat_management(), tr::lng_premium_summary_subtitle_advanced_chat_management(),
tr::lng_premium_summary_about_advanced_chat_management(), tr::lng_premium_summary_about_advanced_chat_management(),
PremiumPreview::AdvancedChatManagement, PremiumFeature::AdvancedChatManagement,
}, },
}, },
{ {
@ -347,7 +347,7 @@ using Order = std::vector<QString>;
&st::settingsPremiumIconStar, &st::settingsPremiumIconStar,
tr::lng_premium_summary_subtitle_profile_badge(), tr::lng_premium_summary_subtitle_profile_badge(),
tr::lng_premium_summary_about_profile_badge(), tr::lng_premium_summary_about_profile_badge(),
PremiumPreview::ProfileBadge, PremiumFeature::ProfileBadge,
}, },
}, },
{ {
@ -356,7 +356,7 @@ using Order = std::vector<QString>;
&st::settingsPremiumIconPlay, &st::settingsPremiumIconPlay,
tr::lng_premium_summary_subtitle_animated_userpics(), tr::lng_premium_summary_subtitle_animated_userpics(),
tr::lng_premium_summary_about_animated_userpics(), tr::lng_premium_summary_about_animated_userpics(),
PremiumPreview::AnimatedUserpics, PremiumFeature::AnimatedUserpics,
}, },
}, },
{ {
@ -365,7 +365,7 @@ using Order = std::vector<QString>;
&st::settingsPremiumIconTranslations, &st::settingsPremiumIconTranslations,
tr::lng_premium_summary_subtitle_translation(), tr::lng_premium_summary_subtitle_translation(),
tr::lng_premium_summary_about_translation(), tr::lng_premium_summary_about_translation(),
PremiumPreview::RealTimeTranslation, PremiumFeature::RealTimeTranslation,
}, },
}, },
{ {
@ -374,7 +374,7 @@ using Order = std::vector<QString>;
&st::settingsPremiumIconPlay, AssertIsDebug() &st::settingsPremiumIconPlay, AssertIsDebug()
tr::lng_premium_summary_subtitle_business(), tr::lng_premium_summary_subtitle_business(),
tr::lng_premium_summary_about_business(), tr::lng_premium_summary_about_business(),
PremiumPreview::Business, PremiumFeature::Business,
true, true,
}, },
}, },
@ -971,7 +971,7 @@ void Premium::setupContent() {
setupSubscriptionOptions(content); setupSubscriptionOptions(content);
auto buttonCallback = [=](PremiumPreview section) { auto buttonCallback = [=](PremiumFeature section) {
_setPaused(true); _setPaused(true);
const auto hidden = crl::guard(this, [=] { _setPaused(false); }); const auto hidden = crl::guard(this, [=] { _setPaused(false); });
@ -1350,7 +1350,7 @@ void StartPremiumPayment(
} }
} }
QString LookupPremiumRef(PremiumPreview section) { QString LookupPremiumRef(PremiumFeature section) {
for (const auto &[ref, entry] : EntryMap()) { for (const auto &[ref, entry] : EntryMap()) {
if (entry.section == section) { if (entry.section == section) {
return ref; return ref;
@ -1537,7 +1537,7 @@ not_null<Ui::GradientButton*> CreateSubscribeButton(
return result; return result;
} }
std::vector<PremiumPreview> PremiumPreviewOrder( std::vector<PremiumFeature> PremiumFeaturesOrder(
not_null<Main::Session*> session) { not_null<Main::Session*> session) {
const auto mtpOrder = session->account().appConfig().get<Order>( const auto mtpOrder = session->account().appConfig().get<Order>(
"premium_promo_order", "premium_promo_order",
@ -1546,41 +1546,41 @@ std::vector<PremiumPreview> PremiumPreviewOrder(
mtpOrder mtpOrder
) | ranges::views::transform([](const QString &s) { ) | ranges::views::transform([](const QString &s) {
if (s == u"more_upload"_q) { if (s == u"more_upload"_q) {
return PremiumPreview::MoreUpload; return PremiumFeature::MoreUpload;
} else if (s == u"faster_download"_q) { } else if (s == u"faster_download"_q) {
return PremiumPreview::FasterDownload; return PremiumFeature::FasterDownload;
} else if (s == u"voice_to_text"_q) { } else if (s == u"voice_to_text"_q) {
return PremiumPreview::VoiceToText; return PremiumFeature::VoiceToText;
} else if (s == u"no_ads"_q) { } else if (s == u"no_ads"_q) {
return PremiumPreview::NoAds; return PremiumFeature::NoAds;
} else if (s == u"emoji_status"_q) { } else if (s == u"emoji_status"_q) {
return PremiumPreview::EmojiStatus; return PremiumFeature::EmojiStatus;
} else if (s == u"infinite_reactions"_q) { } else if (s == u"infinite_reactions"_q) {
return PremiumPreview::InfiniteReactions; return PremiumFeature::InfiniteReactions;
} else if (s == u"saved_tags"_q) { } else if (s == u"saved_tags"_q) {
return PremiumPreview::TagsForMessages; return PremiumFeature::TagsForMessages;
} else if (s == u"last_seen"_q) { } else if (s == u"last_seen"_q) {
return PremiumPreview::LastSeen; return PremiumFeature::LastSeen;
} else if (s == u"message_privacy"_q) { } else if (s == u"message_privacy"_q) {
return PremiumPreview::MessagePrivacy; return PremiumFeature::MessagePrivacy;
} else if (s == u"premium_stickers"_q) { } else if (s == u"premium_stickers"_q) {
return PremiumPreview::Stickers; return PremiumFeature::Stickers;
} else if (s == u"animated_emoji"_q) { } else if (s == u"animated_emoji"_q) {
return PremiumPreview::AnimatedEmoji; return PremiumFeature::AnimatedEmoji;
} else if (s == u"advanced_chat_management"_q) { } else if (s == u"advanced_chat_management"_q) {
return PremiumPreview::AdvancedChatManagement; return PremiumFeature::AdvancedChatManagement;
} else if (s == u"profile_badge"_q) { } else if (s == u"profile_badge"_q) {
return PremiumPreview::ProfileBadge; return PremiumFeature::ProfileBadge;
} else if (s == u"animated_userpics"_q) { } else if (s == u"animated_userpics"_q) {
return PremiumPreview::AnimatedUserpics; return PremiumFeature::AnimatedUserpics;
} else if (s == u"translations"_q) { } else if (s == u"translations"_q) {
return PremiumPreview::RealTimeTranslation; return PremiumFeature::RealTimeTranslation;
} else if (s == u"wallpapers"_q) { } else if (s == u"wallpapers"_q) {
return PremiumPreview::Wallpapers; return PremiumFeature::Wallpapers;
} }
return PremiumPreview::kCount; return PremiumFeature::kCount;
}) | ranges::views::filter([](PremiumPreview type) { }) | ranges::views::filter([](PremiumFeature type) {
return (type != PremiumPreview::kCount); return (type != PremiumFeature::kCount);
}) | ranges::to_vector; }) | ranges::to_vector;
} }
@ -1588,7 +1588,7 @@ void AddSummaryPremium(
not_null<Ui::VerticalLayout*> content, not_null<Ui::VerticalLayout*> content,
not_null<Window::SessionController*> controller, not_null<Window::SessionController*> controller,
const QString &ref, const QString &ref,
Fn<void(PremiumPreview)> buttonCallback) { Fn<void(PremiumFeature)> buttonCallback) {
const auto &stDefault = st::settingsButton; const auto &stDefault = st::settingsButton;
const auto &stLabel = st::defaultFlatLabel; const auto &stLabel = st::defaultFlatLabel;
const auto iconSize = st::settingsPremiumIconDouble.size(); const auto iconSize = st::settingsPremiumIconDouble.size();

View file

@ -9,7 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "settings/settings_type.h" #include "settings/settings_type.h"
enum class PremiumPreview; enum class PremiumFeature;
namespace style { namespace style {
struct RoundButton; struct RoundButton;
@ -57,7 +57,7 @@ void StartPremiumPayment(
not_null<Window::SessionController*> controller, not_null<Window::SessionController*> controller,
const QString &ref); const QString &ref);
[[nodiscard]] QString LookupPremiumRef(PremiumPreview section); [[nodiscard]] QString LookupPremiumRef(PremiumFeature section);
void ShowPremiumPromoToast( void ShowPremiumPromoToast(
std::shared_ptr<ChatHelpers::Show> show, std::shared_ptr<ChatHelpers::Show> show,
@ -91,14 +91,14 @@ struct SubscribeButtonArgs final {
[[nodiscard]] not_null<Ui::GradientButton*> CreateSubscribeButton( [[nodiscard]] not_null<Ui::GradientButton*> CreateSubscribeButton(
SubscribeButtonArgs &&args); SubscribeButtonArgs &&args);
[[nodiscard]] std::vector<PremiumPreview> PremiumPreviewOrder( [[nodiscard]] std::vector<PremiumFeature> PremiumFeaturesOrder(
not_null<::Main::Session*> session); not_null<::Main::Session*> session);
void AddSummaryPremium( void AddSummaryPremium(
not_null<Ui::VerticalLayout*> content, not_null<Ui::VerticalLayout*> content,
not_null<Window::SessionController*> controller, not_null<Window::SessionController*> controller,
const QString &ref, const QString &ref,
Fn<void(PremiumPreview)> buttonCallback); Fn<void(PremiumFeature)> buttonCallback);
} // namespace Settings } // namespace Settings

View file

@ -529,7 +529,7 @@ bool ShowReactPremiumError(
if (controller->session().premium()) { if (controller->session().premium()) {
return false; return false;
} }
ShowPremiumPreviewBox(controller, PremiumPreview::TagsForMessages); ShowPremiumPreviewBox(controller, PremiumFeature::TagsForMessages);
return true; return true;
} else if (controller->session().premium() } else if (controller->session().premium()
|| ranges::contains(item->chosenReactions(), id) || ranges::contains(item->chosenReactions(), id)
@ -538,7 +538,7 @@ bool ShowReactPremiumError(
} else if (!id.custom()) { } else if (!id.custom()) {
return false; return false;
} }
ShowPremiumPreviewBox(controller, PremiumPreview::InfiniteReactions); ShowPremiumPreviewBox(controller, PremiumFeature::InfiniteReactions);
return true; return true;
} }

View file

@ -1031,7 +1031,7 @@ void MainMenu::chooseEmojiStatus() {
if (const auto widget = _badge->widget()) { if (const auto widget = _badge->widget()) {
_emojiStatusPanel->show(_controller, widget, _badge->sizeTag()); _emojiStatusPanel->show(_controller, widget, _badge->sizeTag());
} else { } else {
ShowPremiumPreviewBox(_controller, PremiumPreview::EmojiStatus); ShowPremiumPreviewBox(_controller, PremiumFeature::EmojiStatus);
} }
} }