Replace MAX_INCLUDED_FILTER_DIALOGS with a function.

This commit is contained in:
levlam 2022-05-23 19:04:09 +03:00
parent ef28bae155
commit c584b48c10
3 changed files with 16 additions and 12 deletions

View File

@ -16,6 +16,10 @@
namespace td {
int32 DialogFilter::get_max_filter_dialogs() {
return 100; // server side limit
}
unique_ptr<DialogFilter> DialogFilter::get_dialog_filter(
telegram_api::object_ptr<telegram_api::DialogFilter> filter_ptr, bool with_id) {
if (filter_ptr->get_id() != telegram_api::dialogFilter::ID) {
@ -92,16 +96,15 @@ Status DialogFilter::check_limits() const {
auto included_secret_dialog_count = static_cast<int32>(included_dialog_ids.size()) - included_server_dialog_count;
auto pinned_secret_dialog_count = static_cast<int32>(pinned_dialog_ids.size()) - pinned_server_dialog_count;
if (excluded_server_dialog_count > MAX_INCLUDED_FILTER_DIALOGS ||
excluded_secret_dialog_count > MAX_INCLUDED_FILTER_DIALOGS) {
auto limit = get_max_filter_dialogs();
if (excluded_server_dialog_count > limit || excluded_secret_dialog_count > limit) {
return Status::Error(400, "The maximum number of excluded chats exceeded");
}
if (included_server_dialog_count > MAX_INCLUDED_FILTER_DIALOGS ||
included_secret_dialog_count > MAX_INCLUDED_FILTER_DIALOGS) {
if (included_server_dialog_count > limit || included_secret_dialog_count > limit) {
return Status::Error(400, "The maximum number of included chats exceeded");
}
if (included_server_dialog_count + pinned_server_dialog_count > MAX_INCLUDED_FILTER_DIALOGS ||
included_secret_dialog_count + pinned_secret_dialog_count > MAX_INCLUDED_FILTER_DIALOGS) {
if (included_server_dialog_count + pinned_server_dialog_count > limit ||
included_secret_dialog_count + pinned_secret_dialog_count > limit) {
return Status::Error(400, "The maximum number of pinned chats exceeded");
}

View File

@ -20,8 +20,6 @@ namespace td {
class DialogFilter {
public:
static constexpr int32 MAX_INCLUDED_FILTER_DIALOGS = 100; // server side limit
DialogFilterId dialog_filter_id;
string title;
string emoji;
@ -43,6 +41,8 @@ class DialogFilter {
template <class ParserT>
void parse(ParserT &parser);
static int32 get_max_filter_dialogs();
static unique_ptr<DialogFilter> get_dialog_filter(telegram_api::object_ptr<telegram_api::DialogFilter> filter_ptr,
bool with_id);

View File

@ -19069,8 +19069,9 @@ Result<unique_ptr<DialogFilter>> MessagesManager::create_dialog_filter(DialogFil
void MessagesManager::create_dialog_filter(td_api::object_ptr<td_api::chatFilter> filter,
Promise<td_api::object_ptr<td_api::chatFilterInfo>> &&promise) {
CHECK(!td_->auth_manager_->is_bot());
auto max_dialog_filters = G()->shared_config().get_option_integer("chat_filter_count_max");
if (dialog_filters_.size() >= max_dialog_filters) {
auto max_dialog_filters = clamp(G()->shared_config().get_option_integer("chat_filter_count_max"),
static_cast<int64>(0), static_cast<int64>(100));
if (dialog_filters_.size() >= narrow_cast<size_t>(max_dialog_filters)) {
return promise.set_error(Status::Error(400, "The maximum number of chat folders exceeded"));
}
if (!is_update_chat_filters_sent_) {
@ -19813,7 +19814,7 @@ void MessagesManager::clear_all_draft_messages(bool exclude_secret_chats, Promis
int32 MessagesManager::get_pinned_dialogs_limit(DialogListId dialog_list_id) {
if (dialog_list_id.is_filter()) {
return DialogFilter::MAX_INCLUDED_FILTER_DIALOGS;
return DialogFilter::get_max_filter_dialogs();
}
Slice key{"pinned_chat_count_max"};
@ -33111,7 +33112,7 @@ vector<DialogListId> MessagesManager::get_dialog_lists_to_add_dialog(DialogId di
// the dialog isn't added yet to the dialog list
// check that it can be actually added
if (dialog_filter->included_dialog_ids.size() + dialog_filter->pinned_dialog_ids.size() <
DialogFilter::MAX_INCLUDED_FILTER_DIALOGS) {
narrow_cast<size_t>(DialogFilter::get_max_filter_dialogs())) {
// fast path
result.push_back(DialogListId(dialog_filter_id));
continue;