Move checks from DialogFilterManager::create_dialog_filter to DialogFilter.
This commit is contained in:
parent
f12fedd4d6
commit
19ac20adc9
@ -135,6 +135,18 @@ Result<unique_ptr<DialogFilter>> DialogFilter::create_dialog_filter(Td *td, Dial
|
|||||||
TRY_STATUS(dialog_filter->check_limits());
|
TRY_STATUS(dialog_filter->check_limits());
|
||||||
dialog_filter->sort_input_dialog_ids(td, "create_dialog_filter");
|
dialog_filter->sort_input_dialog_ids(td, "create_dialog_filter");
|
||||||
|
|
||||||
|
Status status;
|
||||||
|
dialog_filter->for_each_dialog(
|
||||||
|
[messages_manager = td->messages_manager_.get(), &status](const InputDialogId &input_dialog_id) {
|
||||||
|
if (status.is_error()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
status = messages_manager->can_add_dialog_to_filter(input_dialog_id.get_dialog_id());
|
||||||
|
});
|
||||||
|
if (status.is_error()) {
|
||||||
|
return std::move(status);
|
||||||
|
}
|
||||||
|
|
||||||
return std::move(dialog_filter);
|
return std::move(dialog_filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1061,24 +1061,6 @@ td_api::object_ptr<td_api::updateChatFilters> DialogFilterManager::get_update_ch
|
|||||||
return update;
|
return update;
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<unique_ptr<DialogFilter>> DialogFilterManager::create_dialog_filter(
|
|
||||||
DialogFilterId dialog_filter_id, td_api::object_ptr<td_api::chatFilter> filter) {
|
|
||||||
CHECK(filter != nullptr);
|
|
||||||
TRY_RESULT(dialog_filter, DialogFilter::create_dialog_filter(td_, dialog_filter_id, std::move(filter)));
|
|
||||||
Status status;
|
|
||||||
dialog_filter->for_each_dialog(
|
|
||||||
[messages_manager = td_->messages_manager_.get(), &status](const InputDialogId &input_dialog_id) {
|
|
||||||
if (status.is_error()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
status = messages_manager->can_add_dialog_to_filter(input_dialog_id.get_dialog_id());
|
|
||||||
});
|
|
||||||
if (status.is_error()) {
|
|
||||||
return std::move(status);
|
|
||||||
}
|
|
||||||
return std::move(dialog_filter);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DialogFilterManager::create_dialog_filter(td_api::object_ptr<td_api::chatFilter> filter,
|
void DialogFilterManager::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());
|
||||||
@ -1098,12 +1080,8 @@ void DialogFilterManager::create_dialog_filter(td_api::object_ptr<td_api::chatFi
|
|||||||
dialog_filter_id = DialogFilterId(static_cast<int32>(Random::fast(min_id, max_id)));
|
dialog_filter_id = DialogFilterId(static_cast<int32>(Random::fast(min_id, max_id)));
|
||||||
} while (get_dialog_filter(dialog_filter_id) != nullptr || get_server_dialog_filter(dialog_filter_id) != nullptr);
|
} while (get_dialog_filter(dialog_filter_id) != nullptr || get_server_dialog_filter(dialog_filter_id) != nullptr);
|
||||||
|
|
||||||
auto r_dialog_filter = create_dialog_filter(dialog_filter_id, std::move(filter));
|
TRY_RESULT_PROMISE(promise, dialog_filter,
|
||||||
if (r_dialog_filter.is_error()) {
|
DialogFilter::create_dialog_filter(td_, dialog_filter_id, std::move(filter)));
|
||||||
return promise.set_error(r_dialog_filter.move_as_error());
|
|
||||||
}
|
|
||||||
auto dialog_filter = r_dialog_filter.move_as_ok();
|
|
||||||
CHECK(dialog_filter != nullptr);
|
|
||||||
auto chat_filter_info = dialog_filter->get_chat_filter_info_object();
|
auto chat_filter_info = dialog_filter->get_chat_filter_info_object();
|
||||||
|
|
||||||
bool at_beginning = is_recommended_dialog_filter(dialog_filter.get());
|
bool at_beginning = is_recommended_dialog_filter(dialog_filter.get());
|
||||||
@ -1128,12 +1106,8 @@ void DialogFilterManager::edit_dialog_filter(DialogFilterId dialog_filter_id,
|
|||||||
}
|
}
|
||||||
CHECK(is_update_chat_filters_sent_);
|
CHECK(is_update_chat_filters_sent_);
|
||||||
|
|
||||||
auto r_dialog_filter = create_dialog_filter(dialog_filter_id, std::move(filter));
|
TRY_RESULT_PROMISE(promise, new_dialog_filter,
|
||||||
if (r_dialog_filter.is_error()) {
|
DialogFilter::create_dialog_filter(td_, dialog_filter_id, std::move(filter)));
|
||||||
return promise.set_error(r_dialog_filter.move_as_error());
|
|
||||||
}
|
|
||||||
auto new_dialog_filter = r_dialog_filter.move_as_ok();
|
|
||||||
CHECK(new_dialog_filter != nullptr);
|
|
||||||
auto chat_filter_info = new_dialog_filter->get_chat_filter_info_object();
|
auto chat_filter_info = new_dialog_filter->get_chat_filter_info_object();
|
||||||
|
|
||||||
if (*new_dialog_filter == *old_dialog_filter) {
|
if (*new_dialog_filter == *old_dialog_filter) {
|
||||||
|
@ -122,9 +122,6 @@ class DialogFilterManager final : public Actor {
|
|||||||
|
|
||||||
void do_edit_dialog_filter(unique_ptr<DialogFilter> &&filter, bool need_synchronize, const char *source);
|
void do_edit_dialog_filter(unique_ptr<DialogFilter> &&filter, bool need_synchronize, const char *source);
|
||||||
|
|
||||||
Result<unique_ptr<DialogFilter>> create_dialog_filter(DialogFilterId dialog_filter_id,
|
|
||||||
td_api::object_ptr<td_api::chatFilter> filter);
|
|
||||||
|
|
||||||
void update_dialog_filter_on_server(unique_ptr<DialogFilter> &&dialog_filter);
|
void update_dialog_filter_on_server(unique_ptr<DialogFilter> &&dialog_filter);
|
||||||
|
|
||||||
void on_update_dialog_filter(unique_ptr<DialogFilter> dialog_filter, Status result);
|
void on_update_dialog_filter(unique_ptr<DialogFilter> dialog_filter, Status result);
|
||||||
|
Loading…
Reference in New Issue
Block a user