diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 9730225d2..38577fef1 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -189,6 +189,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_filter_chats_limit_title" = "Limit Reached"; "lng_filter_chats_limit1#one" = "Sorry, you can't add more than **{count}** chat to a folder."; "lng_filter_chats_limit1#other" = "Sorry, you can't add more than **{count}** chats to a folder."; +"lng_filter_chats_exlude_limit1#one" = "Sorry, you can't exlude more than **{count}** chat from a folder."; +"lng_filter_chats_exlude_limit1#other" = "Sorry, you can't exlude more than **{count}** chats from a folder."; "lng_filter_chats_limit2#one" = "You can increase this limit to **{count}** by upgrading to **Telegram Premium**."; "lng_filter_chats_limit2#other" = "You can increase this limit to **{count}** by upgrading to **Telegram Premium**."; diff --git a/Telegram/SourceFiles/api/api_chat_filters.cpp b/Telegram/SourceFiles/api/api_chat_filters.cpp index 2b19deac3..c045263ae 100644 --- a/Telegram/SourceFiles/api/api_chat_filters.cpp +++ b/Telegram/SourceFiles/api/api_chat_filters.cpp @@ -510,7 +510,7 @@ void ShowImportError( if (error == u"CHANNELS_TOO_MUCH"_q) { window->show(Box(ChannelsLimitBox, session)); } else if (error == u"FILTER_INCLUDE_TOO_MUCH"_q) { - window->show(Box(FilterChatsLimitBox, session, count)); + window->show(Box(FilterChatsLimitBox, session, count, true)); } else if (error == u"CHATLISTS_TOO_MUCH"_q) { window->show(Box(ShareableFiltersLimitBox, session)); } else { diff --git a/Telegram/SourceFiles/boxes/choose_filter_box.cpp b/Telegram/SourceFiles/boxes/choose_filter_box.cpp index ef6b8ecb2..416b30ff1 100644 --- a/Telegram/SourceFiles/boxes/choose_filter_box.cpp +++ b/Telegram/SourceFiles/boxes/choose_filter_box.cpp @@ -164,7 +164,8 @@ void FillChooseFilterMenu( controller->show(Box( FilterChatsLimitBox, &controller->session(), - r.count)); + r.count, + true)); } else if (validator.canAdd()) { validator.add(id); } diff --git a/Telegram/SourceFiles/boxes/filters/edit_filter_box.cpp b/Telegram/SourceFiles/boxes/filters/edit_filter_box.cpp index e135fd691..724dd7c47 100644 --- a/Telegram/SourceFiles/boxes/filters/edit_filter_box.cpp +++ b/Telegram/SourceFiles/boxes/filters/edit_filter_box.cpp @@ -336,14 +336,18 @@ void EditExceptions( Fn refresh) { const auto include = (options & Flag::Contacts) != Flags(0); const auto rules = data->current(); + const auto session = &window->session(); auto controller = std::make_unique( - &window->session(), + session, (include ? tr::lng_filters_include_title() : tr::lng_filters_exclude_title()), options, rules.flags() & options, - include ? rules.always() : rules.never()); + include ? rules.always() : rules.never(), + [=](int count) { + return Box(FilterChatsLimitBox, session, count, include); + }); const auto rawController = controller.get(); auto initBox = [=](not_null box) { box->setCloseByOutsideClick(false); diff --git a/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.cpp b/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.cpp index 6cce77d60..61e937dfe 100644 --- a/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.cpp +++ b/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.cpp @@ -7,9 +7,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "boxes/filters/edit_filter_chats_list.h" +#include "data/data_premium_limits.h" #include "history/history.h" #include "window/window_session_controller.h" -#include "boxes/premium_limits_box.h" #include "lang/lang_keys.h" #include "ui/widgets/labels.h" #include "ui/wrap/vertical_layout.h" @@ -99,22 +99,6 @@ private: return PeerId(FakeChatId(static_cast(flag))).value; } -[[nodiscard]] int Limit( - not_null session, - const QString &key, - int fallback) { - return session->account().appConfig().get(key, fallback); -} - -[[nodiscard]] int Limit(not_null session) { - const auto premium = session->premium(); - return Limit(session, - (premium - ? "dialog_filters_chats_limit_premium" - : "dialog_filters_chats_limit_default"), - premium ? 200 : 100); -} - TypeRow::TypeRow(Flag flag) : PeerListRow(TypeId(flag)) { } @@ -338,15 +322,18 @@ EditFilterChatsListController::EditFilterChatsListController( rpl::producer title, Flags options, Flags selected, - const base::flat_set> &peers) + const base::flat_set> &peers, + LimitBoxFactory limitBox) : ChatsListBoxController(session) , _session(session) +, _limitBox(std::move(limitBox)) , _title(std::move(title)) , _peers(peers) , _options(options & ~Flag::Chatlist) , _selected(selected) -, _limit(Limit(session)) +, _limit(Data::PremiumLimits(session).dialogFiltersChatsCurrent()) , _chatlist(options & Flag::Chatlist) { + Expects(_limitBox != nullptr); } Main::Session &EditFilterChatsListController::session() const { @@ -375,8 +362,7 @@ void EditFilterChatsListController::rowClicked(not_null row) { delegate()->peerListSetRowChecked(row, !row->checked()); updateTitle(); } else { - delegate()->peerListShowBox( - Box(FilterChatsLimitBox, _session, count)); + delegate()->peerListShowBox(_limitBox(count)); } } diff --git a/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.h b/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.h index ce4583184..a9dfd3fa2 100644 --- a/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.h +++ b/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.h @@ -43,13 +43,15 @@ class EditFilterChatsListController final : public ChatsListBoxController { public: using Flag = Data::ChatFilter::Flag; using Flags = Data::ChatFilter::Flags; + using LimitBoxFactory = Fn(int)>; EditFilterChatsListController( not_null session, rpl::producer title, Flags options, Flags selected, - const base::flat_set> &peers); + const base::flat_set> &peers, + LimitBoxFactory limitBox); [[nodiscard]] Main::Session &session() const override; [[nodiscard]] Flags chosenOptions() const { @@ -70,6 +72,7 @@ private: void updateTitle(); const not_null _session; + const LimitBoxFactory _limitBox; rpl::producer _title; base::flat_set> _peers; Flags _options; diff --git a/Telegram/SourceFiles/boxes/premium_limits_box.cpp b/Telegram/SourceFiles/boxes/premium_limits_box.cpp index 3fbdc34c1..8980a9028 100644 --- a/Telegram/SourceFiles/boxes/premium_limits_box.cpp +++ b/Telegram/SourceFiles/boxes/premium_limits_box.cpp @@ -694,7 +694,8 @@ void PublicLinksLimitBox( void FilterChatsLimitBox( not_null box, not_null session, - int currentCount) { + int currentCount, + bool include) { const auto premium = session->premium(); const auto premiumPossible = session->premiumPossible(); @@ -707,10 +708,12 @@ void FilterChatsLimitBox( premiumLimit); auto text = rpl::combine( - tr::lng_filter_chats_limit1( - lt_count, - rpl::single(premium ? premiumLimit : defaultLimit), - Ui::Text::RichLangValue), + (include + ? tr::lng_filter_chats_limit1 + : tr::lng_filter_chats_exlude_limit1)( + lt_count, + rpl::single(premium ? premiumLimit : defaultLimit), + Ui::Text::RichLangValue), ((premium || !premiumPossible) ? rpl::single(TextWithEntities()) : tr::lng_filter_chats_limit2( diff --git a/Telegram/SourceFiles/boxes/premium_limits_box.h b/Telegram/SourceFiles/boxes/premium_limits_box.h index bb9115a3e..7bcda6e53 100644 --- a/Telegram/SourceFiles/boxes/premium_limits_box.h +++ b/Telegram/SourceFiles/boxes/premium_limits_box.h @@ -35,7 +35,8 @@ void PublicLinksLimitBox( void FilterChatsLimitBox( not_null box, not_null session, - int currentCount); + int currentCount, + bool include); void FilterLinksLimitBox( not_null box, not_null session);