diff --git a/td/telegram/StickersManager.cpp b/td/telegram/StickersManager.cpp index c9a180569..9c615cd91 100644 --- a/td/telegram/StickersManager.cpp +++ b/td/telegram/StickersManager.cpp @@ -1235,7 +1235,6 @@ StickersManager::StickersManager(Td *td, ActorShared<> parent) : td_(td), parent narrow_cast(G()->shared_config().get_option_integer("recent_stickers_limit", 200))); on_update_favorite_stickers_limit( narrow_cast(G()->shared_config().get_option_integer("favorite_stickers_limit", 5))); - on_update_dice_emojis(); next_click_animated_emoji_message_time_ = Time::now(); next_update_animated_emoji_clicked_time_ = Time::now(); @@ -1280,7 +1279,11 @@ void StickersManager::init() { on_update_dice_success_values(); - load_special_sticker_set(add_special_sticker_set(SpecialStickerSetType::animated_emoji())); + on_update_disable_animated_emojis(); + + if (!disable_animated_emojis_) { + load_special_sticker_set(add_special_sticker_set(SpecialStickerSetType::animated_emoji())); + } if (G()->parameters().use_file_db) { auto old_featured_sticker_set_count_str = G()->td_db()->get_binlog_pmc()->get("old_featured_sticker_set_count"); @@ -1408,17 +1411,7 @@ void StickersManager::on_load_special_sticker_set(const SpecialStickerSetType &t CHECK(sticker_set->was_loaded); if (type.type_ == SpecialStickerSetType::animated_emoji()) { - vector full_message_ids; - for (const auto &it : emoji_messages_) { - if (get_animated_emoji_sticker(sticker_set, it.first).first.is_valid()) { - for (auto full_message_id : it.second) { - full_message_ids.push_back(full_message_id); - } - } - } - for (auto full_message_id : full_message_ids) { - td_->messages_manager_->on_external_update_message_content(full_message_id); - } + try_update_animated_emoji_messages(); return; } @@ -1944,7 +1937,7 @@ std::pair StickersManager::get_animated_emoji_sticker(const Sticker } std::pair StickersManager::get_animated_emoji_sticker(const string &emoji) { - if (td_->auth_manager_->is_bot()) { + if (td_->auth_manager_->is_bot() || disable_animated_emojis_) { return {}; } auto &special_sticker_set = add_special_sticker_set(SpecialStickerSetType::animated_emoji()); @@ -1966,7 +1959,7 @@ std::pair StickersManager::get_animated_emoji_sticker(const string td_api::object_ptr StickersManager::get_message_content_animated_emoji_object( const string &emoji) { auto animated_sticker = get_animated_emoji_sticker(emoji); - if (animated_sticker.first.is_valid()) { + if (animated_sticker.first.is_valid() && !disable_animated_emojis_) { return td_api::make_object(get_sticker_object(animated_sticker.first), emoji); } return td_api::make_object( @@ -2945,14 +2938,6 @@ void StickersManager::on_get_special_sticker_set(const SpecialStickerSetType &ty CHECK(s->is_inited); CHECK(s->is_loaded); - /* - if (type.type_ == SpecialStickerSetType::animated_emoji_click()) { - for (auto &sticker_id : s->sticker_ids) { - // TODO get supported emoji and their numbers - } - } - */ - LOG(INFO) << "Receive special sticker set " << type.type_ << ": " << sticker_set_id << ' ' << s->access_hash << ' ' << s->short_name; auto &sticker_set = add_special_sticker_set(type.type_); @@ -4040,6 +4025,22 @@ void StickersManager::on_update_dice_success_values() { }); } +void StickersManager::on_update_disable_animated_emojis() { + if (G()->close_flag() || td_->auth_manager_->is_bot() || !is_inited_) { + return; + } + + auto disable_animated_emojis = G()->shared_config().get_option_boolean("disable_animated_emoji"); + if (disable_animated_emojis == disable_animated_emojis_) { + return; + } + disable_animated_emojis_ = disable_animated_emojis; + if (!disable_animated_emojis_) { + load_special_sticker_set(add_special_sticker_set(SpecialStickerSetType::animated_emoji())); + } + try_update_animated_emoji_messages(); +} + void StickersManager::on_update_sticker_sets() { // TODO better support archived_sticker_set_ids_[0].clear(); @@ -4051,6 +4052,22 @@ void StickersManager::on_update_sticker_sets() { reload_installed_sticker_sets(true, true); } +void StickersManager::try_update_animated_emoji_messages() { + vector full_message_ids; + /* + for (const auto &it : emoji_messages_) { + if (get_animated_emoji_sticker(sticker_set, it.first).first.is_valid()) { + for (auto full_message_id : it.second) { + full_message_ids.push_back(full_message_id); + } + } + } + */ + for (auto full_message_id : full_message_ids) { + td_->messages_manager_->on_external_update_message_content(full_message_id); + } +} + void StickersManager::register_dice(const string &emoji, int32 value, FullMessageId full_message_id, const char *source) { CHECK(!emoji.empty()); diff --git a/td/telegram/StickersManager.h b/td/telegram/StickersManager.h index ab830f38c..97de82c38 100644 --- a/td/telegram/StickersManager.h +++ b/td/telegram/StickersManager.h @@ -148,6 +148,8 @@ class StickersManager final : public Actor { void on_uninstall_sticker_set(StickerSetId set_id); + void on_update_disable_animated_emojis(); + void on_update_dice_emojis(); void on_update_dice_success_values(); @@ -607,6 +609,8 @@ class StickersManager final : public Actor { std::pair get_animated_emoji_sticker(const string &emoji); + void try_update_animated_emoji_messages(); + vector get_animated_emoji_click_stickers(const StickerSet *sticker_set, Slice emoji) const; void choose_animated_emoji_click_sticker(const StickerSet *sticker_set, Slice message_text, @@ -812,6 +816,8 @@ class StickersManager final : public Actor { string dice_success_values_str_; vector> dice_success_values_; + + bool disable_animated_emojis_ = false; }; } // namespace td diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index d5af1c0e8..d741605d0 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -3321,6 +3321,8 @@ void Td::on_config_option_updated(const string &name) { } else if (name == "favorite_stickers_limit") { stickers_manager_->on_update_favorite_stickers_limit( narrow_cast(G()->shared_config().get_option_integer(name))); + } else if (name == "disable_animated_emoji") { + stickers_manager_->on_update_disable_animated_emojis(); } else if (name == "my_id") { G()->set_my_id(G()->shared_config().get_option_integer(name)); } else if (name == "session_count") { @@ -7338,6 +7340,9 @@ void Td::on_request(uint64 id, td_api::setOption &request) { } break; case 'd': + if (!is_bot && set_boolean_option("disable_animated_emoji")) { + return; + } if (!is_bot && set_boolean_option("disable_contact_registered_notifications")) { return; }