diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index 5754900e8..d1eeb8d98 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -9796,9 +9796,7 @@ void ContactsManager::on_load_chat_full_from_database(ChatId chat_id, string val } } - if (td_->file_manager_->get_file_view(c->photo.small_file_id).get_unique_file_id() != - td_->file_manager_->get_file_view(as_fake_dialog_photo(chat_full->photo, DialogId(chat_id)).small_file_id) - .get_unique_file_id()) { + if (!is_same_dialog_photo(td_->file_manager_.get(), DialogId(chat_id), chat_full->photo, c->photo)) { chat_full->photo = Photo(); if (c->photo.small_file_id.is_valid()) { reload_chat_full(chat_id, Auto()); @@ -9909,9 +9907,7 @@ void ContactsManager::on_load_channel_full_from_database(ChannelId channel_id, s } } - if (td_->file_manager_->get_file_view(c->photo.small_file_id).get_unique_file_id() != - td_->file_manager_->get_file_view(as_fake_dialog_photo(channel_full->photo, DialogId(channel_id)).small_file_id) - .get_unique_file_id()) { + if (!is_same_dialog_photo(td_->file_manager_.get(), DialogId(channel_id), channel_full->photo, c->photo)) { channel_full->photo = Photo(); if (c->photo.small_file_id.is_valid()) { channel_full->expires_at = 0.0; diff --git a/td/telegram/Photo.cpp b/td/telegram/Photo.cpp index eff37fcf5..d17e69d67 100644 --- a/td/telegram/Photo.cpp +++ b/td/telegram/Photo.cpp @@ -194,6 +194,16 @@ ProfilePhoto as_profile_photo(FileManager *file_manager, UserId user_id, int64 u return result; } +bool is_same_dialog_photo(FileManager *file_manager, DialogId dialog_id, const Photo &photo, + const DialogPhoto &dialog_photo) { + auto get_unique_file_id = [file_manager](FileId file_id) { + return file_manager->get_file_view(file_id).get_unique_file_id(); + }; + auto fake_photo = as_fake_dialog_photo(photo, dialog_id); + return get_unique_file_id(fake_photo.small_file_id) == get_unique_file_id(dialog_photo.small_file_id) && + get_unique_file_id(fake_photo.big_file_id) == get_unique_file_id(dialog_photo.big_file_id); +} + bool operator==(const DialogPhoto &lhs, const DialogPhoto &rhs) { return lhs.small_file_id == rhs.small_file_id && lhs.big_file_id == rhs.big_file_id && lhs.minithumbnail == rhs.minithumbnail && lhs.has_animation == rhs.has_animation; diff --git a/td/telegram/Photo.h b/td/telegram/Photo.h index f54484f56..a6345e9b9 100644 --- a/td/telegram/Photo.h +++ b/td/telegram/Photo.h @@ -74,6 +74,9 @@ DialogPhoto as_dialog_photo(FileManager *file_manager, DialogId dialog_id, int64 ProfilePhoto as_profile_photo(FileManager *file_manager, UserId user_id, int64 user_access_hash, const Photo &photo); +bool is_same_dialog_photo(FileManager *file_manager, DialogId dialog_id, const Photo &photo, + const DialogPhoto &dialog_photo); + vector dialog_photo_get_file_ids(const DialogPhoto &dialog_photo); bool operator==(const DialogPhoto &lhs, const DialogPhoto &rhs);