From 40b5b586e64a9dd04a45bb304e490e94c7caf250 Mon Sep 17 00:00:00 2001 From: levlam Date: Sun, 24 Jul 2022 14:53:48 +0300 Subject: [PATCH] Add sticker_type to getStickers. --- td/generate/scheme/td_api.tl | 4 ++-- td/telegram/StickersManager.cpp | 17 +++++++++-------- td/telegram/StickersManager.h | 2 +- td/telegram/Td.cpp | 11 +++++++---- td/telegram/cli.cpp | 8 ++++---- 5 files changed, 23 insertions(+), 19 deletions(-) diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 1c46ad9c8..3d8c1e428 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -5900,8 +5900,8 @@ sharePhoneNumber user_id:int53 = Ok; getUserProfilePhotos user_id:int53 offset:int32 limit:int32 = ChatPhotos; -//@description Returns stickers from the installed sticker sets that correspond to a given emoji. If the emoji is non-empty, favorite and recently used stickers may also be returned @emoji String representation of emoji. If empty, returns all known installed stickers @limit The maximum number of stickers to be returned -getStickers emoji:string limit:int32 = Stickers; +//@description Returns stickers from the installed sticker sets that correspond to a given emoji. If the emoji is non-empty and sticker type is stickerTypeRegular, then favorite and recently used stickers may also be returned @sticker_type Type of the sticker sets to return @emoji String representation of emoji. If empty, returns all known installed stickers @limit The maximum number of stickers to be returned +getStickers sticker_type:StickerType emoji:string limit:int32 = Stickers; //@description Searches for stickers from public sticker sets that correspond to a given emoji @emoji String representation of emoji; must be non-empty @limit The maximum number of stickers to be returned searchStickers emoji:string limit:int32 = Stickers; diff --git a/td/telegram/StickersManager.cpp b/td/telegram/StickersManager.cpp index c4745299c..c35e97c86 100644 --- a/td/telegram/StickersManager.cpp +++ b/td/telegram/StickersManager.cpp @@ -3759,20 +3759,21 @@ std::pair, vector> StickersManager::split_stickers_by_pre return {std::move(regular_sticker_ids), std::move(premium_sticker_ids)}; } -vector StickersManager::get_stickers(string emoji, int32 limit, bool force, Promise &&promise) { +vector StickersManager::get_stickers(StickerType sticker_type, string emoji, int32 limit, bool force, + Promise &&promise) { if (limit <= 0) { promise.set_error(Status::Error(400, "Parameter limit must be positive")); return {}; } - auto type = static_cast(StickerType::Regular); + auto type = static_cast(sticker_type); if (!are_installed_sticker_sets_loaded_[type]) { - load_installed_sticker_sets(StickerType::Regular, std::move(promise)); + load_installed_sticker_sets(sticker_type, std::move(promise)); return {}; } remove_emoji_modifiers_in_place(emoji); - if (!emoji.empty()) { - if (!are_recent_stickers_loaded_[0]) { + if (!emoji.empty() && sticker_type == StickerType::Regular) { + if (!are_recent_stickers_loaded_[0 /*is_attached*/]) { load_recent_stickers(false, std::move(promise)); return {}; } @@ -3782,7 +3783,7 @@ vector StickersManager::get_stickers(string emoji, int32 limit, bool for } /* if (!are_featured_sticker_sets_loaded_[type]) { - load_featured_sticker_sets(StickerType::Regular, std::move(promise)); + load_featured_sticker_sets(sticker_type, std::move(promise)); return {}; } */ @@ -3804,7 +3805,7 @@ vector StickersManager::get_stickers(string emoji, int32 limit, bool for } vector prepend_sticker_ids; - if (!emoji.empty()) { + if (!emoji.empty() && sticker_type == StickerType::Regular) { prepend_sticker_ids.reserve(favorite_sticker_ids_.size() + recent_sticker_ids_[0].size()); append(prepend_sticker_ids, recent_sticker_ids_[0]); for (auto sticker_id : favorite_sticker_ids_) { @@ -3979,7 +3980,7 @@ vector StickersManager::get_stickers(string emoji, int32 limit, bool for break; } } - if (sorted.size() < limit_size_t) { + if (sorted.size() < limit_size_t && sticker_type == StickerType::Regular) { auto premium_count = G()->shared_config().get_option_integer("stickers_premium_by_emoji_num", 0); if (premium_count > 0) { for (const auto &sticker_id : premium_sticker_ids) { diff --git a/td/telegram/StickersManager.h b/td/telegram/StickersManager.h index e570e2440..682e6bd2e 100644 --- a/td/telegram/StickersManager.h +++ b/td/telegram/StickersManager.h @@ -133,7 +133,7 @@ class StickersManager final : public Actor { tl_object_ptr input_file, BufferSlice thumbnail, int32 layer) const; - vector get_stickers(string emoji, int32 limit, bool force, Promise &&promise); + vector get_stickers(StickerType sticker_type, string emoji, int32 limit, bool force, Promise &&promise); vector search_stickers(string emoji, int32 limit, Promise &&promise); diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 620d23c07..673eedcbf 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -1983,13 +1983,15 @@ class GetScopeNotificationSettingsRequest final : public RequestActor<> { }; class GetStickersRequest final : public RequestActor<> { + StickerType sticker_type_; string emoji_; int32 limit_; vector sticker_ids_; void do_run(Promise &&promise) final { - sticker_ids_ = td_->stickers_manager_->get_stickers(emoji_, limit_, get_tries() < 2, std::move(promise)); + sticker_ids_ = + td_->stickers_manager_->get_stickers(sticker_type_, emoji_, limit_, get_tries() < 2, std::move(promise)); } void do_send_result() final { @@ -1997,8 +1999,8 @@ class GetStickersRequest final : 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) { + GetStickersRequest(ActorShared td, uint64 request_id, StickerType sticker_type, string &&emoji, int32 limit) + : RequestActor(std::move(td), request_id), sticker_type_(sticker_type), emoji_(std::move(emoji)), limit_(limit) { set_tries(5); } }; @@ -6987,7 +6989,8 @@ void Td::on_request(uint64 id, td_api::closeSecretChat &request) { void Td::on_request(uint64 id, td_api::getStickers &request) { CHECK_IS_USER(); CLEAN_INPUT_STRING(request.emoji_); - CREATE_REQUEST(GetStickersRequest, std::move(request.emoji_), request.limit_); + CREATE_REQUEST(GetStickersRequest, get_sticker_type(request.sticker_type_), std::move(request.emoji_), + request.limit_); } void Td::on_request(uint64 id, td_api::searchStickers &request) { diff --git a/td/telegram/cli.cpp b/td/telegram/cli.cpp index 322525291..1ec2cc8aa 100644 --- a/td/telegram/cli.cpp +++ b/td/telegram/cli.cpp @@ -2610,10 +2610,10 @@ class CliClient final : public Actor { send_request(td_api::make_object(user_id)); } else if (op == "gsu") { send_request(td_api::make_object()); - } else if (op == "gs") { + } else if (op == "gs" || op == "gsmm" || op == "gsee") { SearchQuery query; get_args(args, query); - send_request(td_api::make_object(query.query, query.limit)); + send_request(td_api::make_object(as_sticker_type(op), query.query, query.limit)); } else if (op == "sst") { SearchQuery query; get_args(args, query); @@ -2623,7 +2623,7 @@ class CliClient final : public Actor { get_args(args, sticker_set_id); send_request(td_api::make_object(sticker_set_id)); } else if (op == "giss" || op == "gissm" || op == "gisse") { - send_request(td_api::make_object(as_sticker_type(args))); + send_request(td_api::make_object(as_sticker_type(op))); } else if (op == "gass" || op == "gassm" || op == "gasse") { int64 offset_sticker_set_id; string limit; @@ -2902,7 +2902,7 @@ class CliClient final : public Actor { string message_ids; get_args(args, chat_id, message_ids); send_request(td_api::make_object(chat_id, as_message_ids(message_ids))); - } else if (op == "gsm") { + } else if (op == "gcspm") { ChatId chat_id; get_args(args, chat_id); send_request(td_api::make_object(chat_id));