From 23caae689bc0ad45c56a1b1080f2fac360480230 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 6 May 2022 19:13:25 +0400 Subject: [PATCH] Show new pins limit box. --- .../SourceFiles/boxes/premium_limits_box.cpp | 94 ++++++++++++------- .../SourceFiles/boxes/premium_limits_box.h | 3 + .../SourceFiles/window/window_peer_menu.cpp | 15 ++- 3 files changed, 70 insertions(+), 42 deletions(-) diff --git a/Telegram/SourceFiles/boxes/premium_limits_box.cpp b/Telegram/SourceFiles/boxes/premium_limits_box.cpp index 9fe4ad0ab7..7d3ad254eb 100644 --- a/Telegram/SourceFiles/boxes/premium_limits_box.cpp +++ b/Telegram/SourceFiles/boxes/premium_limits_box.cpp @@ -252,11 +252,13 @@ void SimpleLimitBox( not_null session, rpl::producer title, rpl::producer text, - bool premium) { + bool premium, + bool fixed = false) { box->setWidth(st::boxWideWidth); - const auto top = box->setPinnedToTopContent( - object_ptr(box)); + const auto top = fixed + ? box->setPinnedToTopContent(object_ptr(box)) + : box->verticalLayout(); top->add( object_ptr>( box, @@ -288,6 +290,42 @@ void SimpleLimitBox( } } +void SimplePinsLimitBox( + not_null box, + not_null session, + const QString &keyDefault, + int limitDefault, + const QString &keyPremium, + int limitPremium) { + const auto premium = session->user()->isPremium(); + + auto text = rpl::combine( + tr::lng_filter_pin_limit1( + lt_count, + rpl::single(Limit( + session, + (premium ? keyPremium : keyDefault), + premium ? limitPremium : limitDefault)), + Ui::Text::RichLangValue), + (premium + ? rpl::single(TextWithEntities()) + : tr::lng_filter_pin_limit2( + lt_count, + rpl::single(Limit(session, keyPremium, limitPremium)), + Ui::Text::RichLangValue)) + ) | rpl::map([](TextWithEntities &&a, TextWithEntities &&b) { + return b.text.isEmpty() + ? a + : a.append(QChar(' ')).append(std::move(b)); + }); + SimpleLimitBox( + box, + session, + tr::lng_filter_pin_limit_title(), + std::move(text), + premium); +} + } // namespace void ChannelsLimitBox( @@ -320,7 +358,8 @@ void ChannelsLimitBox( session, tr::lng_channels_limit_title(), std::move(text), - premium); + premium, + true); const auto delegate = box->lifetime().make_state(); const auto controller = box->lifetime().make_state( @@ -489,36 +528,23 @@ void FiltersLimitBox( void FilterPinsLimitBox( not_null box, not_null session) { - const auto premium = session->user()->isPremium(); - - auto text = rpl::combine( - tr::lng_filter_pin_limit1( - lt_count, - rpl::single(Limit( - session, - (premium - ? "dialog_filters_pinned_limit_premium" - : "dialog_filters_pinned_limit_default"), - premium ? 200 : 100)), - Ui::Text::RichLangValue), - (premium - ? rpl::single(TextWithEntities()) - : tr::lng_filter_pin_limit2( - lt_count, - rpl::single(Limit( - session, - "dialog_filters_pinned_limit_premium", - 200)), - Ui::Text::RichLangValue)) - ) | rpl::map([](TextWithEntities &&a, TextWithEntities &&b) { - return b.text.isEmpty() - ? a - : a.append(QChar(' ')).append(std::move(b)); - }); - SimpleLimitBox( + SimplePinsLimitBox( box, session, - tr::lng_filter_pin_limit_title(), - std::move(text), - premium); + "dialog_filters_pinned_limit_default", + 100, + "dialog_filters_pinned_limit_premium", + 200); +} + +void PinsLimitBox( + not_null box, + not_null session) { + SimplePinsLimitBox( + box, + session, + "dialogs_pinned_limit_default", + 5, + "dialogs_pinned_limit_premium", + 10); } diff --git a/Telegram/SourceFiles/boxes/premium_limits_box.h b/Telegram/SourceFiles/boxes/premium_limits_box.h index 423481a09f..fe93d3a351 100644 --- a/Telegram/SourceFiles/boxes/premium_limits_box.h +++ b/Telegram/SourceFiles/boxes/premium_limits_box.h @@ -28,3 +28,6 @@ void FiltersLimitBox( void FilterPinsLimitBox( not_null box, not_null session); +void PinsLimitBox( + not_null box, + not_null session); diff --git a/Telegram/SourceFiles/window/window_peer_menu.cpp b/Telegram/SourceFiles/window/window_peer_menu.cpp index 48ff572337..3b60dccc36 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.cpp +++ b/Telegram/SourceFiles/window/window_peer_menu.cpp @@ -19,6 +19,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "boxes/choose_filter_box.h" #include "boxes/create_poll_box.h" #include "boxes/pin_messages_box.h" +#include "boxes/premium_limits_box.h" #include "boxes/report_messages_box.h" #include "boxes/peers/add_bot_to_chat_box.h" #include "boxes/peers/add_participants_box.h" @@ -247,15 +248,13 @@ bool PinnedLimitReached( owner->setChatPinned(wasted, FilterId(), false); owner->setChatPinned(history, FilterId(), true); history->session().api().savePinnedOrder(folder); - } else { - const auto errorText = filterId - ? tr::lng_filters_error_pinned_max(tr::now) - : tr::lng_error_pinned_max( - tr::now, - lt_count, - owner->pinnedChatsLimit(folder)); + } else if (filterId) { controller->show( - Ui::MakeInformBox(errorText), + Box(FilterPinsLimitBox, &history->session()), + Ui::LayerOption::CloseOther); + } else { + controller->show( + Box(PinsLimitBox, &history->session()), Ui::LayerOption::CloseOther); } return true;