From ea3c65b3aafa0d51be80857bf8de8130e489034e Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 30 Dec 2019 00:35:19 +0300 Subject: [PATCH] Add disable_pinned_message_notifications option. GitOrigin-RevId: 42c12c98abf2bbfa6c41e67f8b5b0c2f9a3536e9 --- td/telegram/MessagesManager.cpp | 37 +++++++++++++++++++++++++++++++-- td/telegram/MessagesManager.h | 6 +++++- td/telegram/Td.cpp | 8 +++++-- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 79abf2793..067e1acc4 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -5221,11 +5221,13 @@ void MessagesManager::on_update_channel_max_unavailable_message_id(ChannelId cha "on_update_channel_max_unavailable_message_id"); } -void MessagesManager::on_update_include_sponsored_dialog_to_unread_count(bool include_sponsored_dialog) { +void MessagesManager::on_update_include_sponsored_dialog_to_unread_count() { if (td_->auth_manager_->is_bot()) { // just in case return; } + + bool include_sponsored_dialog = G()->shared_config().get_option_boolean("include_sponsored_chat_to_unread_count"); if (include_sponsored_dialog_to_unread_count_ == include_sponsored_dialog) { return; } @@ -5256,6 +5258,30 @@ void MessagesManager::on_update_include_sponsored_dialog_to_unread_count(bool in } } +void MessagesManager::on_disable_pinned_message_notifications_changed() { + if (td_->auth_manager_->is_bot()) { + // just in case + return; + } + + bool disable_pinned_message_notifications = + G()->shared_config().get_option_boolean("disable_pinned_message_notifications"); + if (disable_pinned_message_notifications_ == disable_pinned_message_notifications) { + return; + } + + disable_pinned_message_notifications_ = disable_pinned_message_notifications; + + if (disable_pinned_message_notifications_) { + for (auto &dialog : dialogs_) { + Dialog *d = dialog.second.get(); + if (d->mention_notification_group.group_id.is_valid() && d->pinned_message_notification_message_id.is_valid()) { + set_dialog_pinned_message_notification(d, MessageId()); + } + } + } +} + bool MessagesManager::need_cancel_user_dialog_action(int32 action_id, MessageContentType message_content_type) { if (message_content_type == MessageContentType::None) { return true; @@ -8696,6 +8722,8 @@ void MessagesManager::start_up() { start_time_ = Time::now(); + on_disable_pinned_message_notifications_changed(); + include_sponsored_dialog_to_unread_count_ = G()->shared_config().get_option_boolean("include_sponsored_chat_to_unread_count"); @@ -21089,7 +21117,8 @@ MessagesManager::Message *MessagesManager::add_message_to_dialog(Dialog *d, uniq if (*need_update) { if (message_content_type == MessageContentType::PinMessage && - !get_message_content_pinned_message_id(message->content.get()).is_valid()) { + (disable_pinned_message_notifications_ || + !get_message_content_pinned_message_id(message->content.get()).is_valid())) { // treat message pin without pinned message as ordinary message message->contains_mention = false; } @@ -22178,6 +22207,10 @@ void MessagesManager::fix_new_dialog(Dialog *d, unique_ptr &&last_datab } else { update_dialog_unmute_timeout(d, false, -1, false, d->notification_settings.mute_until); } + if (disable_pinned_message_notifications_ && d->mention_notification_group.group_id.is_valid() && + d->pinned_message_notification_message_id.is_valid()) { + set_dialog_pinned_message_notification(d, MessageId()); + } auto pending_it = pending_add_dialog_last_database_message_dependent_dialogs_.find(dialog_id); if (pending_it != pending_add_dialog_last_database_message_dependent_dialogs_.end()) { diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index d9d4e2b66..7c943bb65 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -292,7 +292,9 @@ class MessagesManager : public Actor { void on_update_channel_max_unavailable_message_id(ChannelId channel_id, MessageId max_unavailable_message_id); - void on_update_include_sponsored_dialog_to_unread_count(bool include_sponsored_dialog); + void on_update_include_sponsored_dialog_to_unread_count(); + + void on_disable_pinned_message_notifications_changed(); void on_user_dialog_action(DialogId dialog_id, UserId user_id, tl_object_ptr &&action, MessageContentType message_content_type = MessageContentType::None); @@ -2175,6 +2177,8 @@ class MessagesManager : public Actor { std::unordered_map notification_group_id_to_dialog_id_; + bool disable_pinned_message_notifications_ = false; + bool include_sponsored_dialog_to_unread_count_ = false; bool have_postponed_unread_message_count_update_ = false; bool have_postponed_unread_chat_count_update_ = false; diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index e2f204e9a..eea33383f 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -3543,8 +3543,7 @@ void Td::on_config_option_updated(const string &name) { } else if (name == "favorite_stickers_limit") { stickers_manager_->on_update_favorite_stickers_limit(G()->shared_config().get_option_integer(name)); } else if (name == "include_sponsored_chat_to_unread_count") { - messages_manager_->on_update_include_sponsored_dialog_to_unread_count( - G()->shared_config().get_option_boolean(name)); + messages_manager_->on_update_include_sponsored_dialog_to_unread_count(); } else if (name == "my_id") { G()->set_my_id(G()->shared_config().get_option_integer(name)); } else if (name == "session_count") { @@ -3555,6 +3554,8 @@ void Td::on_config_option_updated(const string &name) { send_closure(storage_manager_, &StorageManager::update_use_storage_optimizer); } else if (name == "rating_e_decay") { return send_closure(top_dialog_manager_, &TopDialogManager::update_rating_e_decay); + } else if (name == "disable_pinned_message_notifications") { + send_closure(messages_manager_actor_, &MessagesManager::on_disable_pinned_message_notifications_changed); } else if (name == "disable_top_chats") { send_closure(top_dialog_manager_, &TopDialogManager::update_is_enabled, !G()->shared_config().get_option_boolean(name)); @@ -6326,6 +6327,9 @@ void Td::on_request(uint64 id, td_api::setOption &request) { if (!is_bot && set_boolean_option("disable_contact_registered_notifications")) { return; } + if (!is_bot && set_boolean_option("disable_pinned_message_notifications")) { + return; + } if (!is_bot && set_boolean_option("disable_top_chats")) { return; }