Repair sticker set thumbnail if changed.

GitOrigin-RevId: 1b0e2e997338d85249e6eee877ab0483d9826342
This commit is contained in:
levlam 2019-07-30 18:43:29 +03:00
parent 089d73953c
commit 2fd851dfe2
6 changed files with 29 additions and 19 deletions

View File

@ -8907,7 +8907,7 @@ ContactsManager::User *ContactsManager::get_user(UserId user_id) {
} }
} }
void ContactsManager::reload_dialog(DialogId dialog_id, Promise<Unit> &&promise) { void ContactsManager::reload_dialog_info(DialogId dialog_id, Promise<Unit> &&promise) {
switch (dialog_id.get_type()) { switch (dialog_id.get_type()) {
case DialogType::User: case DialogType::User:
return reload_user(dialog_id.get_user_id(), std::move(promise)); return reload_user(dialog_id.get_user_id(), std::move(promise));

View File

@ -351,7 +351,7 @@ class ContactsManager : public Actor {
bool have_min_user(UserId user_id) const; bool have_min_user(UserId user_id) const;
bool have_user_force(UserId user_id); bool have_user_force(UserId user_id);
void reload_dialog(DialogId dialog_id, Promise<Unit> &&promise); void reload_dialog_info(DialogId dialog_id, Promise<Unit> &&promise);
static void send_get_me_query(Td *td, Promise<Unit> &&promise); static void send_get_me_query(Td *td, Promise<Unit> &&promise);
UserId get_me(Promise<Unit> &&promise); UserId get_me(Promise<Unit> &&promise);

View File

@ -340,13 +340,16 @@ void FileReferenceManager::reload_photo(PhotoSizeSource source, Promise<Unit> pr
switch (source.get_type()) { switch (source.get_type()) {
case PhotoSizeSource::Type::DialogPhotoBig: case PhotoSizeSource::Type::DialogPhotoBig:
case PhotoSizeSource::Type::DialogPhotoSmall: case PhotoSizeSource::Type::DialogPhotoSmall:
send_closure(G()->contacts_manager(), &ContactsManager::reload_dialog, source.dialog_photo().dialog_id, send_closure(G()->contacts_manager(), &ContactsManager::reload_dialog_info, source.dialog_photo().dialog_id,
std::move(promise)); std::move(promise));
break; break;
case PhotoSizeSource::Type::StickerSetThumbnail: case PhotoSizeSource::Type::StickerSetThumbnail:
//TODO send_closure(G()->stickers_manager(), &StickersManager::reload_sticker_set,
source.sticker_set_thumbnail().sticker_set_id,
source.sticker_set_thumbnail().sticker_set_access_hash, std::move(promise));
break;
default: default:
promise.set_error(Status::Error("Unexpected PotoSizeSource type")); promise.set_error(Status::Error("Unexpected PhotoSizeSource type"));
} }
} }

View File

@ -2434,10 +2434,10 @@ bool StickersManager::update_sticker_set_cache(const StickerSet *sticker_set, Pr
} else { } else {
if (G()->unix_time() >= sticker_set->expires_at) { if (G()->unix_time() >= sticker_set->expires_at) {
if (td_->auth_manager_->is_bot()) { if (td_->auth_manager_->is_bot()) {
reload_sticker_set(set_id, get_input_sticker_set(sticker_set), std::move(promise)); do_reload_sticker_set(set_id, get_input_sticker_set(sticker_set), std::move(promise));
return true; return true;
} else { } else {
reload_sticker_set(set_id, get_input_sticker_set(sticker_set), Auto()); do_reload_sticker_set(set_id, get_input_sticker_set(sticker_set), Auto());
} }
} }
} }
@ -2449,7 +2449,7 @@ int64 StickersManager::get_sticker_set(int64 set_id, Promise<Unit> &&promise) {
const StickerSet *sticker_set = get_sticker_set(set_id); const StickerSet *sticker_set = get_sticker_set(set_id);
if (sticker_set == nullptr) { if (sticker_set == nullptr) {
if (set_id == GREAT_MINDS_SET_ID) { if (set_id == GREAT_MINDS_SET_ID) {
reload_sticker_set(set_id, make_tl_object<telegram_api::inputStickerSetID>(set_id, 0), std::move(promise)); do_reload_sticker_set(set_id, make_tl_object<telegram_api::inputStickerSetID>(set_id, 0), std::move(promise));
return 0; return 0;
} }
@ -2472,7 +2472,7 @@ int64 StickersManager::search_sticker_set(const string &short_name_to_search, Pr
if (sticker_set == nullptr) { if (sticker_set == nullptr) {
auto set_to_load = make_tl_object<telegram_api::inputStickerSetShortName>(short_name); auto set_to_load = make_tl_object<telegram_api::inputStickerSetShortName>(short_name);
reload_sticker_set(0, std::move(set_to_load), std::move(promise)); do_reload_sticker_set(0, std::move(set_to_load), std::move(promise));
return 0; return 0;
} }
@ -2849,7 +2849,7 @@ void StickersManager::load_sticker_sets(vector<int64> &&sticker_set_ids, Promise
})); }));
} else { } else {
LOG(INFO) << "Trying to load sticker set " << sticker_set_id << " with stickers from server"; LOG(INFO) << "Trying to load sticker set " << sticker_set_id << " with stickers from server";
reload_sticker_set(sticker_set_id, get_input_sticker_set(sticker_set), Auto()); do_reload_sticker_set(sticker_set_id, get_input_sticker_set(sticker_set), Auto());
} }
} }
} }
@ -2885,7 +2885,7 @@ void StickersManager::load_sticker_sets_without_stickers(vector<int64> &&sticker
})); }));
} else { } else {
LOG(INFO) << "Trying to load sticker set " << sticker_set_id << " from server"; LOG(INFO) << "Trying to load sticker set " << sticker_set_id << " from server";
reload_sticker_set(sticker_set_id, get_input_sticker_set(sticker_set), Auto()); do_reload_sticker_set(sticker_set_id, get_input_sticker_set(sticker_set), Auto());
} }
} }
} }
@ -2910,7 +2910,7 @@ void StickersManager::on_load_sticker_set_from_database(int64 sticker_set_id, bo
CHECK(!sticker_set->load_without_stickers_requests.empty()); CHECK(!sticker_set->load_without_stickers_requests.empty());
} }
if (value.empty()) { if (value.empty()) {
return reload_sticker_set(sticker_set_id, get_input_sticker_set(sticker_set), Auto()); return do_reload_sticker_set(sticker_set_id, get_input_sticker_set(sticker_set), Auto());
} }
LOG(INFO) << "Successfully loaded sticker set " << sticker_set_id << " with" << (with_stickers ? "" : "out") LOG(INFO) << "Successfully loaded sticker set " << sticker_set_id << " with" << (with_stickers ? "" : "out")
@ -2936,7 +2936,7 @@ void StickersManager::on_load_sticker_set_from_database(int64 sticker_set_id, bo
} }
} }
if (!sticker_set->is_thumbnail_reloaded) { if (!sticker_set->is_thumbnail_reloaded) {
reload_sticker_set(sticker_set_id, get_input_sticker_set(sticker_set), Auto()); do_reload_sticker_set(sticker_set_id, get_input_sticker_set(sticker_set), Auto());
} }
if (with_stickers && old_sticker_count < 5 && old_sticker_count < sticker_set->sticker_ids.size()) { if (with_stickers && old_sticker_count < 5 && old_sticker_count < sticker_set->sticker_ids.size()) {
@ -2947,9 +2947,14 @@ void StickersManager::on_load_sticker_set_from_database(int64 sticker_set_id, bo
update_load_requests(sticker_set, with_stickers, Status::OK()); update_load_requests(sticker_set, with_stickers, Status::OK());
} }
void StickersManager::reload_sticker_set(int64 sticker_set_id, void StickersManager::reload_sticker_set(int64 sticker_set_id, int64 access_hash, Promise<Unit> &&promise) {
tl_object_ptr<telegram_api::InputStickerSet> &&input_sticker_set, do_reload_sticker_set(sticker_set_id, make_tl_object<telegram_api::inputStickerSetID>(sticker_set_id, access_hash),
Promise<Unit> &&promise) const { std::move(promise));
}
void StickersManager::do_reload_sticker_set(int64 sticker_set_id,
tl_object_ptr<telegram_api::InputStickerSet> &&input_sticker_set,
Promise<Unit> &&promise) const {
if (G()->close_flag()) { if (G()->close_flag()) {
return promise.set_error(Status::Error(500, "Request aborted")); return promise.set_error(Status::Error(500, "Request aborted"));
} }

View File

@ -201,6 +201,8 @@ class StickersManager : public Actor {
td_api::object_ptr<td_api::httpUrl> get_emoji_suggestions_url_result(int64 random_id); td_api::object_ptr<td_api::httpUrl> get_emoji_suggestions_url_result(int64 random_id);
void reload_sticker_set(int64 sticker_set_id, int64 access_hash, Promise<Unit> &&promise);
void reload_installed_sticker_sets(bool is_masks, bool force); void reload_installed_sticker_sets(bool is_masks, bool force);
void reload_featured_sticker_sets(bool force); void reload_featured_sticker_sets(bool force);
@ -373,8 +375,8 @@ class StickersManager : public Actor {
void update_load_request(uint32 load_request_id, const Status &status); void update_load_request(uint32 load_request_id, const Status &status);
void reload_sticker_set(int64 sticker_set_id, tl_object_ptr<telegram_api::InputStickerSet> &&input_sticker_set, void do_reload_sticker_set(int64 sticker_set_id, tl_object_ptr<telegram_api::InputStickerSet> &&input_sticker_set,
Promise<Unit> &&promise) const; Promise<Unit> &&promise) const;
static void read_featured_sticker_sets(void *td_void); static void read_featured_sticker_sets(void *td_void);

View File

@ -301,7 +301,7 @@ class FileView {
return node_->encryption_key_; return node_->encryption_key_;
} }
bool may_reload_photo() { bool may_reload_photo() const {
if (!has_remote_location()) { if (!has_remote_location()) {
return false; return false;
} }