From cb27d4bd07e63fa11bb7b135cda9f702c5b48bc3 Mon Sep 17 00:00:00 2001 From: levlam Date: Wed, 22 Mar 2023 23:19:32 +0300 Subject: [PATCH] Make DialogFilter fields private. --- td/telegram/DialogFilter.cpp | 10 ++++-- td/telegram/DialogFilter.h | 48 +++++++++++++++------------ td/telegram/MessagesManager.cpp | 59 +++++++++++++++++---------------- 3 files changed, 63 insertions(+), 54 deletions(-) diff --git a/td/telegram/DialogFilter.cpp b/td/telegram/DialogFilter.cpp index 0413673a3..3f493c318 100644 --- a/td/telegram/DialogFilter.cpp +++ b/td/telegram/DialogFilter.cpp @@ -36,9 +36,13 @@ unique_ptr DialogFilter::get_dialog_filter( } auto filter = telegram_api::move_object_as(filter_ptr); DialogFilterId dialog_filter_id(filter->id_); - if (with_id && !dialog_filter_id.is_valid()) { - LOG(ERROR) << "Receive invalid " << to_string(filter); - return nullptr; + if (with_id) { + if (!dialog_filter_id.is_valid()) { + LOG(ERROR) << "Receive invalid " << to_string(filter); + return nullptr; + } + } else { + dialog_filter_id = DialogFilterId(); } auto dialog_filter = make_unique(); dialog_filter->dialog_filter_id = dialog_filter_id; diff --git a/td/telegram/DialogFilter.h b/td/telegram/DialogFilter.h index 0dad1e006..6e5e4f8ba 100644 --- a/td/telegram/DialogFilter.h +++ b/td/telegram/DialogFilter.h @@ -25,27 +25,6 @@ class Td; class DialogFilter { public: - DialogFilterId dialog_filter_id; - string title; - string emoji; - vector pinned_dialog_ids; - vector included_dialog_ids; - vector excluded_dialog_ids; - bool exclude_muted = false; - bool exclude_read = false; - bool exclude_archived = false; - bool include_contacts = false; - bool include_non_contacts = false; - bool include_bots = false; - bool include_groups = false; - bool include_channels = false; - - template - void store(StorerT &storer) const; - - template - void parse(ParserT &parser); - static int32 get_max_filter_dialogs(); static unique_ptr get_dialog_filter(telegram_api::object_ptr filter_ptr, @@ -66,7 +45,7 @@ class DialogFilter { bool is_empty(bool for_server) const; - DialogFilterId get_dialog_filter_id() const { + const DialogFilterId &get_dialog_filter_id() const { return dialog_filter_id; } @@ -122,13 +101,38 @@ class DialogFilter { static bool are_flags_equal(const DialogFilter &lhs, const DialogFilter &rhs); + template + void store(StorerT &storer) const; + + template + void parse(ParserT &parser); + private: + DialogFilterId dialog_filter_id; + string title; + string emoji; + vector pinned_dialog_ids; + vector included_dialog_ids; + vector excluded_dialog_ids; + bool exclude_muted = false; + bool exclude_read = false; + bool exclude_archived = false; + bool include_contacts = false; + bool include_non_contacts = false; + bool include_bots = false; + bool include_groups = false; + bool include_channels = false; + static FlatHashMap emoji_to_icon_name_; static FlatHashMap icon_name_to_emoji_; static void init_icon_names(); string get_chosen_or_default_icon_name() const; + + friend bool operator==(const DialogFilter &lhs, const DialogFilter &rhs); + + friend StringBuilder &operator<<(StringBuilder &string_builder, const DialogFilter &filter); }; inline bool operator==(const DialogFilter &lhs, const DialogFilter &rhs) { diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 7f1e649a0..dbcc9f53f 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -13788,8 +13788,8 @@ void MessagesManager::init() { dialog_filters_updated_date_ = td_->ignore_background_updates() ? 0 : log_event.updated_date; std::unordered_set server_dialog_filter_ids; for (auto &dialog_filter : log_event.server_dialog_filters_out) { - if (dialog_filter->dialog_filter_id.is_valid() && - server_dialog_filter_ids.insert(dialog_filter->dialog_filter_id).second) { + if (dialog_filter->get_dialog_filter_id().is_valid() && + server_dialog_filter_ids.insert(dialog_filter->get_dialog_filter_id()).second) { server_dialog_filters_.push_back(std::move(dialog_filter)); } } @@ -17088,7 +17088,8 @@ void MessagesManager::load_dialog_filter(const DialogFilter *dialog_filter, bool } if (!input_dialog_ids.empty() && !force) { - return load_dialog_filter_dialogs(dialog_filter->dialog_filter_id, std::move(input_dialog_ids), std::move(promise)); + return load_dialog_filter_dialogs(dialog_filter->get_dialog_filter_id(), std::move(input_dialog_ids), + std::move(promise)); } promise.set_value(Unit()); @@ -17158,7 +17159,6 @@ void MessagesManager::on_get_recommended_dialog_filters( recommended_dialog_filter.dialog_filter = DialogFilter::get_dialog_filter(std::move(suggested_filter->filter_), false); CHECK(recommended_dialog_filter.dialog_filter != nullptr); - recommended_dialog_filter.dialog_filter->dialog_filter_id = DialogFilterId(); // just in case load_dialog_filter(recommended_dialog_filter.dialog_filter.get(), false, mpas.get_promise()); recommended_dialog_filter.description = std::move(suggested_filter->description_); @@ -17274,7 +17274,8 @@ vector MessagesManager::get_dialogs(DialogListId dialog_list_id, Dialo promise.set_value(Unit()); return result; } else { - load_dialog_filter_dialogs(dialog_filter->dialog_filter_id, std::move(input_dialog_ids), std::move(promise)); + load_dialog_filter_dialogs(dialog_filter->get_dialog_filter_id(), std::move(input_dialog_ids), + std::move(promise)); return {}; } } @@ -17804,8 +17805,8 @@ void MessagesManager::on_get_dialog_filters(Resultdialog_filter_id).second) { - LOG(ERROR) << "Receive duplicate " << dialog_filter->dialog_filter_id; + if (!new_dialog_filter_ids.insert(dialog_filter->get_dialog_filter_id()).second) { + LOG(ERROR) << "Receive duplicate " << dialog_filter->get_dialog_filter_id(); continue; } @@ -17831,10 +17832,10 @@ void MessagesManager::on_get_dialog_filters(Result old_server_dialog_filters; for (const auto &dialog_filter : server_dialog_filters_) { - old_server_dialog_filters.emplace(dialog_filter->dialog_filter_id, dialog_filter.get()); + old_server_dialog_filters.emplace(dialog_filter->get_dialog_filter_id(), dialog_filter.get()); } for (const auto &new_server_filter : new_server_dialog_filters) { - auto dialog_filter_id = new_server_filter->dialog_filter_id; + auto dialog_filter_id = new_server_filter->get_dialog_filter_id(); auto old_filter = get_dialog_filter(dialog_filter_id); auto it = old_server_dialog_filters.find(dialog_filter_id); if (it != old_server_dialog_filters.end()) { @@ -17876,8 +17877,8 @@ void MessagesManager::on_get_dialog_filters(Result left_old_server_dialog_filter_ids; for (const auto &dialog_filter : server_dialog_filters_) { - if (old_server_dialog_filters.count(dialog_filter->dialog_filter_id) == 0) { - left_old_server_dialog_filter_ids.push_back(dialog_filter->dialog_filter_id); + if (old_server_dialog_filters.count(dialog_filter->get_dialog_filter_id()) == 0) { + left_old_server_dialog_filter_ids.push_back(dialog_filter->get_dialog_filter_id()); } } LOG(INFO) << "Still existing server chat filters: " << left_old_server_dialog_filter_ids; @@ -17904,7 +17905,7 @@ void MessagesManager::on_get_dialog_filters(Result new_dialog_filter_order; for (const auto &new_server_filter : new_server_dialog_filters) { - auto dialog_filter_id = new_server_filter->dialog_filter_id; + auto dialog_filter_id = new_server_filter->get_dialog_filter_id(); if (get_dialog_filter(dialog_filter_id) != nullptr) { new_dialog_filter_order.push_back(dialog_filter_id); } @@ -17968,12 +17969,12 @@ bool MessagesManager::need_synchronize_dialog_filters() const { } server_dialog_filter_count++; - auto server_dialog_filter = get_server_dialog_filter(dialog_filter->dialog_filter_id); + auto server_dialog_filter = get_server_dialog_filter(dialog_filter->get_dialog_filter_id()); if (server_dialog_filter == nullptr || !DialogFilter::are_equivalent(*server_dialog_filter, *dialog_filter)) { // need update dialog filter on server return true; } - dialog_filter_ids.push_back(dialog_filter->dialog_filter_id); + dialog_filter_ids.push_back(dialog_filter->get_dialog_filter_id()); } if (server_dialog_filter_count != server_dialog_filters_.size()) { // need delete dialog filter on server @@ -18010,8 +18011,8 @@ void MessagesManager::synchronize_dialog_filters() { << DialogFilter::get_dialog_filter_ids(dialog_filters_, main_dialog_list_position_) << " and server " << DialogFilter::get_dialog_filter_ids(server_dialog_filters_, server_main_dialog_list_position_); for (const auto &server_dialog_filter : server_dialog_filters_) { - if (get_dialog_filter(server_dialog_filter->dialog_filter_id) == nullptr) { - return delete_dialog_filter_on_server(server_dialog_filter->dialog_filter_id); + if (get_dialog_filter(server_dialog_filter->get_dialog_filter_id()) == nullptr) { + return delete_dialog_filter_on_server(server_dialog_filter->get_dialog_filter_id()); } } @@ -18021,11 +18022,11 @@ void MessagesManager::synchronize_dialog_filters() { continue; } - auto server_dialog_filter = get_server_dialog_filter(dialog_filter->dialog_filter_id); + auto server_dialog_filter = get_server_dialog_filter(dialog_filter->get_dialog_filter_id()); if (server_dialog_filter == nullptr || !DialogFilter::are_equivalent(*server_dialog_filter, *dialog_filter)) { return update_dialog_filter_on_server(make_unique(*dialog_filter)); } - dialog_filter_ids.push_back(dialog_filter->dialog_filter_id); + dialog_filter_ids.push_back(dialog_filter->get_dialog_filter_id()); } auto server_main_dialog_list_position = get_server_main_dialog_list_position(); @@ -19785,7 +19786,7 @@ void MessagesManager::update_dialog_filter_on_server(unique_ptr && CHECK(dialog_filter != nullptr); are_dialog_filters_being_synchronized_ = true; dialog_filter->remove_secret_chat_dialog_ids(); - auto dialog_filter_id = dialog_filter->dialog_filter_id; + auto dialog_filter_id = dialog_filter->get_dialog_filter_id(); auto input_dialog_filter = dialog_filter->get_input_dialog_filter(); auto promise = PromiseCreator::lambda( @@ -19804,7 +19805,7 @@ void MessagesManager::on_update_dialog_filter(unique_ptr dialog_fi } else { bool is_edited = false; for (auto &server_dialog_filter : server_dialog_filters_) { - if (server_dialog_filter->dialog_filter_id == dialog_filter->dialog_filter_id) { + if (server_dialog_filter->get_dialog_filter_id() == dialog_filter->get_dialog_filter_id()) { if (*server_dialog_filter != *dialog_filter) { server_dialog_filter = std::move(dialog_filter); } @@ -19870,7 +19871,7 @@ void MessagesManager::on_delete_dialog_filter(DialogFilterId dialog_filter_id, S // TODO rollback dialog_filters_ changes if error isn't 429 } else { for (auto it = server_dialog_filters_.begin(); it != server_dialog_filters_.end(); ++it) { - if ((*it)->dialog_filter_id == dialog_filter_id) { + if ((*it)->get_dialog_filter_id() == dialog_filter_id) { server_dialog_filters_.erase(it); save_dialog_filters(); break; @@ -19953,7 +19954,7 @@ void MessagesManager::add_dialog_filter(unique_ptr dialog_filter, } CHECK(dialog_filter != nullptr); - auto dialog_filter_id = dialog_filter->dialog_filter_id; + auto dialog_filter_id = dialog_filter->get_dialog_filter_id(); LOG(INFO) << "Add " << dialog_filter_id << " from " << source; CHECK(get_dialog_filter(dialog_filter_id) == nullptr); if (at_beginning) { @@ -20012,12 +20013,12 @@ void MessagesManager::edit_dialog_filter(unique_ptr new_dialog_fil } CHECK(new_dialog_filter != nullptr); - LOG(INFO) << "Edit " << new_dialog_filter->dialog_filter_id << " from " << source; + LOG(INFO) << "Edit " << new_dialog_filter->get_dialog_filter_id() << " from " << source; for (auto &old_dialog_filter : dialog_filters_) { - if (old_dialog_filter->dialog_filter_id == new_dialog_filter->dialog_filter_id) { + if (old_dialog_filter->get_dialog_filter_id() == new_dialog_filter->get_dialog_filter_id()) { CHECK(*old_dialog_filter != *new_dialog_filter); - auto dialog_list_id = DialogListId(old_dialog_filter->dialog_filter_id); + auto dialog_list_id = DialogListId(old_dialog_filter->get_dialog_filter_id()); auto *old_list_ptr = get_dialog_list(dialog_list_id); CHECK(old_list_ptr != nullptr); auto &old_list = *old_list_ptr; @@ -20215,7 +20216,7 @@ int32 MessagesManager::delete_dialog_filter(DialogFilterId dialog_filter_id, con LOG(INFO) << "Delete " << dialog_filter_id << " from " << source; for (auto it = dialog_filters_.begin(); it != dialog_filters_.end(); ++it) { - if ((*it)->dialog_filter_id == dialog_filter_id) { + if ((*it)->get_dialog_filter_id() == dialog_filter_id) { auto dialog_list_id = DialogListId(dialog_filter_id); auto *list = get_dialog_list(dialog_list_id); CHECK(list != nullptr); @@ -38964,7 +38965,7 @@ MessagesManager::Dialog *MessagesManager::on_load_dialog_from_database(DialogId const DialogFilter *MessagesManager::get_server_dialog_filter(DialogFilterId dialog_filter_id) const { CHECK(!disable_get_dialog_filter_); for (const auto &dialog_filter : server_dialog_filters_) { - if (dialog_filter->dialog_filter_id == dialog_filter_id) { + if (dialog_filter->get_dialog_filter_id() == dialog_filter_id) { return dialog_filter.get(); } } @@ -38974,7 +38975,7 @@ const DialogFilter *MessagesManager::get_server_dialog_filter(DialogFilterId dia DialogFilter *MessagesManager::get_dialog_filter(DialogFilterId dialog_filter_id) { CHECK(!disable_get_dialog_filter_); for (auto &dialog_filter : dialog_filters_) { - if (dialog_filter->dialog_filter_id == dialog_filter_id) { + if (dialog_filter->get_dialog_filter_id() == dialog_filter_id) { return dialog_filter.get(); } } @@ -38984,7 +38985,7 @@ DialogFilter *MessagesManager::get_dialog_filter(DialogFilterId dialog_filter_id const DialogFilter *MessagesManager::get_dialog_filter(DialogFilterId dialog_filter_id) const { CHECK(!disable_get_dialog_filter_); for (const auto &dialog_filter : dialog_filters_) { - if (dialog_filter->dialog_filter_id == dialog_filter_id) { + if (dialog_filter->get_dialog_filter_id() == dialog_filter_id) { return dialog_filter.get(); } }