diff --git a/Telegram/SourceFiles/boxes/choose_filter_box.cpp b/Telegram/SourceFiles/boxes/choose_filter_box.cpp index 3fffdbef6..0471998de 100644 --- a/Telegram/SourceFiles/boxes/choose_filter_box.cpp +++ b/Telegram/SourceFiles/boxes/choose_filter_box.cpp @@ -121,15 +121,19 @@ bool ChooseFilterValidator::canRemove(FilterId filterId) const { return false; } -bool ChooseFilterValidator::limitReached(FilterId filterId) const { +ChooseFilterValidator::LimitData ChooseFilterValidator::limitReached( + FilterId filterId) const { Expects(filterId != 0); const auto list = _history->owner().chatsFilters().list(); const auto i = ranges::find(list, filterId, &Data::ChatFilter::id); const auto limit = _history->owner().pinnedChatsLimit(nullptr, filterId); - return (i != end(list)) - && !ranges::contains(i->always(), _history) - && (i->always().size() >= limit); + return { + .reached = (i != end(list)) + && !ranges::contains(i->always(), _history) + && (i->always().size() >= limit), + .count = int(i->always().size()), + }; } void ChooseFilterValidator::add(FilterId filterId) const { @@ -158,9 +162,11 @@ void FillChooseFilterMenu( if (validator.canRemove(id)) { validator.remove(id); } - } else if (validator.limitReached(id)) { - controller->show( - Box(FilterChatsLimitBox, &controller->session())); + } else if (const auto r = validator.limitReached(id); r.reached) { + controller->show(Box( + FilterChatsLimitBox, + &controller->session(), + r.count)); } else if (validator.canAdd()) { validator.add(id); } diff --git a/Telegram/SourceFiles/boxes/choose_filter_box.h b/Telegram/SourceFiles/boxes/choose_filter_box.h index eeb49a765..8e32b267c 100644 --- a/Telegram/SourceFiles/boxes/choose_filter_box.h +++ b/Telegram/SourceFiles/boxes/choose_filter_box.h @@ -20,10 +20,14 @@ class History; class ChooseFilterValidator final { public: ChooseFilterValidator(not_null history); + struct LimitData { + const bool reached = false; + const int count = 0; + }; [[nodiscard]] bool canAdd() const; [[nodiscard]] bool canRemove(FilterId filterId) const; - [[nodiscard]] bool limitReached(FilterId filterId) const; + [[nodiscard]] LimitData limitReached(FilterId filterId) const; void add(FilterId filterId) const; void remove(FilterId filterId) const; diff --git a/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.cpp b/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.cpp index afdc9c194..60c7cc82b 100644 --- a/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.cpp +++ b/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.cpp @@ -348,7 +348,8 @@ void EditFilterChatsListController::rowClicked(not_null row) { delegate()->peerListSetRowChecked(row, !row->checked()); updateTitle(); } else { - delegate()->peerListShowBox(Box(FilterChatsLimitBox, _session)); + delegate()->peerListShowBox( + Box(FilterChatsLimitBox, _session, count)); } } diff --git a/Telegram/SourceFiles/boxes/premium_limits_box.cpp b/Telegram/SourceFiles/boxes/premium_limits_box.cpp index 629c13449..0e5cf03bf 100644 --- a/Telegram/SourceFiles/boxes/premium_limits_box.cpp +++ b/Telegram/SourceFiles/boxes/premium_limits_box.cpp @@ -668,7 +668,8 @@ void PublicLinksLimitBox( void FilterChatsLimitBox( not_null box, - not_null session) { + not_null session, + int currentCount) { const auto premium = session->premium(); const auto defaultLimit = Limit( @@ -679,6 +680,10 @@ void FilterChatsLimitBox( session, "dialog_filters_chats_limit_premium", 200); + const auto current = std::clamp( + float64(currentCount), + defaultLimit, + premiumLimit); auto text = rpl::combine( tr::lng_filter_chats_limit1( @@ -703,7 +708,7 @@ void FilterChatsLimitBox( tr::lng_filter_chats_limit_title(), std::move(text), "dialog_filters_chats", - { defaultLimit, defaultLimit, premiumLimit, &st::premiumIconChats }, + { defaultLimit, current, premiumLimit, &st::premiumIconChats }, premium); } diff --git a/Telegram/SourceFiles/boxes/premium_limits_box.h b/Telegram/SourceFiles/boxes/premium_limits_box.h index 3ce2f5175..a85d1f9ae 100644 --- a/Telegram/SourceFiles/boxes/premium_limits_box.h +++ b/Telegram/SourceFiles/boxes/premium_limits_box.h @@ -26,7 +26,8 @@ void PublicLinksLimitBox( Fn retry); void FilterChatsLimitBox( not_null box, - not_null session); + not_null session, + int currentCount); void FiltersLimitBox( not_null box, not_null session);