Added support for MTP order of entries in premium settings.

This commit is contained in:
23rd 2022-05-23 12:27:32 +03:00
parent 2a4faf22f6
commit 1eccb34f86
2 changed files with 140 additions and 45 deletions

View File

@ -1664,26 +1664,26 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_premium_summary_title" = "Telegram Premium";
"lng_premium_summary_top_about" = "Go **beyond the limits**, get **exclusive features** and support us by subscribing to **Telegram Premium**.";
"lng_premium_summary_subtitle1" = "Doubled Limits";
"lng_premium_summary_about1" = "Up to 1000 channels, 20 folders, 10 pins, 20 public links, 4 accounts and more.";
"lng_premium_summary_subtitle2" = "4Gb Upload Size";
"lng_premium_summary_about2" = "Increased upload size from 2Gb to 4Gb to per document, unlimited storage overall.";
"lng_premium_summary_subtitle3" = "Faster Download Speed";
"lng_premium_summary_about3" = "No more limits on the speed with which media and documents are downloaded.";
"lng_premium_summary_subtitle4" = "Voice-to-Text Conversion";
"lng_premium_summary_about4" = "Ability to read the transcript of any incoming voice message.";
"lng_premium_summary_subtitle5" = "No Ads";
"lng_premium_summary_about5" = "No more ads in public channels where Telegram sometimes shows ads.";
"lng_premium_summary_subtitle6" = "Unique Reactions";
"lng_premium_summary_about6" = "Additional animated reactions on messages available only to the Premium subscribers.";
"lng_premium_summary_subtitle7" = "Premium Stickers";
"lng_premium_summary_about7" = "Exclusive enlarged stickers featuring additional effects, updated monthly.";
"lng_premium_summary_subtitle8" = "Advanced Chat Management";
"lng_premium_summary_about8" = "Tools to set default folder, auto-archive and hide new chats from non-contacts.";
"lng_premium_summary_subtitle9" = "Profile Badge";
"lng_premium_summary_about9" = "A badge next to your name showing that you are helping support Telegram.";
"lng_premium_summary_subtitle10" = "Animated Profile Pictures";
"lng_premium_summary_about10" = "Video avatars animated in chat lists and chats to allow for additional self-expression.";
"lng_premium_summary_subtitle_double_limits" = "Doubled Limits";
"lng_premium_summary_about_double_limits" = "Up to 1000 channels, 20 folders, 10 pins, 20 public links, 4 accounts and more.";
"lng_premium_summary_subtitle_more_upload" = "4Gb Upload Size";
"lng_premium_summary_about_more_upload" = "Increased upload size from 2Gb to 4Gb to per document, unlimited storage overall.";
"lng_premium_summary_subtitle_faster_download" = "Faster Download Speed";
"lng_premium_summary_about_faster_download" = "No more limits on the speed with which media and documents are downloaded.";
"lng_premium_summary_subtitle_voice_to_text" = "Voice-to-Text Conversion";
"lng_premium_summary_about_voice_to_text" = "Ability to read the transcript of any incoming voice message.";
"lng_premium_summary_subtitle_no_ads" = "No Ads";
"lng_premium_summary_about_no_ads" = "No more ads in public channels where Telegram sometimes shows ads.";
"lng_premium_summary_subtitle_unique_reactions" = "Unique Reactions";
"lng_premium_summary_about_unique_reactions" = "Additional animated reactions on messages available only to the Premium subscribers.";
"lng_premium_summary_subtitle_premium_stickers" = "Premium Stickers";
"lng_premium_summary_about_premium_stickers" = "Exclusive enlarged stickers featuring additional effects, updated monthly.";
"lng_premium_summary_subtitle_advanced_chat_management" = "Advanced Chat Management";
"lng_premium_summary_about_advanced_chat_management" = "Tools to set default folder, auto-archive and hide new chats from non-contacts.";
"lng_premium_summary_subtitle_profile_badge" = "Profile Badge";
"lng_premium_summary_about_profile_badge" = "A badge next to your name showing that you are helping support Telegram.";
"lng_premium_summary_subtitle_animated_userpics" = "Animated Profile Pictures";
"lng_premium_summary_about_animated_userpics" = "Video avatars animated in chat lists and chats to allow for additional self-expression.";
"lng_premium_summary_bottom_subtitle" = "About Telegram Premium";
"lng_premium_summary_bottom_about" = "While the free version of Telegram already gives its users more than any other messaging application, **Telegram Premium** pushes its capabilities even further.\n\n**Telegram Premium** is a paid option, because most Premium Features require additional expenses from Telegram to third parties such as data center providers and server manufacturers. Contributions from **Telegram Premium** users allow us to cover such costs and also help Telegram stay free for everyone.";
"lng_premium_summary_button" = "Subscribe for {cost} per month.";

View File

