From 76fd42ac12cebcad2ff7ff9d23d0df0032f10dc1 Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 25 May 2020 23:52:43 +0300 Subject: [PATCH] Add separate save_dialog_filters. GitOrigin-RevId: d624510ea25882c204a31088d85344f0e80f4d8c --- td/telegram/MessagesManager.cpp | 49 ++++++++++++++++++++------------- td/telegram/MessagesManager.h | 4 ++- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 6dfda149f..bfc6834af 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -10980,7 +10980,7 @@ void MessagesManager::init() { LOG(ERROR) << "Failed to parse chat filters from binlog"; } } - send_update_chat_filters(true); // always send updateChatFilters + send_update_chat_filters(); // always send updateChatFilters auto unread_message_counts = G()->td_db()->get_binlog_pmc()->prefix_get("unread_message_count"); for (auto &it : unread_message_counts) { @@ -14319,10 +14319,12 @@ void MessagesManager::on_get_dialog_filters(Result MessagesManager::search_public_dialogs(const string &query, Promise &&promise) { @@ -15337,7 +15339,8 @@ void MessagesManager::create_dialog_filter(td_api::object_ptrget_input_dialog_filter(); add_dialog_filter(make_unique(*dialog_filter), "create_dialog_filter"); - send_update_chat_filters(false); + save_dialog_filters(); + send_update_chat_filters(); // TODO SequenceDispatcher auto query_promise = PromiseCreator::lambda([actor_id = actor_id(this), dialog_filter = std::move(dialog_filter), @@ -15371,7 +15374,8 @@ void MessagesManager::edit_dialog_filter(DialogFilterId dialog_filter_id, td_api auto input_dialog_filter = new_dialog_filter->get_input_dialog_filter(); edit_dialog_filter(make_unique(*new_dialog_filter), "edit_dialog_filter"); - send_update_chat_filters(false); + save_dialog_filters(); + send_update_chat_filters(); // TODO SequenceDispatcher auto query_promise = PromiseCreator::lambda([actor_id = actor_id(this), dialog_filter = std::move(new_dialog_filter), @@ -15394,7 +15398,7 @@ void MessagesManager::on_update_dialog_filter(unique_ptr dialog_fi if (filter->dialog_filter_id == dialog_filter->dialog_filter_id) { if (*filter != *dialog_filter) { filter = std::move(dialog_filter); - send_update_chat_filters(false); + save_dialog_filters(); } promise.set_value(Unit()); return; @@ -15402,7 +15406,7 @@ void MessagesManager::on_update_dialog_filter(unique_ptr dialog_fi } server_dialog_filters_.push_back(std::move(dialog_filter)); - send_update_chat_filters(false); + save_dialog_filters(); promise.set_value(Unit()); } @@ -15414,7 +15418,8 @@ void MessagesManager::delete_dialog_filter(DialogFilterId dialog_filter_id, Prom } delete_dialog_filter(dialog_filter_id, "delete_dialog_filter"); - send_update_chat_filters(false); + save_dialog_filters(); + send_update_chat_filters(); // TODO SequenceDispatcher auto query_promise = PromiseCreator::lambda( @@ -15434,7 +15439,7 @@ void MessagesManager::on_delete_dialog_filter(DialogFilterId dialog_filter_id, S for (auto it = server_dialog_filters_.begin(); it != server_dialog_filters_.end(); ++it) { if ((*it)->dialog_filter_id == dialog_filter_id) { server_dialog_filters_.erase(it); - send_update_chat_filters(false); + save_dialog_filters(); break; } } @@ -15487,7 +15492,8 @@ void MessagesManager::reorder_dialog_filters(vector dialog_filte } CHECK(dialog_filters_[i]->dialog_filter_id == dialog_filter_ids[i]); } - send_update_chat_filters(false); + save_dialog_filters(); + send_update_chat_filters(); // TODO SequenceDispatcher td_->create_handler(std::move(promise))->send(dialog_filter_ids); @@ -15516,7 +15522,7 @@ void MessagesManager::edit_dialog_filter(unique_ptr dialog_filter, void MessagesManager::delete_dialog_filter(DialogFilterId dialog_filter_id, const char *source) { LOG(INFO) << "Delete " << dialog_filter_id << " from " << source; - for (auto it = dialog_filters_.begin(); it != server_dialog_filters_.end(); ++it) { + for (auto it = dialog_filters_.begin(); it != dialog_filters_.end(); ++it) { if ((*it)->dialog_filter_id == dialog_filter_id) { dialog_filters_.erase(it); return; @@ -24164,22 +24170,27 @@ void MessagesManager::send_update_chat_last_message_impl(const Dialog *d, const send_closure(G()->td(), &Td::send_update, std::move(update)); } -void MessagesManager::send_update_chat_filters(bool from_database) { +void MessagesManager::send_update_chat_filters() { if (td_->auth_manager_->is_bot()) { return; } - if (!from_database) { - DialogFiltersLogEvent log_event; - log_event.updated_date = dialog_filters_updated_date_; - log_event.server_dialog_filters_in = &server_dialog_filters_; - log_event.dialog_filters_in = &dialog_filters_; - - G()->td_db()->get_binlog_pmc()->set("dialog_filters", log_event_store(log_event).as_slice().str()); - } send_closure(G()->td(), &Td::send_update, get_update_chat_filters_object()); } +void MessagesManager::save_dialog_filters() { + if (td_->auth_manager_->is_bot()) { + return; + } + + DialogFiltersLogEvent log_event; + log_event.updated_date = dialog_filters_updated_date_; + log_event.server_dialog_filters_in = &server_dialog_filters_; + log_event.dialog_filters_in = &dialog_filters_; + + G()->td_db()->get_binlog_pmc()->set("dialog_filters", log_event_store(log_event).as_slice().str()); +} + void MessagesManager::send_update_unread_message_count(DialogListId dialog_list_id, DialogId dialog_id, bool force, const char *source, bool from_database) { if (td_->auth_manager_->is_bot() || !G()->parameters().use_message_db) { diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 0d01a070e..b5efd571f 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -2027,7 +2027,7 @@ class MessagesManager : public Actor { void send_update_chat_last_message_impl(const Dialog *d, const char *source) const; - void send_update_chat_filters(bool from_database = false); + void send_update_chat_filters(); void send_update_unread_message_count(DialogListId dialog_list_id, DialogId dialog_id, bool force, const char *source, bool from_database = false); @@ -2253,6 +2253,8 @@ class MessagesManager : public Actor { void on_delete_dialog_filter(DialogFilterId dialog_filter_id, Status result, Promise &&promise); + void save_dialog_filters(); + void add_dialog_filter(unique_ptr dialog_filter, const char *source); void edit_dialog_filter(unique_ptr dialog_filter, const char *source);