From 303a006fb3917f272b9df8a25ecad0cd7e41866c Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 14 Jan 2019 23:04:53 +0300 Subject: [PATCH] Add reload_user_profile_photo method. GitOrigin-RevId: cc0e9d51b98adcb359310a239e707a7ef5e0523a --- td/telegram/ContactsManager.cpp | 38 +++++++++++++++++++++++++++------ td/telegram/ContactsManager.h | 1 + 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index 13af915f..090fbd12 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -1897,13 +1897,15 @@ class GetUserPhotosQuery : public Td::ResultHandler { explicit GetUserPhotosQuery(Promise &&promise) : promise_(std::move(promise)) { } - void send(UserId user_id, tl_object_ptr &&input_user, int32 offset, int32 limit) { + void send(UserId user_id, tl_object_ptr &&input_user, int32 offset, int32 limit, + int64 photo_id) { user_id_ = user_id; offset_ = offset; limit_ = limit; - LOG(INFO) << "Get " << user_id << " profile photos with offset " << offset << " and limit " << limit; + LOG(INFO) << "Get " << user_id << " profile photos with offset " << offset << " and limit " << limit + << " from photo " << photo_id; send_query(G()->net_query_creator().create( - create_storer(telegram_api::photos_getUserPhotos(std::move(input_user), offset, 0, limit)))); + create_storer(telegram_api::photos_getUserPhotos(std::move(input_user), offset, photo_id, limit)))); } void on_result(uint64 id, BufferSlice packet) override { @@ -6473,8 +6475,8 @@ void ContactsManager::on_get_user_full(tl_object_ptr &&u } else { CHECK(photo_id == telegram_api::photo::ID); - // Photo profile_photo = - // get_photo(td_->file_manager_.get(), move_tl_object_as(user_full->profile_photo_)); + // Photo profile_photo = + // get_photo(td_->file_manager_.get(), move_tl_object_as(user_full->profile_photo_)); } if ((user_full->flags_ & USER_FULL_FLAG_HAS_BOT_INFO) != 0 && !u->is_deleted) { @@ -6493,6 +6495,17 @@ void ContactsManager::on_get_user_photos(UserId user_id, int32 offset, int32 lim LOG_IF(ERROR, limit < photo_count) << "Requested not more than " << limit << " photos, but " << photo_count << " returned"; + if (offset == -1) { + // from reload_user_profile_photo + CHECK(limit == 1); + for (auto &photo : photos) { + if (photo->get_id() == telegram_api::photo::ID) { + get_photo(td_->file_manager_.get(), telegram_api::move_object_as(photo), DialogId()); + } + } + return; + } + UserFull *user = &users_full_[user_id]; user->photo_count = total_count; CHECK(user->getting_photos_now); @@ -6521,7 +6534,7 @@ void ContactsManager::on_get_user_photos(UserId user_id, int32 offset, int32 lim CHECK(photo_id == telegram_api::photo::ID); user->photos.push_back( - get_photo(td_->file_manager_.get(), move_tl_object_as(photo), DialogId())); + get_photo(td_->file_manager_.get(), telegram_api::move_object_as(photo), DialogId())); } } @@ -8454,10 +8467,21 @@ std::pair> ContactsManager::get_user_profile_photos limit = MAX_GET_PROFILE_PHOTOS / 5; // make limit reasonable } - td_->create_handler(std::move(promise))->send(user_id, std::move(input_user), offset, limit); + td_->create_handler(std::move(promise))->send(user_id, std::move(input_user), offset, limit, 0); return result; } +void ContactsManager::reload_user_profile_photo(UserId user_id, int64 photo_id, Promise &&promise) { + auto input_user = get_input_user(user_id); + if (input_user == nullptr) { + return promise.set_error(Status::Error(6, "User not found")); + } + + // this request will be needed only to download the photo, + // so there is no reason to combine different requests for a photo into one request + td_->create_handler(std::move(promise))->send(user_id, std::move(input_user), -1, 1, photo_id); +} + bool ContactsManager::have_chat(ChatId chat_id) const { return chats_.count(chat_id) > 0; } diff --git a/td/telegram/ContactsManager.h b/td/telegram/ContactsManager.h index 0263b167..bb3cbc7c 100644 --- a/td/telegram/ContactsManager.h +++ b/td/telegram/ContactsManager.h @@ -360,6 +360,7 @@ class ContactsManager : public Actor { std::pair> get_user_profile_photos(UserId user_id, int32 offset, int32 limit, Promise &&promise); + void reload_user_profile_photo(UserId user_id, int64 photo_id, Promise &&promise); bool have_chat(ChatId chat_id) const; bool have_chat_force(ChatId chat_id);