Process updateMoveStickerSetToTop update.

This commit is contained in:
levlam 2022-09-02 18:35:57 +03:00
parent c92f741a83
commit 8e5f33e699
4 changed files with 44 additions and 6 deletions

View File

@ -6740,6 +6740,39 @@ void StickersManager::on_update_sticker_sets_order(StickerType sticker_type,
}
}
// -1 - sticker set can't be moved to top, 0 - order wasn't changed, 1 - sticker set was moved to top
int StickersManager::move_installed_sticker_set_to_top(StickerType sticker_type, StickerSetId sticker_set_id) {
auto type = static_cast<int32>(sticker_type);
if (!are_installed_sticker_sets_loaded_[type]) {
return -1;
}
vector<StickerSetId> &current_sticker_set_ids = installed_sticker_set_ids_[type];
auto it = std::find(current_sticker_set_ids.begin(), current_sticker_set_ids.end(), sticker_set_id);
if (it == current_sticker_set_ids.end()) {
return -1;
}
if (sticker_set_id == current_sticker_set_ids[0]) {
CHECK(it == current_sticker_set_ids.begin());
return 0;
}
std::rotate(current_sticker_set_ids.begin(), it, it + 1);
need_update_installed_sticker_sets_[type] = true;
return 1;
}
void StickersManager::on_update_move_sticker_set_to_top(StickerType sticker_type, StickerSetId sticker_set_id) {
int result = move_installed_sticker_set_to_top(sticker_type, sticker_set_id);
if (result < 0) {
return reload_installed_sticker_sets(sticker_type, true);
}
if (result > 0) {
send_update_installed_sticker_sets();
}
}
void StickersManager::reorder_installed_sticker_sets(StickerType sticker_type,
const vector<StickerSetId> &sticker_set_ids,
Promise<Unit> &&promise) {

View File

@ -213,6 +213,8 @@ class StickersManager final : public Actor {
void on_update_sticker_sets_order(StickerType sticker_type, const vector<StickerSetId> &sticker_set_ids);
void on_update_move_sticker_set_to_top(StickerType sticker_type, StickerSetId sticker_set_id);
std::pair<int32, vector<StickerSetId>> get_archived_sticker_sets(StickerType sticker_type,
StickerSetId offset_sticker_set_id, int32 limit,
bool force, Promise<Unit> &&promise);
@ -599,6 +601,8 @@ class StickersManager final : public Actor {
int apply_installed_sticker_sets_order(StickerType sticker_type, const vector<StickerSetId> &sticker_set_ids);
int move_installed_sticker_set_to_top(StickerType sticker_type, StickerSetId sticker_set_id);
void on_update_sticker_set(StickerSet *sticker_set, bool is_installed, bool is_archived, bool is_changed,
bool from_database = false);

View File

@ -3380,6 +3380,12 @@ void UpdatesManager::on_update(tl_object_ptr<telegram_api::updateStickerSetsOrde
promise.set_value(Unit());
}
void UpdatesManager::on_update(tl_object_ptr<telegram_api::updateMoveStickerSetToTop> update, Promise<Unit> &&promise) {
auto sticker_type = get_sticker_type(update->masks_, update->emojis_);
td_->stickers_manager_->on_update_move_sticker_set_to_top(sticker_type, StickerSetId(update->stickerset_));
promise.set_value(Unit());
}
void UpdatesManager::on_update(tl_object_ptr<telegram_api::updateReadFeaturedStickers> update,
Promise<Unit> &&promise) {
td_->stickers_manager_->reload_featured_sticker_sets(StickerType::Regular, true);
@ -3586,8 +3592,4 @@ void UpdatesManager::on_update(tl_object_ptr<telegram_api::updateRecentReactions
promise.set_value(Unit());
}
void UpdatesManager::on_update(tl_object_ptr<telegram_api::updateMoveStickerSetToTop> update, Promise<Unit> &&promise) {
promise.set_value(Unit());
}
} // namespace td

View File

@ -491,6 +491,7 @@ class UpdatesManager final : public Actor {
void on_update(tl_object_ptr<telegram_api::updateNewStickerSet> update, Promise<Unit> &&promise);
void on_update(tl_object_ptr<telegram_api::updateStickerSets> update, Promise<Unit> &&promise);
void on_update(tl_object_ptr<telegram_api::updateStickerSetsOrder> update, Promise<Unit> &&promise);
void on_update(tl_object_ptr<telegram_api::updateMoveStickerSetToTop> update, Promise<Unit> &&promise);
void on_update(tl_object_ptr<telegram_api::updateReadFeaturedStickers> update, Promise<Unit> &&promise);
void on_update(tl_object_ptr<telegram_api::updateReadFeaturedEmojiStickers> update, Promise<Unit> &&promise);
void on_update(tl_object_ptr<telegram_api::updateRecentStickers> update, Promise<Unit> &&promise);
@ -539,8 +540,6 @@ class UpdatesManager final : public Actor {
// unsupported updates
void on_update(tl_object_ptr<telegram_api::updateRecentReactions> update, Promise<Unit> &&promise);
void on_update(tl_object_ptr<telegram_api::updateMoveStickerSetToTop> update, Promise<Unit> &&promise);
};
} // namespace td