Fixed processing of premium limits for filters.

This commit is contained in:
23rd 2022-06-02 03:10:00 +03:00
parent 9e4d47dcc0
commit a1736de977
4 changed files with 24 additions and 4 deletions

View File

@ -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<Data::ChatFilter>;
const auto data = box->lifetime().make_state<State>(filter);

View File

@ -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);
}

View File

@ -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 = [=] {

View File

@ -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<int, base::unique_qptr<Ui::SideBarButton>>();
const auto &currentFilter = _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(),