Improve updateAvailableMessageEffects.
This commit is contained in:
parent
d9942a5765
commit
aa09223b9c
@ -7266,8 +7266,10 @@ updateWebAppMessageSent web_app_launch_id:int64 = Update;
|
|||||||
//@description The list of active emoji reactions has changed @emojis The new list of active emoji reactions
|
//@description The list of active emoji reactions has changed @emojis The new list of active emoji reactions
|
||||||
updateActiveEmojiReactions emojis:vector<string> = Update;
|
updateActiveEmojiReactions emojis:vector<string> = Update;
|
||||||
|
|
||||||
//@description The list of available message effects has changed @effect_ids The new list of available message effects. Emoji reaction effects are guaranteed to be returned before sticker effects
|
//@description The list of available message effects has changed
|
||||||
updateAvailableMessageEffects effect_ids:vector<int64> = Update;
|
//@reaction_effect_ids The new list of available message effects from emoji reactions
|
||||||
|
//@sticker_effect_ids The new list of available message effects from Premium stickers
|
||||||
|
updateAvailableMessageEffects reaction_effect_ids:vector<int64> sticker_effect_ids:vector<int64> = Update;
|
||||||
|
|
||||||
//@description The type of default reaction has changed @reaction_type The new type of the default reaction
|
//@description The type of default reaction has changed @reaction_type The new type of the default reaction
|
||||||
updateDefaultReactionType reaction_type:ReactionType = Update;
|
updateDefaultReactionType reaction_type:ReactionType = Update;
|
||||||
|
@ -1226,7 +1226,9 @@ td_api::object_ptr<td_api::messageEffect> ReactionManager::get_message_effect_ob
|
|||||||
|
|
||||||
td_api::object_ptr<td_api::updateAvailableMessageEffects> ReactionManager::get_update_available_message_effects_object()
|
td_api::object_ptr<td_api::updateAvailableMessageEffects> ReactionManager::get_update_available_message_effects_object()
|
||||||
const {
|
const {
|
||||||
return td_api::make_object<td_api::updateAvailableMessageEffects>(vector<int64>(active_message_effects_));
|
return td_api::make_object<td_api::updateAvailableMessageEffects>(
|
||||||
|
vector<int64>(active_message_effects_.reaction_effects_),
|
||||||
|
vector<int64>(active_message_effects_.sticker_effects_));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReactionManager::reload_message_effects() {
|
void ReactionManager::reload_message_effects() {
|
||||||
@ -1391,7 +1393,8 @@ void ReactionManager::on_get_message_effects(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ReactionManager::save_active_message_effects() {
|
void ReactionManager::save_active_message_effects() {
|
||||||
LOG(INFO) << "Save " << active_message_effects_.size() << " available message effects";
|
LOG(INFO) << "Save " << active_message_effects_.reaction_effects_.size() << " + "
|
||||||
|
<< active_message_effects_.sticker_effects_.size() << " available message effects";
|
||||||
G()->td_db()->get_binlog_pmc()->set("active_message_effects",
|
G()->td_db()->get_binlog_pmc()->set("active_message_effects",
|
||||||
log_event_store(active_message_effects_).as_slice().str());
|
log_event_store(active_message_effects_).as_slice().str());
|
||||||
}
|
}
|
||||||
@ -1410,17 +1413,23 @@ void ReactionManager::load_active_message_effects() {
|
|||||||
return reload_message_effects();
|
return reload_message_effects();
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG(INFO) << "Successfully loaded " << active_message_effects_.size() << " active message effects";
|
LOG(INFO) << "Successfully loaded " << active_message_effects_.reaction_effects_.size() << " + "
|
||||||
|
<< active_message_effects_.sticker_effects_.size() << " active message effects";
|
||||||
|
|
||||||
send_closure(G()->td(), &Td::send_update, get_update_available_message_effects_object());
|
send_closure(G()->td(), &Td::send_update, get_update_available_message_effects_object());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReactionManager::update_active_message_effects() {
|
void ReactionManager::update_active_message_effects() {
|
||||||
vector<int64> active_message_effects;
|
ActiveEffects active_message_effects;
|
||||||
for (auto &effect : message_effects_.effects_) {
|
for (auto &effect : message_effects_.effects_) {
|
||||||
active_message_effects.push_back(effect.id_);
|
if (effect.is_sticker()) {
|
||||||
|
active_message_effects.sticker_effects_.push_back(effect.id_);
|
||||||
|
} else {
|
||||||
|
active_message_effects.reaction_effects_.push_back(effect.id_);
|
||||||
}
|
}
|
||||||
if (active_message_effects == active_message_effects_) {
|
}
|
||||||
|
if (active_message_effects.reaction_effects_ == active_message_effects_.reaction_effects_ &&
|
||||||
|
active_message_effects.sticker_effects_ == active_message_effects_.sticker_effects_) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
active_message_effects_ = std::move(active_message_effects);
|
active_message_effects_ = std::move(active_message_effects);
|
||||||
@ -1454,7 +1463,7 @@ void ReactionManager::get_current_state(vector<td_api::object_ptr<td_api::Update
|
|||||||
for (auto &it : topic_tags_) {
|
for (auto &it : topic_tags_) {
|
||||||
updates.push_back(get_update_saved_messages_tags_object(it.first, it.second.get()));
|
updates.push_back(get_update_saved_messages_tags_object(it.first, it.second.get()));
|
||||||
}
|
}
|
||||||
if (!active_message_effects_.empty()) {
|
if (!active_message_effects_.is_empty()) {
|
||||||
updates.push_back(get_update_available_message_effects_object());
|
updates.push_back(get_update_available_message_effects_object());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -228,6 +228,21 @@ class ReactionManager final : public Actor {
|
|||||||
void parse(ParserT &parser);
|
void parse(ParserT &parser);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ActiveEffects {
|
||||||
|
vector<int64> reaction_effects_;
|
||||||
|
vector<int64> sticker_effects_;
|
||||||
|
|
||||||
|
bool is_empty() const {
|
||||||
|
return reaction_effects_.empty() && sticker_effects_.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class StorerT>
|
||||||
|
void store(StorerT &storer) const;
|
||||||
|
|
||||||
|
template <class ParserT>
|
||||||
|
void parse(ParserT &parser);
|
||||||
|
};
|
||||||
|
|
||||||
td_api::object_ptr<td_api::emojiReaction> get_emoji_reaction_object(const string &emoji) const;
|
td_api::object_ptr<td_api::emojiReaction> get_emoji_reaction_object(const string &emoji) const;
|
||||||
|
|
||||||
ReactionList &get_reaction_list(ReactionListType reaction_list_type);
|
ReactionList &get_reaction_list(ReactionListType reaction_list_type);
|
||||||
@ -314,7 +329,7 @@ class ReactionManager final : public Actor {
|
|||||||
pending_get_topic_saved_reaction_tags_queries_;
|
pending_get_topic_saved_reaction_tags_queries_;
|
||||||
|
|
||||||
Effects message_effects_;
|
Effects message_effects_;
|
||||||
vector<int64> active_message_effects_;
|
ActiveEffects active_message_effects_;
|
||||||
|
|
||||||
vector<std::pair<int64, Promise<td_api::object_ptr<td_api::messageEffect>>>> pending_get_message_effect_queries_;
|
vector<std::pair<int64, Promise<td_api::object_ptr<td_api::messageEffect>>>> pending_get_message_effect_queries_;
|
||||||
};
|
};
|
||||||
|
@ -185,4 +185,36 @@ void ReactionManager::Effects::parse(ParserT &parser) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class StorerT>
|
||||||
|
void ReactionManager::ActiveEffects::store(StorerT &storer) const {
|
||||||
|
bool has_reaction_effects = !reaction_effects_.empty();
|
||||||
|
bool has_sticker_effects = !sticker_effects_.empty();
|
||||||
|
BEGIN_STORE_FLAGS();
|
||||||
|
STORE_FLAG(has_reaction_effects);
|
||||||
|
STORE_FLAG(has_sticker_effects);
|
||||||
|
END_STORE_FLAGS();
|
||||||
|
if (has_reaction_effects) {
|
||||||
|
td::store(reaction_effects_, storer);
|
||||||
|
}
|
||||||
|
if (has_sticker_effects) {
|
||||||
|
td::store(sticker_effects_, storer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class ParserT>
|
||||||
|
void ReactionManager::ActiveEffects::parse(ParserT &parser) {
|
||||||
|
bool has_reaction_effects;
|
||||||
|
bool has_sticker_effects;
|
||||||
|
BEGIN_PARSE_FLAGS();
|
||||||
|
PARSE_FLAG(has_reaction_effects);
|
||||||
|
PARSE_FLAG(has_sticker_effects);
|
||||||
|
END_PARSE_FLAGS();
|
||||||
|
if (has_reaction_effects) {
|
||||||
|
td::parse(reaction_effects_, parser);
|
||||||
|
}
|
||||||
|
if (has_sticker_effects) {
|
||||||
|
td::parse(sticker_effects_, parser);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
Loading…
x
Reference in New Issue
Block a user