From a4fe4c93b3f7517d9164f0df7b0979643c644d8c Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 9 Mar 2018 18:00:07 +0300 Subject: [PATCH] New stickers by empji suggestions. GitOrigin-RevId: 6396bb77310fc86cec1cb6d4fd13b5e782ffd7a3 --- td/telegram/StickersManager.cpp | 30 +++++++++++++++++++++++------- td/telegram/Td.cpp | 2 +- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/td/telegram/StickersManager.cpp b/td/telegram/StickersManager.cpp index dbe09da8..32b2165e 100644 --- a/td/telegram/StickersManager.cpp +++ b/td/telegram/StickersManager.cpp @@ -1733,6 +1733,10 @@ vector StickersManager::get_stickers(string emoji, int32 limit, bool for load_favorite_stickers(std::move(promise)); return {}; } + if (!are_featured_sticker_sets_loaded_) { + load_featured_sticker_sets(std::move(promise)); + return {}; + } } vector sets_to_load; @@ -1753,18 +1757,16 @@ vector StickersManager::get_stickers(string emoji, int32 limit, bool for vector prepend_sticker_ids; if (!emoji.empty()) { prepend_sticker_ids.reserve(favorite_sticker_ids_.size() + recent_sticker_ids_[0].size()); - append(prepend_sticker_ids, favorite_sticker_ids_); - for (auto sticker_id : recent_sticker_ids_[0]) { - if (std::find(favorite_sticker_ids_.begin(), favorite_sticker_ids_.end(), sticker_id) == - favorite_sticker_ids_.end()) { + append(prepend_sticker_ids, recent_sticker_ids_[0]); + for (auto sticker_id : favorite_sticker_ids_) { + if (std::find(prepend_sticker_ids.begin(), prepend_sticker_ids.end(), sticker_id) == prepend_sticker_ids.end()) { prepend_sticker_ids.push_back(sticker_id); } } for (const auto &sticker_id : prepend_sticker_ids) { const Sticker *s = get_sticker(sticker_id); - if (s->set_id != 0 && std::find(installed_sticker_set_ids_[0].begin(), installed_sticker_set_ids_[0].end(), - s->set_id) == installed_sticker_set_ids_[0].end()) { + if (s->set_id != 0 && std::find(sets_to_load.begin(), sets_to_load.end(), s->set_id) == sets_to_load.end()) { const StickerSet *sticker_set = get_sticker_set(s->set_id); if (sticker_set == nullptr || !sticker_set->is_loaded) { sets_to_load.push_back(s->set_id); @@ -1807,7 +1809,14 @@ vector StickersManager::get_stickers(string emoji, int32 limit, bool for } } } else { + vector examined_sticker_set_ids = featured_sticker_set_ids_; for (const auto &sticker_set_id : installed_sticker_set_ids_[0]) { + if (std::find(examined_sticker_set_ids.begin(), examined_sticker_set_ids.end(), sticker_set_id) == + examined_sticker_set_ids.end()) { + examined_sticker_set_ids.push_back(sticker_set_id); + } + } + for (const auto &sticker_set_id : examined_sticker_set_ids) { const StickerSet *sticker_set = get_sticker_set(sticker_set_id); if (sticker_set == nullptr || !sticker_set->was_loaded) { continue; @@ -1821,7 +1830,14 @@ vector StickersManager::get_stickers(string emoji, int32 limit, bool for vector sorted; sorted.reserve(min(limit_size_t, result.size())); - for (const auto &sticker_id : prepend_sticker_ids) { + auto recent_stickers_size = recent_sticker_ids_[0].size(); + const size_t MAX_RECENT_STICKERS = 5; + for (size_t i = 0; i < prepend_sticker_ids.size(); i++) { + if (sorted.size() == MAX_RECENT_STICKERS && i < recent_stickers_size) { + continue; + } + + auto sticker_id = prepend_sticker_ids[i]; bool is_good = false; auto it = std::find(result.begin(), result.end(), sticker_id); if (it != result.end()) { diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index aa362a90..4bb15914 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -2766,7 +2766,7 @@ class GetStickersRequest : public RequestActor<> { public: GetStickersRequest(ActorShared td, uint64 request_id, string &&emoji, int32 limit) : RequestActor(std::move(td), request_id), emoji_(std::move(emoji)), limit_(limit) { - set_tries(5); + set_tries(6); } };