From a7005ee358bd59219de9a117ca3267b5f4f7ada8 Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 30 Jul 2019 15:10:02 +0300 Subject: [PATCH] Add reload_user. GitOrigin-RevId: f13879bb21e7978f009f5eb8e0f768c089a1061e --- td/telegram/ContactsManager.cpp | 43 +++++++++++++++++++-------------- td/telegram/ContactsManager.h | 1 + 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index f575b122b..d0a0881e7 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -6344,11 +6344,7 @@ void ContactsManager::update_user(User *u, UserId user_id, bool from_binlog, boo u->is_repaired = true; LOG(INFO) << "Repairing cache of " << user_id; - auto input_user = get_input_user(user_id); - CHECK(input_user != nullptr); - vector> users; - users.push_back(std::move(input_user)); - td_->create_handler(Promise())->send(std::move(users)); + reload_user(user_id, Promise()); } } @@ -6396,8 +6392,9 @@ void ContactsManager::update_chat(Chat *c, ChatId chat_id, bool from_binlog, boo if (c->cache_version != Chat::CACHE_VERSION && !c->is_repaired && !G()->close_flag()) { c->is_repaired = true; + LOG(INFO) << "Repairing cache of " << chat_id; - td_->create_handler(Promise())->send(vector{chat_id.get()}); + reload_chat(chat_id, Promise()); } } @@ -6487,10 +6484,9 @@ void ContactsManager::update_channel(Channel *c, ChannelId channel_id, bool from if (c->cache_version != Channel::CACHE_VERSION && !c->is_repaired && !G()->close_flag()) { c->is_repaired = true; + LOG(INFO) << "Repairing cache of " << channel_id; - auto input_channel = get_input_channel(channel_id); - CHECK(input_channel != nullptr); - td_->create_handler(Promise())->send(std::move(input_channel)); + reload_channel(channel_id, Promise()); } } @@ -7277,11 +7273,7 @@ void ContactsManager::on_delete_profile_photo(int64 profile_photo_id, Promise> users; - users.push_back(std::move(input_user)); - td_->create_handler(std::move(promise))->send(std::move(users)); + reload_user(my_id, std::move(promise)); } ContactsManager::LinkState ContactsManager::get_link_state(tl_object_ptr &&link) { @@ -8993,6 +8985,23 @@ ContactsManager::UserFull *ContactsManager::get_user_full(UserId user_id) { } } +void ContactsManager::reload_user(UserId user_id, Promise &&promise) { + if (!user_id.is_valid()) { + return promise.set_error(Status::Error(6, "Invalid user id")); + } + + have_user_force(user_id); + auto input_user = get_input_user(user_id); + if (input_user == nullptr) { + return promise.set_error(Status::Error(6, "User info not found")); + } + + // there is no much reason to combine different requests into one request + vector> users; + users.push_back(std::move(input_user)); + td_->create_handler(std::move(promise))->send(std::move(users)); +} + bool ContactsManager::get_user_full(UserId user_id, Promise &&promise) { auto user = get_user(user_id); if (user == nullptr) { @@ -9206,8 +9215,7 @@ void ContactsManager::reload_chat(ChatId chat_id, Promise &&promise) { return promise.set_error(Status::Error(6, "Invalid basic group id")); } - // this request will be needed only to download the chat photo, - // so there is no reason to combine different requests into one request + // there is no much reason to combine different requests into one request td_->create_handler(std::move(promise))->send(vector{chat_id.get()}); } @@ -9510,8 +9518,7 @@ void ContactsManager::reload_channel(ChannelId channel_id, Promise &&promi return promise.set_error(Status::Error(6, "Supergroup info not found")); } - // this request will be needed only to download the channel photo, - // so there is no reason to combine different requests into one request + // there is no much reason to combine different requests into one request td_->create_handler(std::move(promise))->send(std::move(input_channel)); } diff --git a/td/telegram/ContactsManager.h b/td/telegram/ContactsManager.h index d3ee84e40..704961f06 100644 --- a/td/telegram/ContactsManager.h +++ b/td/telegram/ContactsManager.h @@ -354,6 +354,7 @@ class ContactsManager : public Actor { static void send_get_me_query(Td *td, Promise &&promise); UserId get_me(Promise &&promise); bool get_user(UserId user_id, int left_tries, Promise &&promise); + void reload_user(UserId user_id, Promise &&promise); bool get_user_full(UserId user_id, Promise &&promise); std::pair> get_user_profile_photos(UserId user_id, int32 offset, int32 limit,