Simplify updateAnimatedEmojiMessageClicked.

This commit is contained in:
levlam 2021-09-17 23:36:25 +03:00
parent b15244f59d
commit 95d4ec8973
3 changed files with 14 additions and 30 deletions

View File

@ -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<int53> importer_count:vector<int32> = ImportedContacts;
@ -3839,8 +3835,9 @@ updateUsersNearby users_nearby:vector<chatNearby> = Update;
//@description The list of supported dice emojis has changed @emojis The new list of supported dice emojis
updateDiceEmojis emojis:vector<string> = 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<animatedEmojiClick> = 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<string> = Update;

View File

@ -4273,7 +4273,8 @@ void StickersManager::schedule_update_animated_emoji_clicked(const StickerSet *s
}
}
vector<std::pair<FileId, double>> 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<SleepActor>("SendUpdateAnimatedEmojiClicked", next_update_animated_emoji_clicked_ - now,
PromiseCreator::lambda([actor_id = actor_id(this), full_message_id,
stickers = std::move(stickers)](Result<Unit> result) mutable {
send_closure(actor_id, &StickersManager::send_update_animated_emoji_clicked,
full_message_id, std::move(stickers));
}))
create_actor<SleepActor>(
"SendUpdateAnimatedEmojiClicked", start_time + clicks[i].second - now,
PromiseCreator::lambda([actor_id = actor_id(this), full_message_id, sticker_id](Result<Unit> 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<std::pair<FileId, double>> 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<FileId, double> &sticker) {
return td_api::make_object<td_api::animatedEmojiClick>(sticker.second, get_sticker_object(sticker.first));
});
send_closure(G()->td(), &Td::send_update,
td_api::make_object<td_api::updateAnimatedEmojiMessageClicked>(
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<StickerSetId> &sticker_set_ids) {

View File

@ -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<std::pair<int, double>> clicks);
void send_update_animated_emoji_clicked(FullMessageId full_message_id, vector<std::pair<FileId, double>> stickers);
void send_update_animated_emoji_clicked(FullMessageId full_message_id, FileId sticker_id);
td_api::object_ptr<td_api::updateDiceEmojis> get_update_dice_emojis_object() const;