Use InvokeAfter for all queries changing sticker sets.
This commit is contained in:
parent
b845766bd1
commit
f3bb075f62
@ -13,6 +13,8 @@
|
|||||||
|
|
||||||
#include "td/utils/common.h"
|
#include "td/utils/common.h"
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
namespace td {
|
namespace td {
|
||||||
|
|
||||||
class ChainId {
|
class ChainId {
|
||||||
@ -29,6 +31,9 @@ class ChainId {
|
|||||||
ChainId(PollId poll_id) : id(static_cast<uint64>(poll_id.get())) {
|
ChainId(PollId poll_id) : id(static_cast<uint64>(poll_id.get())) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ChainId(const string &str) : id(std::hash<string>()(str)) {
|
||||||
|
}
|
||||||
|
|
||||||
uint64 get() const {
|
uint64 get() const {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
@ -1015,9 +1015,11 @@ class CreateNewStickerSetQuery final : public Td::ResultHandler {
|
|||||||
flags |= telegram_api::stickers_createStickerSet::SOFTWARE_MASK;
|
flags |= telegram_api::stickers_createStickerSet::SOFTWARE_MASK;
|
||||||
}
|
}
|
||||||
|
|
||||||
send_query(G()->net_query_creator().create(telegram_api::stickers_createStickerSet(
|
send_query(G()->net_query_creator().create(
|
||||||
flags, false /*ignored*/, false /*ignored*/, false /*ignored*/, std::move(input_user), title, short_name,
|
telegram_api::stickers_createStickerSet(flags, false /*ignored*/, false /*ignored*/, false /*ignored*/,
|
||||||
nullptr, std::move(input_stickers), software)));
|
std::move(input_user), title, short_name, nullptr,
|
||||||
|
std::move(input_stickers), software),
|
||||||
|
{{short_name}}));
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
void on_result(BufferSlice packet) final {
|
||||||
@ -1046,8 +1048,10 @@ class AddStickerToSetQuery final : public Td::ResultHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void send(const string &short_name, tl_object_ptr<telegram_api::inputStickerSetItem> &&input_sticker) {
|
void send(const string &short_name, tl_object_ptr<telegram_api::inputStickerSetItem> &&input_sticker) {
|
||||||
send_query(G()->net_query_creator().create(telegram_api::stickers_addStickerToSet(
|
send_query(G()->net_query_creator().create(
|
||||||
make_tl_object<telegram_api::inputStickerSetShortName>(short_name), std::move(input_sticker))));
|
telegram_api::stickers_addStickerToSet(make_tl_object<telegram_api::inputStickerSetShortName>(short_name),
|
||||||
|
std::move(input_sticker)),
|
||||||
|
{{short_name}}));
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
void on_result(BufferSlice packet) final {
|
||||||
@ -1076,8 +1080,10 @@ class SetStickerSetThumbnailQuery final : public Td::ResultHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void send(const string &short_name, tl_object_ptr<telegram_api::InputDocument> &&input_document) {
|
void send(const string &short_name, tl_object_ptr<telegram_api::InputDocument> &&input_document) {
|
||||||
send_query(G()->net_query_creator().create(telegram_api::stickers_setStickerSetThumb(
|
send_query(G()->net_query_creator().create(
|
||||||
make_tl_object<telegram_api::inputStickerSetShortName>(short_name), std::move(input_document))));
|
telegram_api::stickers_setStickerSetThumb(make_tl_object<telegram_api::inputStickerSetShortName>(short_name),
|
||||||
|
std::move(input_document)),
|
||||||
|
{{short_name}}));
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
void on_result(BufferSlice packet) final {
|
||||||
@ -1105,9 +1111,9 @@ class SetStickerPositionQuery final : public Td::ResultHandler {
|
|||||||
explicit SetStickerPositionQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
explicit SetStickerPositionQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void send(tl_object_ptr<telegram_api::inputDocument> &&input_document, int32 position) {
|
void send(const string &short_name, tl_object_ptr<telegram_api::inputDocument> &&input_document, int32 position) {
|
||||||
send_query(G()->net_query_creator().create(
|
send_query(G()->net_query_creator().create(
|
||||||
telegram_api::stickers_changeStickerPosition(std::move(input_document), position)));
|
telegram_api::stickers_changeStickerPosition(std::move(input_document), position), {{short_name}}));
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
void on_result(BufferSlice packet) final {
|
||||||
@ -1135,8 +1141,9 @@ class DeleteStickerFromSetQuery final : public Td::ResultHandler {
|
|||||||
explicit DeleteStickerFromSetQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
explicit DeleteStickerFromSetQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void send(tl_object_ptr<telegram_api::inputDocument> &&input_document) {
|
void send(const string &short_name, tl_object_ptr<telegram_api::inputDocument> &&input_document) {
|
||||||
send_query(G()->net_query_creator().create(telegram_api::stickers_removeStickerFromSet(std::move(input_document))));
|
send_query(G()->net_query_creator().create(telegram_api::stickers_removeStickerFromSet(std::move(input_document)),
|
||||||
|
{{short_name}}));
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
void on_result(BufferSlice packet) final {
|
||||||
@ -6154,6 +6161,18 @@ 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());
|
->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);
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return string();
|
||||||
|
}
|
||||||
|
|
||||||
void StickersManager::set_sticker_position_in_set(const tl_object_ptr<td_api::InputFile> &sticker, int32 position,
|
void StickersManager::set_sticker_position_in_set(const tl_object_ptr<td_api::InputFile> &sticker, int32 position,
|
||||||
Promise<Unit> &&promise) {
|
Promise<Unit> &&promise) {
|
||||||
if (position < 0) {
|
if (position < 0) {
|
||||||
@ -6173,7 +6192,7 @@ void StickersManager::set_sticker_position_in_set(const tl_object_ptr<td_api::In
|
|||||||
}
|
}
|
||||||
|
|
||||||
td_->create_handler<SetStickerPositionQuery>(std::move(promise))
|
td_->create_handler<SetStickerPositionQuery>(std::move(promise))
|
||||||
->send(file_view.main_remote_location().as_input_document(), position);
|
->send(get_sticker_set_short_name(file_id), file_view.main_remote_location().as_input_document(), position);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StickersManager::remove_sticker_from_set(const tl_object_ptr<td_api::InputFile> &sticker,
|
void StickersManager::remove_sticker_from_set(const tl_object_ptr<td_api::InputFile> &sticker,
|
||||||
@ -6191,7 +6210,7 @@ void StickersManager::remove_sticker_from_set(const tl_object_ptr<td_api::InputF
|
|||||||
}
|
}
|
||||||
|
|
||||||
td_->create_handler<DeleteStickerFromSetQuery>(std::move(promise))
|
td_->create_handler<DeleteStickerFromSetQuery>(std::move(promise))
|
||||||
->send(file_view.main_remote_location().as_input_document());
|
->send(get_sticker_set_short_name(file_id), file_view.main_remote_location().as_input_document());
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<FileId> StickersManager::get_attached_sticker_file_ids(const vector<int32> &int_file_ids) {
|
vector<FileId> StickersManager::get_attached_sticker_file_ids(const vector<int32> &int_file_ids) {
|
||||||
|
@ -504,6 +504,8 @@ class StickersManager final : public Actor {
|
|||||||
StickerSetId on_get_input_sticker_set(FileId sticker_file_id, tl_object_ptr<telegram_api::InputStickerSet> &&set_ptr,
|
StickerSetId on_get_input_sticker_set(FileId sticker_file_id, tl_object_ptr<telegram_api::InputStickerSet> &&set_ptr,
|
||||||
MultiPromiseActor *load_data_multipromise_ptr = nullptr);
|
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);
|
void on_resolve_sticker_set_short_name(FileId sticker_file_id, const string &short_name);
|
||||||
|
|
||||||
int apply_installed_sticker_sets_order(bool is_masks, const vector<StickerSetId> &sticker_set_ids);
|
int apply_installed_sticker_sets_order(bool is_masks, const vector<StickerSetId> &sticker_set_ids);
|
||||||
|
@ -24,7 +24,7 @@ int64 NetQuery::get_my_id() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void NetQuery::set_chain_ids(vector<ChainId> &&chain_ids) {
|
void NetQuery::set_chain_ids(vector<ChainId> &&chain_ids) {
|
||||||
chain_ids_ = transform(chain_ids, [](ChainId chain_id) { return chain_id.get(); });
|
chain_ids_ = transform(chain_ids, [](ChainId chain_id) { return chain_id.get() == 0 ? 1 : chain_id.get(); });
|
||||||
td::unique(chain_ids_);
|
td::unique(chain_ids_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user