diff --git a/Telegram/SourceFiles/boxes/filters/edit_filter_box.cpp b/Telegram/SourceFiles/boxes/filters/edit_filter_box.cpp index 4958398ace..27acc6bf12 100644 --- a/Telegram/SourceFiles/boxes/filters/edit_filter_box.cpp +++ b/Telegram/SourceFiles/boxes/filters/edit_filter_box.cpp @@ -18,6 +18,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/filter_icon_panel.h" #include "data/data_chat_filters.h" #include "data/data_peer.h" +#include "data/data_peer_values.h" // Data::AmPremiumValue. #include "data/data_session.h" #include "core/application.h" #include "core/core_settings.h" @@ -504,6 +505,12 @@ void EditFilterBox( box->setTitle(creating ? tr::lng_filters_new() : tr::lng_filters_edit()); box->setCloseByOutsideClick(false); + Data::AmPremiumValue( + &window->session() + ) | rpl::start_with_next([=] { + box->closeBox(); + }, box->lifetime()); + using State = rpl::variable; const auto data = box->lifetime().make_state(filter); diff --git a/Telegram/SourceFiles/boxes/premium_limits_box.cpp b/Telegram/SourceFiles/boxes/premium_limits_box.cpp index bbbd7f43b3..c1d904006f 100644 --- a/Telegram/SourceFiles/boxes/premium_limits_box.cpp +++ b/Telegram/SourceFiles/boxes/premium_limits_box.cpp @@ -21,6 +21,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "boxes/peer_list_controllers.h" #include "boxes/peers/prepare_short_info_box.h" // PrepareShortInfoBox #include "window/window_session_controller.h" +#include "data/data_chat_filters.h" #include "data/data_user.h" #include "data/data_channel.h" #include "data/data_session.h" @@ -710,6 +711,9 @@ void FiltersLimitBox( session, "dialog_filters_limit_premium", 20); + const auto current = float64(ranges::count_if( + session->data().chatsFilters().list(), + [](const Data::ChatFilter &f) { return f.id() != FilterId(); })); auto text = rpl::combine( tr::lng_filters_limit1( @@ -733,7 +737,7 @@ void FiltersLimitBox( tr::lng_filters_limit_title(), std::move(text), "dialog_filters", - { defaultLimit, defaultLimit, premiumLimit, &st::premiumIconFolders }, + { defaultLimit, current, premiumLimit, &st::premiumIconFolders }, premium); } diff --git a/Telegram/SourceFiles/settings/settings_folders.cpp b/Telegram/SourceFiles/settings/settings_folders.cpp index 70d062efbe..b948791f1e 100644 --- a/Telegram/SourceFiles/settings/settings_folders.cpp +++ b/Telegram/SourceFiles/settings/settings_folders.cpp @@ -14,6 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_chat_filters.h" #include "data/data_folder.h" #include "data/data_peer.h" +#include "data/data_peer_values.h" // Data::AmPremiumValue. #include "data/data_session.h" #include "history/history.h" #include "lang/lang_keys.h" @@ -490,8 +491,11 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { auto showSuggestions = rpl::combine( suggested->value(), - rowsCount->value() - ) | rpl::map(rpl::mappers::_1 > 0 && rpl::mappers::_2 < limit()); + rowsCount->value(), + Data::AmPremiumValue(session) + ) | rpl::map([limit](int suggested, int count, bool) { + return suggested > 0 && count < limit(); + }); nonEmptyAbout->toggleOn(std::move(showSuggestions)); const auto prepareGoodIdsForNewFilters = [=] { diff --git a/Telegram/SourceFiles/window/window_filters_menu.cpp b/Telegram/SourceFiles/window/window_filters_menu.cpp index f913d86720..502e409d18 100644 --- a/Telegram/SourceFiles/window/window_filters_menu.cpp +++ b/Telegram/SourceFiles/window/window_filters_menu.cpp @@ -194,7 +194,8 @@ void FiltersMenu::refresh() { _reorder->cancel(); _reorder->clearPinnedIntervals(); - const auto maxLimit = CurrentPremiumFiltersLimit(&_session->session()); + const auto maxLimit = (reorderAll ? 1 : 0) + + CurrentPremiumFiltersLimit(&_session->session()); const auto premiumFrom = (reorderAll ? 0 : 1) + maxLimit; if (!reorderAll) { _reorder->addPinnedInterval(0, 1); @@ -204,8 +205,12 @@ void FiltersMenu::refresh() { std::max(1, int(filters->list().size()) - maxLimit)); auto now = base::flat_map>(); + const auto ¤tFilter = _session->activeChatsFilterCurrent(); for (const auto &filter : filters->list()) { const auto nextIsLocked = (now.size() >= premiumFrom); + if (nextIsLocked && (currentFilter == filter.id())) { + _session->setActiveChatsFilter(FilterId(0)); + } auto button = prepareButton( _list, filter.id(),