Replace MAX_INCLUDED_FILTER_DIALOGS with a function.
This commit is contained in:
parent
ef28bae155
commit
c584b48c10
@ -16,6 +16,10 @@
|
|||||||
|
|
||||||
namespace td {
|
namespace td {
|
||||||
|
|
||||||
|
int32 DialogFilter::get_max_filter_dialogs() {
|
||||||
|
return 100; // server side limit
|
||||||
|
}
|
||||||
|
|
||||||
unique_ptr<DialogFilter> DialogFilter::get_dialog_filter(
|
unique_ptr<DialogFilter> DialogFilter::get_dialog_filter(
|
||||||
telegram_api::object_ptr<telegram_api::DialogFilter> filter_ptr, bool with_id) {
|
telegram_api::object_ptr<telegram_api::DialogFilter> filter_ptr, bool with_id) {
|
||||||
if (filter_ptr->get_id() != telegram_api::dialogFilter::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 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;
|
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 ||
|
auto limit = get_max_filter_dialogs();
|
||||||
excluded_secret_dialog_count > MAX_INCLUDED_FILTER_DIALOGS) {
|
if (excluded_server_dialog_count > limit || excluded_secret_dialog_count > limit) {
|
||||||
return Status::Error(400, "The maximum number of excluded chats exceeded");
|
return Status::Error(400, "The maximum number of excluded chats exceeded");
|
||||||
}
|
}
|
||||||
if (included_server_dialog_count > MAX_INCLUDED_FILTER_DIALOGS ||
|
if (included_server_dialog_count > limit || included_secret_dialog_count > limit) {
|
||||||
included_secret_dialog_count > MAX_INCLUDED_FILTER_DIALOGS) {
|
|
||||||
return Status::Error(400, "The maximum number of included chats exceeded");
|
return Status::Error(400, "The maximum number of included chats exceeded");
|
||||||
}
|
}
|
||||||
if (included_server_dialog_count + pinned_server_dialog_count > MAX_INCLUDED_FILTER_DIALOGS ||
|
if (included_server_dialog_count + pinned_server_dialog_count > limit ||
|
||||||
included_secret_dialog_count + pinned_secret_dialog_count > MAX_INCLUDED_FILTER_DIALOGS) {
|
included_secret_dialog_count + pinned_secret_dialog_count > limit) {
|
||||||
return Status::Error(400, "The maximum number of pinned chats exceeded");
|
return Status::Error(400, "The maximum number of pinned chats exceeded");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,8 +20,6 @@ namespace td {
|
|||||||
|
|
||||||
class DialogFilter {
|
class DialogFilter {
|
||||||
public:
|
public:
|
||||||
static constexpr int32 MAX_INCLUDED_FILTER_DIALOGS = 100; // server side limit
|
|
||||||
|
|
||||||
DialogFilterId dialog_filter_id;
|
DialogFilterId dialog_filter_id;
|
||||||
string title;
|
string title;
|
||||||
string emoji;
|
string emoji;
|
||||||
@ -43,6 +41,8 @@ class DialogFilter {
|
|||||||
template <class ParserT>
|
template <class ParserT>
|
||||||
void parse(ParserT &parser);
|
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,
|
static unique_ptr<DialogFilter> get_dialog_filter(telegram_api::object_ptr<telegram_api::DialogFilter> filter_ptr,
|
||||||
bool with_id);
|
bool with_id);
|
||||||
|
|
||||||
|
@ -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,
|
void MessagesManager::create_dialog_filter(td_api::object_ptr<td_api::chatFilter> filter,
|
||||||
Promise<td_api::object_ptr<td_api::chatFilterInfo>> &&promise) {
|
Promise<td_api::object_ptr<td_api::chatFilterInfo>> &&promise) {
|
||||||
CHECK(!td_->auth_manager_->is_bot());
|
CHECK(!td_->auth_manager_->is_bot());
|
||||||
auto max_dialog_filters = G()->shared_config().get_option_integer("chat_filter_count_max");
|
auto max_dialog_filters = clamp(G()->shared_config().get_option_integer("chat_filter_count_max"),
|
||||||
if (dialog_filters_.size() >= max_dialog_filters) {
|
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"));
|
return promise.set_error(Status::Error(400, "The maximum number of chat folders exceeded"));
|
||||||
}
|
}
|
||||||
if (!is_update_chat_filters_sent_) {
|
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) {
|
int32 MessagesManager::get_pinned_dialogs_limit(DialogListId dialog_list_id) {
|
||||||
if (dialog_list_id.is_filter()) {
|
if (dialog_list_id.is_filter()) {
|
||||||
return DialogFilter::MAX_INCLUDED_FILTER_DIALOGS;
|
return DialogFilter::get_max_filter_dialogs();
|
||||||
}
|
}
|
||||||
|
|
||||||
Slice key{"pinned_chat_count_max"};
|
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
|
// the dialog isn't added yet to the dialog list
|
||||||
// check that it can be actually added
|
// check that it can be actually added
|
||||||
if (dialog_filter->included_dialog_ids.size() + dialog_filter->pinned_dialog_ids.size() <
|
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
|
// fast path
|
||||||
result.push_back(DialogListId(dialog_filter_id));
|
result.push_back(DialogListId(dialog_filter_id));
|
||||||
continue;
|
continue;
|
||||||
|
Loading…
Reference in New Issue
Block a user