Preload contact user to avoid loading all contacts.
This commit is contained in:
parent
9c62385b02
commit
e6aed3b99e
@ -8308,12 +8308,23 @@ void ContactsManager::on_get_user(tl_object_ptr<telegram_api::User> &&user_ptr,
|
|||||||
|
|
||||||
bool have_access_hash = (flags & USER_FLAG_HAS_ACCESS_HASH) != 0;
|
bool have_access_hash = (flags & USER_FLAG_HAS_ACCESS_HASH) != 0;
|
||||||
bool is_received = (flags & USER_FLAG_IS_INACCESSIBLE) == 0;
|
bool is_received = (flags & USER_FLAG_IS_INACCESSIBLE) == 0;
|
||||||
|
bool is_contact = (flags & USER_FLAG_IS_CONTACT) != 0;
|
||||||
|
|
||||||
if (!is_received && !have_user_force(user_id)) {
|
if (!have_min_user(user_id)) {
|
||||||
// we must preload information about received inaccessible users from database in order to not save
|
if (!is_received) {
|
||||||
|
// we must preload received inaccessible users from database in order to not save
|
||||||
// the min-user to the database and to not override access_hash and another info
|
// the min-user to the database and to not override access_hash and another info
|
||||||
|
if (!have_user_force(user_id)) {
|
||||||
LOG(INFO) << "Receive inaccessible " << user_id;
|
LOG(INFO) << "Receive inaccessible " << user_id;
|
||||||
}
|
}
|
||||||
|
} else if (is_contact && !are_contacts_loaded_) {
|
||||||
|
// preload contact users from database to know that is_contact didn't changed
|
||||||
|
// and the list of contacts doesn't need to be saved to the database
|
||||||
|
if (!have_user_force(user_id)) {
|
||||||
|
LOG(INFO) << "Receive contact " << user_id << " for the first time";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
User *u = add_user(user_id, "on_get_user");
|
User *u = add_user(user_id, "on_get_user");
|
||||||
if (have_access_hash) { // access_hash must be updated before photo
|
if (have_access_hash) { // access_hash must be updated before photo
|
||||||
@ -8336,7 +8347,6 @@ void ContactsManager::on_get_user(tl_object_ptr<telegram_api::User> &&user_ptr,
|
|||||||
if (is_received) {
|
if (is_received) {
|
||||||
on_update_user_online(u, user_id, std::move(user->status_));
|
on_update_user_online(u, user_id, std::move(user->status_));
|
||||||
|
|
||||||
auto is_contact = (flags & USER_FLAG_IS_CONTACT) != 0;
|
|
||||||
auto is_mutual_contact = (flags & USER_FLAG_IS_MUTUAL_CONTACT) != 0;
|
auto is_mutual_contact = (flags & USER_FLAG_IS_MUTUAL_CONTACT) != 0;
|
||||||
on_update_user_is_contact(u, user_id, is_contact, is_mutual_contact);
|
on_update_user_is_contact(u, user_id, is_contact, is_mutual_contact);
|
||||||
}
|
}
|
||||||
@ -13831,7 +13841,7 @@ void ContactsManager::update_contacts_hints(const User *u, UserId user_id, bool
|
|||||||
if (G()->parameters().use_chat_info_db) {
|
if (G()->parameters().use_chat_info_db) {
|
||||||
// update contacts database
|
// update contacts database
|
||||||
if (!are_contacts_loaded_) {
|
if (!are_contacts_loaded_) {
|
||||||
if (!from_database && load_contacts_queries_.empty() && is_contact) {
|
if (!from_database && load_contacts_queries_.empty() && is_contact && u->is_is_contact_changed) {
|
||||||
search_contacts("", std::numeric_limits<int32>::max(), Auto());
|
search_contacts("", std::numeric_limits<int32>::max(), Auto());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user