Add profile photo file source.

GitOrigin-RevId: 7324c1a4927e135c84a6406b606684297f2447ff
This commit is contained in:
levlam 2019-01-22 18:07:21 +03:00
parent d04a1a61cc
commit 62a01e2b61
3 changed files with 28 additions and 4 deletions

View File

@ -6180,6 +6180,8 @@ void ContactsManager::update_user(User *u, UserId user_id, bool from_binlog, boo
}
}
add_user_photo_id(u, user_id, u->photo.id, dialog_photo_get_file_ids(u->photo));
UserFull *user_full = get_user_full(user_id);
if (user_full != nullptr) {
user_full->photos.clear();
@ -6517,12 +6519,20 @@ 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";
User *u = get_user(user_id);
if (u == nullptr) {
LOG(ERROR) << "Can't find " << user_id;
return;
}
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<telegram_api::photo>(photo), DialogId());
for (auto &photo_ptr : photos) {
if (photo_ptr->get_id() == telegram_api::photo::ID) {
auto photo = get_photo(td_->file_manager_.get(), telegram_api::move_object_as<telegram_api::photo>(photo_ptr),
DialogId());
add_user_photo_id(u, user_id, photo.id, photo_get_file_ids(photo));
}
}
return;
@ -6557,6 +6567,7 @@ void ContactsManager::on_get_user_photos(UserId user_id, int32 offset, int32 lim
user->photos.push_back(
get_photo(td_->file_manager_.get(), telegram_api::move_object_as<telegram_api::photo>(photo), DialogId()));
add_user_photo_id(u, user_id, user->photos.back().id, photo_get_file_ids(user->photos.back()));
}
}
@ -6878,6 +6889,15 @@ void ContactsManager::do_update_user_photo(User *u, UserId user_id,
}
}
void ContactsManager::add_user_photo_id(User *u, UserId user_id, int64 photo_id, const vector<FileId> &photo_file_ids) {
if (photo_id > 0 && !photo_file_ids.empty() && u->photo_ids.insert(photo_id).second) {
auto file_source_id = td_->file_reference_manager_->create_user_photo_file_source(user_id, photo_id);
for (auto &file_id : photo_file_ids) {
td_->file_manager_->add_file_source(file_id, file_source_id);
}
}
}
void ContactsManager::on_update_user_online(UserId user_id, tl_object_ptr<telegram_api::UserStatus> &&status) {
if (!user_id.is_valid()) {
LOG(ERROR) << "Receive invalid " << user_id;

View File

@ -480,6 +480,8 @@ class ContactsManager : public Actor {
LinkState outbound = LinkState::Unknown;
LinkState inbound = LinkState::Unknown;
std::unordered_set<int64> photo_ids;
bool is_received = false;
bool is_verified = false;
bool is_deleted = true;
@ -859,6 +861,8 @@ class ContactsManager : public Actor {
void do_update_user_photo(User *u, UserId user_id, tl_object_ptr<telegram_api::UserProfilePhoto> &&photo);
void add_user_photo_id(User *u, UserId user_id, int64 photo_id, const vector<FileId> &photo_file_ids);
void on_update_user_full_is_blocked(UserFull *user_full, UserId user_id, bool is_blocked);
bool on_update_user_full_bot_info(UserFull *user_full, UserId user_id, int32 bot_info_version,
tl_object_ptr<telegram_api::botInfo> &&bot_info);

View File

@ -1796,7 +1796,7 @@ void FileManager::run_download(FileNodePtr node) {
QueryId id = queries_container_.create(Query{file_id, Query::DownloadWaitFileReferece});
node->download_id_ = id;
if (node->download_was_update_file_reference_) {
on_error(id, Status::Error("Can't download file: have valid source id, but do not allowed to use it"));
on_error(id, Status::Error("Can't download file: have no valid file reference"));
return;
}
node->download_was_update_file_reference_ = true;