diff --git a/td/telegram/StickersManager.cpp b/td/telegram/StickersManager.cpp index 18755a66a..42529651c 100644 --- a/td/telegram/StickersManager.cpp +++ b/td/telegram/StickersManager.cpp @@ -8516,18 +8516,32 @@ void StickersManager::on_sticker_set_thumbnail_uploaded(int64 random_id, Result< ->send(pending_set_sticker_set_thumbnail->short_name_, file_view.main_remote_location().as_input_document()); } -string StickersManager::get_sticker_set_short_name(FileId sticker_id) const { - string sticker_set_short_name; - const Sticker *s = get_sticker(sticker_id); +Result StickersManager::get_sticker_input_document( + const tl_object_ptr &sticker) const { + auto r_file_id = td_->file_manager_->get_input_file_id(FileType::Sticker, sticker, DialogId(), false, false); + if (r_file_id.is_error()) { + return Status::Error(400, r_file_id.error().message()); // TODO do not drop error code + } + + auto file_id = r_file_id.move_as_ok(); + auto file_view = td_->file_manager_->get_file_view(file_id); + if (!file_view.has_remote_location() || !file_view.main_remote_location().is_document() || + file_view.main_remote_location().is_web()) { + return Status::Error(400, "Wrong sticker file specified"); + } + + StickerInputDocument result; + const Sticker *s = get_sticker(file_id); if (s != nullptr && s->set_id_.is_valid()) { const StickerSet *sticker_set = get_sticker_set(s->set_id_); if (sticker_set != nullptr) { - return sticker_set->short_name_; + result.sticker_set_short_name_ = sticker_set->short_name_; } else { - return to_string(s->set_id_.get()); + result.sticker_set_short_name_ = to_string(s->set_id_.get()); } } - return string(); + result.input_document_ = file_view.main_remote_location().as_input_document(); + return std::move(result); } void StickersManager::set_sticker_position_in_set(const tl_object_ptr &sticker, int32 position, @@ -8536,38 +8550,18 @@ void StickersManager::set_sticker_position_in_set(const tl_object_ptrfile_manager_->get_input_file_id(FileType::Sticker, sticker, DialogId(), false, false); - if (r_file_id.is_error()) { - return promise.set_error(Status::Error(400, r_file_id.error().message())); // TODO do not drop error code - } - - auto file_id = r_file_id.move_as_ok(); - auto file_view = td_->file_manager_->get_file_view(file_id); - if (!file_view.has_remote_location() || !file_view.main_remote_location().is_document() || - file_view.main_remote_location().is_web()) { - return promise.set_error(Status::Error(400, "Wrong sticker file specified")); - } + TRY_RESULT_PROMISE(promise, input_document, get_sticker_input_document(sticker)); td_->create_handler(std::move(promise)) - ->send(get_sticker_set_short_name(file_id), file_view.main_remote_location().as_input_document(), position); + ->send(input_document.sticker_set_short_name_, std::move(input_document.input_document_), position); } void StickersManager::remove_sticker_from_set(const tl_object_ptr &sticker, Promise &&promise) { - auto r_file_id = td_->file_manager_->get_input_file_id(FileType::Sticker, sticker, DialogId(), false, false); - if (r_file_id.is_error()) { - return promise.set_error(Status::Error(400, r_file_id.error().message())); // TODO do not drop error code - } - - auto file_id = r_file_id.move_as_ok(); - auto file_view = td_->file_manager_->get_file_view(file_id); - if (!file_view.has_remote_location() || !file_view.main_remote_location().is_document() || - file_view.main_remote_location().is_web()) { - return promise.set_error(Status::Error(400, "Wrong sticker file specified")); - } + TRY_RESULT_PROMISE(promise, input_document, get_sticker_input_document(sticker)); td_->create_handler(std::move(promise)) - ->send(get_sticker_set_short_name(file_id), file_view.main_remote_location().as_input_document()); + ->send(input_document.sticker_set_short_name_, std::move(input_document.input_document_)); } vector StickersManager::get_attached_sticker_file_ids(const vector &int_file_ids) { diff --git a/td/telegram/StickersManager.h b/td/telegram/StickersManager.h index bf209e01a..390fe2dee 100644 --- a/td/telegram/StickersManager.h +++ b/td/telegram/StickersManager.h @@ -697,8 +697,6 @@ class StickersManager final : public Actor { StickerSetId on_get_input_sticker_set(FileId sticker_file_id, tl_object_ptr &&set_ptr, MultiPromiseActor *load_data_multipromise_ptr = nullptr); - string get_sticker_set_short_name(FileId sticker_id) const; - void on_resolve_sticker_set_short_name(FileId sticker_file_id, const string &short_name); int apply_installed_sticker_sets_order(StickerType sticker_type, const vector &sticker_set_ids); @@ -864,6 +862,12 @@ class StickersManager final : public Actor { void do_set_sticker_set_thumbnail(UserId user_id, string short_name, tl_object_ptr &&thumbnail, Promise> &&promise); + struct StickerInputDocument { + string sticker_set_short_name_; + telegram_api::object_ptr input_document_; + }; + Result get_sticker_input_document(const tl_object_ptr &sticker) const; + bool update_sticker_set_cache(const StickerSet *sticker_set, Promise &promise); const StickerSet *get_premium_gift_sticker_set();