Simplify send_update_recent_stickers usage.

This commit is contained in:
levlam 2021-11-01 01:35:39 +03:00
parent c66cf3dec6
commit 5642947198
2 changed files with 25 additions and 35 deletions

View File

@ -5910,8 +5910,7 @@ void StickersManager::on_load_recent_stickers_finished(bool is_attached, vector<
}
recent_sticker_ids_[is_attached] = std::move(recent_sticker_ids);
are_recent_stickers_loaded_[is_attached] = true;
need_update_recent_stickers_[is_attached] = true;
send_update_recent_stickers(from_database);
send_update_recent_stickers(is_attached, from_database);
auto promises = std::move(load_recent_stickers_queries_[is_attached]);
load_recent_stickers_queries_[is_attached].clear();
for (auto &promise : promises) {
@ -6083,8 +6082,6 @@ void StickersManager::add_recent_sticker_impl(bool is_attached, FileId sticker_i
return promise.set_error(Status::Error(400, "Can't save encrypted stickers"));
}
need_update_recent_stickers_[is_attached] = true;
auto it = std::find_if(sticker_ids.begin(), sticker_ids.end(), is_equal);
if (it == sticker_ids.end()) {
if (static_cast<int32>(sticker_ids.size()) == recent_stickers_limit_) {
@ -6099,7 +6096,7 @@ void StickersManager::add_recent_sticker_impl(bool is_attached, FileId sticker_i
sticker_ids[0] = sticker_id;
}
send_update_recent_stickers();
send_update_recent_stickers(is_attached);
if (add_on_server) {
send_save_recent_sticker_query(is_attached, sticker_id, false, std::move(promise));
}
@ -6130,8 +6127,7 @@ void StickersManager::remove_recent_sticker(bool is_attached, const tl_object_pt
send_save_recent_sticker_query(is_attached, file_id, true, std::move(promise));
need_update_recent_stickers_[is_attached] = true;
send_update_recent_stickers();
send_update_recent_stickers(is_attached);
}
void StickersManager::clear_recent_stickers(bool is_attached, Promise<Unit> &&promise) {
@ -6150,8 +6146,7 @@ void StickersManager::clear_recent_stickers(bool is_attached, Promise<Unit> &&pr
sticker_ids.clear();
need_update_recent_stickers_[is_attached] = true;
send_update_recent_stickers();
send_update_recent_stickers(is_attached);
}
td_api::object_ptr<td_api::updateRecentStickers> StickersManager::get_update_recent_stickers_object(
@ -6160,30 +6155,27 @@ td_api::object_ptr<td_api::updateRecentStickers> StickersManager::get_update_rec
is_attached != 0, td_->file_manager_->get_file_ids_object(recent_sticker_ids_[is_attached]));
}
void StickersManager::send_update_recent_stickers(bool from_database) {
for (int is_attached = 0; is_attached < 2; is_attached++) {
if (need_update_recent_stickers_[is_attached]) {
need_update_recent_stickers_[is_attached] = false;
if (are_recent_stickers_loaded_[is_attached]) {
vector<FileId> new_recent_sticker_file_ids;
for (auto &sticker_id : recent_sticker_ids_[is_attached]) {
append(new_recent_sticker_file_ids, get_sticker_file_ids(sticker_id));
}
std::sort(new_recent_sticker_file_ids.begin(), new_recent_sticker_file_ids.end());
if (new_recent_sticker_file_ids != recent_sticker_file_ids_[is_attached]) {
td_->file_manager_->change_files_source(get_recent_stickers_file_source_id(is_attached),
recent_sticker_file_ids_[is_attached], new_recent_sticker_file_ids);
recent_sticker_file_ids_[is_attached] = std::move(new_recent_sticker_file_ids);
}
void StickersManager::send_update_recent_stickers(bool is_attached, bool from_database) {
if (!are_recent_stickers_loaded_[is_attached]) {
return;
}
recent_stickers_hash_[is_attached] = get_recent_stickers_hash(recent_sticker_ids_[is_attached]);
send_closure(G()->td(), &Td::send_update, get_update_recent_stickers_object(is_attached));
vector<FileId> new_recent_sticker_file_ids;
for (auto &sticker_id : recent_sticker_ids_[is_attached]) {
append(new_recent_sticker_file_ids, get_sticker_file_ids(sticker_id));
}
std::sort(new_recent_sticker_file_ids.begin(), new_recent_sticker_file_ids.end());
if (new_recent_sticker_file_ids != recent_sticker_file_ids_[is_attached]) {
td_->file_manager_->change_files_source(get_recent_stickers_file_source_id(is_attached),
recent_sticker_file_ids_[is_attached], new_recent_sticker_file_ids);
recent_sticker_file_ids_[is_attached] = std::move(new_recent_sticker_file_ids);
}
if (!from_database) {
save_recent_stickers_to_database(is_attached != 0);
}
}
}
recent_stickers_hash_[is_attached] = get_recent_stickers_hash(recent_sticker_ids_[is_attached]);
send_closure(G()->td(), &Td::send_update, get_update_recent_stickers_object(is_attached));
if (!from_database) {
save_recent_stickers_to_database(is_attached != 0);
}
}
@ -6204,8 +6196,7 @@ void StickersManager::on_update_recent_stickers_limit(int32 recent_stickers_limi
for (int is_attached = 0; is_attached < 2; is_attached++) {
if (static_cast<int32>(recent_sticker_ids_[is_attached].size()) > recent_stickers_limit) {
recent_sticker_ids_[is_attached].resize(recent_stickers_limit);
need_update_recent_stickers_[is_attached] = true;
send_update_recent_stickers();
send_update_recent_stickers(is_attached);
}
}
} else {

View File

@ -537,7 +537,7 @@ class StickersManager final : public Actor {
td_api::object_ptr<td_api::updateRecentStickers> get_update_recent_stickers_object(int is_attached) const;
void send_update_recent_stickers(bool from_database = false);
void send_update_recent_stickers(bool is_attached, bool from_database = false);
void save_recent_stickers_to_database(bool is_attached);
@ -704,7 +704,6 @@ class StickersManager final : public Actor {
bool need_update_installed_sticker_sets_[2] = {false, false};
bool need_update_featured_sticker_sets_ = false;
bool need_update_recent_stickers_[2] = {false, false};
bool are_installed_sticker_sets_loaded_[2] = {false, false};
bool are_featured_sticker_sets_loaded_ = false;