From 95d4ec89739eb51057a5b806e9eca7c597a7ca72 Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 17 Sep 2021 23:36:25 +0300 Subject: [PATCH] Simplify updateAnimatedEmojiMessageClicked. --- td/generate/scheme/td_api.tl | 9 +++------ td/telegram/StickersManager.cpp | 33 ++++++++++----------------------- td/telegram/StickersManager.h | 2 +- 3 files changed, 14 insertions(+), 30 deletions(-) diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 9390eea02..39d566ae3 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -2316,10 +2316,6 @@ diceStickersRegular sticker:sticker = DiceStickers; diceStickersSlotMachine background:sticker lever:sticker left_reel:sticker center_reel:sticker right_reel:sticker = DiceStickers; -//@description Describes a click on an animated emoji by the other party, resulted in a big animation @start_delay Animation start delay @sticker The played animated sticker -animatedEmojiClick start_delay:double sticker:sticker = AnimatedEmojiClick; - - //@description Represents the result of an ImportContacts request @user_ids User identifiers of the imported contacts in the same order as they were specified in the request; 0 if the contact is not yet a registered user //@importer_count The number of users that imported the corresponding contact; 0 for already registered users or if unavailable importedContacts user_ids:vector importer_count:vector = ImportedContacts; @@ -3839,8 +3835,9 @@ updateUsersNearby users_nearby:vector = Update; //@description The list of supported dice emojis has changed @emojis The new list of supported dice emojis updateDiceEmojis emojis:vector = Update; -//@description Some animated emoji message was clicked @chat_id Chat identifier @message_id Message identifier @clicks Description of new number of unread mention messages left in the chat -updateAnimatedEmojiMessageClicked chat_id:int53 message_id:int53 clicks:vector = Update; +//@description Some animated emoji message was clicked and a big animated sticker should be played if the message is visible on the screen. chatActionEnjoyingAnimations with the text of the message needs to be sent if the sticker is played +//@chat_id Chat identifier @message_id Message identifier @sticker The animated sticker to be played +updateAnimatedEmojiMessageClicked chat_id:int53 message_id:int53 sticker:sticker = Update; //@description The parameters of animation search through GetOption("animation_search_bot_username") bot has changed @provider Name of the animation search provider @emojis The new list of emojis suggested for searching updateAnimationSearchParameters provider:string emojis:vector = Update; diff --git a/td/telegram/StickersManager.cpp b/td/telegram/StickersManager.cpp index 7b59be0ee..f41e424d6 100644 --- a/td/telegram/StickersManager.cpp +++ b/td/telegram/StickersManager.cpp @@ -4273,7 +4273,8 @@ void StickersManager::schedule_update_animated_emoji_clicked(const StickerSet *s } } - vector> stickers; + auto now = Time::now(); + auto start_time = max(now, next_update_animated_emoji_clicked_); for (size_t i = 0; i < clicks.size(); i++) { auto index = clicks[i].first; auto sticker_id = sticker_ids[index]; @@ -4281,28 +4282,17 @@ void StickersManager::schedule_update_animated_emoji_clicked(const StickerSet *s LOG(INFO) << "Failed to find sticker for " << emoji << " with index " << index; return; } - stickers.emplace_back(sticker_id, clicks[i].second); - } - CHECK(!stickers.empty()); - - auto now = Time::now(); - if (now >= next_update_animated_emoji_clicked_) { - send_update_animated_emoji_clicked(full_message_id, std::move(stickers)); - next_update_animated_emoji_clicked_ = now + clicks.back().second + MIN_ANIMATED_EMOJI_CLICK_DELAY; - } else { - create_actor("SendUpdateAnimatedEmojiClicked", next_update_animated_emoji_clicked_ - now, - PromiseCreator::lambda([actor_id = actor_id(this), full_message_id, - stickers = std::move(stickers)](Result result) mutable { - send_closure(actor_id, &StickersManager::send_update_animated_emoji_clicked, - full_message_id, std::move(stickers)); - })) + create_actor( + "SendUpdateAnimatedEmojiClicked", start_time + clicks[i].second - now, + PromiseCreator::lambda([actor_id = actor_id(this), full_message_id, sticker_id](Result result) { + send_closure(actor_id, &StickersManager::send_update_animated_emoji_clicked, full_message_id, sticker_id); + })) .release(); - next_update_animated_emoji_clicked_ += clicks.back().second + MIN_ANIMATED_EMOJI_CLICK_DELAY; } + next_update_animated_emoji_clicked_ = start_time + clicks.back().second + MIN_ANIMATED_EMOJI_CLICK_DELAY; } -void StickersManager::send_update_animated_emoji_clicked(FullMessageId full_message_id, - vector> stickers) { +void StickersManager::send_update_animated_emoji_clicked(FullMessageId full_message_id, FileId sticker_id) { if (td_->messages_manager_->is_message_edited_recently(full_message_id, 2)) { // includes deleted full_message_id return; @@ -4312,12 +4302,9 @@ void StickersManager::send_update_animated_emoji_clicked(FullMessageId full_mess return; } - auto result = transform(stickers, [this](const std::pair &sticker) { - return td_api::make_object(sticker.second, get_sticker_object(sticker.first)); - }); send_closure(G()->td(), &Td::send_update, td_api::make_object( - dialog_id.get(), full_message_id.get_message_id().get(), std::move(result))); + dialog_id.get(), full_message_id.get_message_id().get(), get_sticker_object(sticker_id))); } void StickersManager::view_featured_sticker_sets(const vector &sticker_set_ids) { diff --git a/td/telegram/StickersManager.h b/td/telegram/StickersManager.h index 305cfd099..6598dc5a0 100644 --- a/td/telegram/StickersManager.h +++ b/td/telegram/StickersManager.h @@ -604,7 +604,7 @@ class StickersManager final : public Actor { void schedule_update_animated_emoji_clicked(const StickerSet *sticker_set, const string &emoji, FullMessageId full_message_id, vector> clicks); - void send_update_animated_emoji_clicked(FullMessageId full_message_id, vector> stickers); + void send_update_animated_emoji_clicked(FullMessageId full_message_id, FileId sticker_id); td_api::object_ptr get_update_dice_emojis_object() const;