Load special sticker sets from database before reloading them from server.

This commit is contained in:
levlam 2021-12-01 22:05:40 +03:00
parent 3b1ec88067
commit 39a8621182
2 changed files with 20 additions and 9 deletions

View File

@ -1391,7 +1391,11 @@ void StickersManager::load_special_sticker_set(SpecialStickerSet &sticker_set) {
} }
} }
void StickersManager::reload_special_sticker_set_by_type(SpecialStickerSetType type) { void StickersManager::reload_special_sticker_set_by_type(SpecialStickerSetType type, bool is_recursive) {
if (G()->close_flag()) {
return;
}
auto &sticker_set = add_special_sticker_set(type); auto &sticker_set = add_special_sticker_set(type);
if (sticker_set.is_being_reloaded_) { if (sticker_set.is_being_reloaded_) {
return; return;
@ -1402,10 +1406,14 @@ void StickersManager::reload_special_sticker_set_by_type(SpecialStickerSetType t
} }
const auto *s = get_sticker_set(sticker_set.id_); const auto *s = get_sticker_set(sticker_set.id_);
if (s != nullptr && s->is_inited) { if (s != nullptr && s->is_inited && s->was_loaded) {
if (s->was_loaded) {
return reload_special_sticker_set(sticker_set, s->is_loaded ? s->hash : 0); return reload_special_sticker_set(sticker_set, s->is_loaded ? s->hash : 0);
} }
if (!is_recursive) {
auto promise = PromiseCreator::lambda([actor_id = actor_id(this), type = std::move(type)](Unit result) mutable {
send_closure(actor_id, &StickersManager::reload_special_sticker_set_by_type, std::move(type), true);
});
return load_sticker_sets({sticker_set.id_}, std::move(promise));
} }
reload_special_sticker_set(sticker_set, 0); reload_special_sticker_set(sticker_set, 0);
@ -4179,7 +4187,8 @@ void StickersManager::on_update_disable_animated_emojis() {
} }
disable_animated_emojis_ = disable_animated_emojis; disable_animated_emojis_ = disable_animated_emojis;
if (!disable_animated_emojis_) { if (!disable_animated_emojis_) {
load_special_sticker_set(add_special_sticker_set(SpecialStickerSetType::animated_emoji())); reload_special_sticker_set_by_type(SpecialStickerSetType::animated_emoji());
reload_special_sticker_set_by_type(SpecialStickerSetType::animated_emoji_click());
} }
try_update_animated_emoji_messages(); try_update_animated_emoji_messages();
} }
@ -7416,9 +7425,11 @@ void StickersManager::after_get_difference() {
get_recent_stickers(true, Auto()); get_recent_stickers(true, Auto());
get_favorite_stickers(Auto()); get_favorite_stickers(Auto());
if (!disable_animated_emojis_) {
reload_special_sticker_set_by_type(SpecialStickerSetType::animated_emoji()); reload_special_sticker_set_by_type(SpecialStickerSetType::animated_emoji());
reload_special_sticker_set_by_type(SpecialStickerSetType::animated_emoji_click()); reload_special_sticker_set_by_type(SpecialStickerSetType::animated_emoji_click());
} }
}
} }
void StickersManager::get_current_state(vector<td_api::object_ptr<td_api::Update>> &updates) const { void StickersManager::get_current_state(vector<td_api::object_ptr<td_api::Update>> &updates) const {

View File

@ -666,7 +666,7 @@ class StickersManager final : public Actor {
void load_special_sticker_set(SpecialStickerSet &sticker_set); void load_special_sticker_set(SpecialStickerSet &sticker_set);
void reload_special_sticker_set_by_type(SpecialStickerSetType type); void reload_special_sticker_set_by_type(SpecialStickerSetType type, bool is_recursive = false);
void reload_special_sticker_set(SpecialStickerSet &sticker_set, int32 hash); void reload_special_sticker_set(SpecialStickerSet &sticker_set, int32 hash);