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 {
ShowPremiumPreviewBox(
_controller->uiShow(),
PremiumPreview::Wallpapers);
PremiumFeature::Wallpapers);
}
});
const auto cancel = CreateChild<RoundButton>(

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -362,7 +362,7 @@ ClickHandlerPtr HideSponsoredClickHandler() {
return std::make_shared<LambdaClickHandler>([=](ClickContext context) {
const auto my = context.other.value<ClickHandlerContext>();
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 &...) {
if (const auto controller = window->sessionController()) {
ShowPremiumPreviewBox(controller, PremiumPreview::VoiceToText);
ShowPremiumPreviewBox(controller, PremiumFeature::VoiceToText);
window->activate();
}
return false;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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