diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 23b1f1e97..a925aada8 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -16575,6 +16575,23 @@ bool MessagesManager::load_dialog(DialogId dialog_id, int left_tries, Promise &&input_dialog_ids, Promise &&promise) { + const size_t MAX_SLICE_SIZE = 100; // server side limit + MultiPromiseActorSafe mpas{"GetFilterDialogsOnServerMultiPromiseActor"}; + mpas.add_promise(std::move(promise)); + mpas.set_ignore_errors(true); + auto lock = mpas.get_promise(); + + for (size_t i = 0; i < input_dialog_ids.size(); i += MAX_SLICE_SIZE) { + auto end_i = i + MAX_SLICE_SIZE; + auto end = end_i < input_dialog_ids.size() ? input_dialog_ids.begin() + end_i : input_dialog_ids.end(); + td_->create_handler(mpas.get_promise())->send({input_dialog_ids.begin() + i, end}); + } + + lock.set_value(Unit()); +} + void MessagesManager::load_dialog_filter(DialogFilterId dialog_filter_id, bool force, Promise &&promise) { CHECK(!td_->auth_manager_->is_bot()); if (!dialog_filter_id.is_valid()) { @@ -16617,20 +16634,7 @@ void MessagesManager::load_dialog_filter(const DialogFilter *filter, bool force, } if (!input_dialog_ids.empty() && !force) { - const size_t MAX_SLICE_SIZE = 100; // server side limit - MultiPromiseActorSafe mpas{"GetFilterDialogsOnServerMultiPromiseActor"}; - mpas.add_promise(std::move(promise)); - mpas.set_ignore_errors(true); - auto lock = mpas.get_promise(); - - for (size_t i = 0; i < input_dialog_ids.size(); i += MAX_SLICE_SIZE) { - auto end_i = i + MAX_SLICE_SIZE; - auto end = end_i < input_dialog_ids.size() ? input_dialog_ids.begin() + end_i : input_dialog_ids.end(); - td_->create_handler(mpas.get_promise())->send({input_dialog_ids.begin() + i, end}); - } - - lock.set_value(Unit()); - return; + return load_dialog_filter_dialogs(filter->dialog_filter_id, std::move(input_dialog_ids), std::move(promise)); } promise.set_value(Unit()); @@ -16782,7 +16786,7 @@ vector MessagesManager::get_dialogs(DialogListId dialog_list_id, Dialo promise.set_value(Unit()); return result; } else { - td_->create_handler(std::move(promise))->send(std::move(input_dialog_ids)); + load_dialog_filter_dialogs(filter->dialog_filter_id, std::move(input_dialog_ids), std::move(promise)); return {}; } } diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index a19726540..db0406e30 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -2781,6 +2781,9 @@ class MessagesManager final : public Actor { td_api::object_ptr get_chat_filter_object(const DialogFilter *filter) const; + void load_dialog_filter_dialogs(DialogFilterId dialog_filter_id, vector &&input_dialog_ids, + Promise &&promise); + void load_dialog_filter(const DialogFilter *filter, bool force, Promise &&promise); void on_get_recommended_dialog_filters(Result>> result,