@ -47,6 +47,97 @@ using SectionCustomTopBarData = Info::Settings::SectionCustomTopBarData;
constexpr auto kBodyAnimationPart = 0.90;
constexpr auto kTitleAnimationPart = 0.15;
struct Entry {
const style::icon *icon;
rpl::producer<QString> title;
rpl::producer<QString> description;
};
[[nodiscard]] base::flat_map<QString, Entry> EntryMap() {
return base::flat_map<QString, Entry>{
{
QString("double_limits"),
Entry{
&st::settingsPremiumIconDouble,
tr::lng_premium_summary_subtitle_double_limits(),
tr::lng_premium_summary_about_double_limits(),
},
},
{
QString("more_upload"),
Entry{
&st::settingsPremiumIconFiles,
tr::lng_premium_summary_subtitle_more_upload(),
tr::lng_premium_summary_about_more_upload(),
},
},
{
QString("faster_download"),
Entry{
&st::settingsPremiumIconSpeed,
tr::lng_premium_summary_subtitle_faster_download(),
tr::lng_premium_summary_about_faster_download(),
},
},
{
QString("voice_to_text"),
Entry{
&st::settingsPremiumIconVoice,
tr::lng_premium_summary_subtitle_voice_to_text(),
tr::lng_premium_summary_about_voice_to_text(),
},
},
{
QString("no_ads"),
Entry{
&st::settingsPremiumIconChannelsOff,
tr::lng_premium_summary_subtitle_no_ads(),
tr::lng_premium_summary_about_no_ads(),
},
},
{
QString("unique_reactions"),
Entry{
&st::settingsPremiumIconLike,
tr::lng_premium_summary_subtitle_unique_reactions(),
tr::lng_premium_summary_about_unique_reactions(),
},
},
{
QString("premium_stickers"),
Entry{
&st::settingsIconStickers,
tr::lng_premium_summary_subtitle_premium_stickers(),
tr::lng_premium_summary_about_premium_stickers(),
},
},
{
QString("advanced_chat_management"),
Entry{
&st::settingsIconChat,
tr::lng_premium_summary_subtitle_advanced_chat_management(),
tr::lng_premium_summary_about_advanced_chat_management(),
},
},
{
QString("profile_badge"),
Entry{
&st::settingsPremiumIconStar,
tr::lng_premium_summary_subtitle_profile_badge(),
tr::lng_premium_summary_about_profile_badge(),
},
},
{
QString("animated_userpics"),
Entry{
&st::settingsPremiumIconPlay,
tr::lng_premium_summary_subtitle_animated_userpics(),
tr::lng_premium_summary_about_animated_userpics(),
},
},
};
}
class TopBar final : public Ui::RpWidget {
public:
TopBar(not_null<QWidget*> parent);
@ -240,21 +331,9 @@ void Premium::setupContent() {
const auto &stLabel = st::defaultFlatLabel;
const auto iconSize = st::settingsPremiumIconDouble.size();
const auto icons = std::array<const style::icon *, 10>{ {
&st::settingsPremiumIconDouble,
&st::settingsPremiumIconFiles,
&st::settingsPremiumIconSpeed,
&st::settingsPremiumIconVoice,
&st::settingsPremiumIconChannelsOff,
&st::settingsPremiumIconLike,
&st::settingsIconStickers,
&st::settingsIconChat,
&st::settingsPremiumIconStar,
&st::settingsPremiumIconPlay,
} };
auto entryMap = EntryMap();
auto iconContainers = std::vector<Ui::AbstractButton*>();
iconContainers.reserve(int(icons.size()));
iconContainers.reserve(int(entryMap.size()));
auto titlePadding = st.padding;
titlePadding.setBottom(0);
@ -295,17 +374,33 @@ void Premium::setupContent() {
iconContainers.push_back(dummy);
};
using namespace tr;
addRow(lng_premium_summary_subtitle1(), lng_premium_summary_about1());
addRow(lng_premium_summary_subtitle2(), lng_premium_summary_about2());
addRow(lng_premium_summary_subtitle3(), lng_premium_summary_about3());
addRow(lng_premium_summary_subtitle4(), lng_premium_summary_about4());
addRow(lng_premium_summary_subtitle5(), lng_premium_summary_about5());
addRow(lng_premium_summary_subtitle6(), lng_premium_summary_about6());
addRow(lng_premium_summary_subtitle7(), lng_premium_summary_about7());
addRow(lng_premium_summary_subtitle8(), lng_premium_summary_about8());
addRow(lng_premium_summary_subtitle9(), lng_premium_summary_about9());
addRow(lng_premium_summary_subtitle10(), lng_premium_summary_about10());
auto icons = std::vector<const style::icon *>();
icons.reserve(int(entryMap.size()));
{
using Order = std::vector<QString>;
const auto &account = _controller->session().account();
const auto mtpOrder = account.appConfig().get<Order>(
"premium_promo_order",
Order());
const auto processEntry = [&](Entry &entry) {
icons.push_back(entry.icon);
addRow(base::take(entry.title), base::take(entry.description));
};
if (!mtpOrder.empty()) {
for (const auto &key : mtpOrder) {
auto it = entryMap.find(key);
if (it == end(entryMap)) {
continue;
}
processEntry(it->second);
}
} else {
for (auto &entry : ranges::views::values(entryMap)) {
processEntry(entry);
}
}
}
content->resizeToWidth(content->height());