From 1764cda9fa51f8d461cd8d6c7cefcbd1dedc7a07 Mon Sep 17 00:00:00 2001 From: levlam Date: Sat, 6 Aug 2022 23:39:54 +0300 Subject: [PATCH] Automatically load installed sticker sets in StickersManager::get_stickers. --- td/telegram/StickersManager.cpp | 19 ++++++++++++++++++- td/telegram/Td.cpp | 2 +- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/td/telegram/StickersManager.cpp b/td/telegram/StickersManager.cpp index e8659f0d4..d35533410 100644 --- a/td/telegram/StickersManager.cpp +++ b/td/telegram/StickersManager.cpp @@ -3814,13 +3814,30 @@ std::pair, vector> StickersManager::split_stickers_by_pre vector StickersManager::get_stickers(StickerType sticker_type, string emoji, int32 limit, DialogId dialog_id, bool force, Promise &&promise) { + if (G()->close_flag()) { + promise.set_error(G()->close_status()); + return {}; + } + if (limit <= 0) { promise.set_error(Status::Error(400, "Parameter limit must be positive")); return {}; } + auto type = static_cast(sticker_type); if (!are_installed_sticker_sets_loaded_[type]) { - load_installed_sticker_sets(sticker_type, std::move(promise)); + CHECK(force == false); + load_installed_sticker_sets( + sticker_type, + PromiseCreator::lambda([actor_id = actor_id(this), sticker_type, emoji = std::move(emoji), limit, dialog_id, + force, promise = std::move(promise)](Result result) mutable { + if (result.is_error()) { + promise.set_error(result.move_as_error()); + } else { + send_closure(actor_id, &StickersManager::get_stickers, sticker_type, std::move(emoji), limit, dialog_id, + false, std::move(promise)); + } + })); return {}; } diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index c551b4c7e..327a342b6 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -2007,7 +2007,7 @@ class GetStickersRequest final : public RequestActor<> { , emoji_(std::move(emoji)) , limit_(limit) , dialog_id_(dialog_id) { - set_tries(5); + set_tries(4); } };