Don't load contacts after receiving a non-contact. It will be saved to database anyway and deleted from the saved list of contacts after it is loaded if appropriate.

This commit is contained in:
levlam 2022-02-16 21:58:57 +03:00
parent 8d48190748
commit 9c62385b02

View File

@ -8119,7 +8119,7 @@ void ContactsManager::save_contacts_to_database() {
G()->td_db()->get_binlog_pmc()->set("saved_contact_count", to_string(saved_contact_count_)); G()->td_db()->get_binlog_pmc()->set("saved_contact_count", to_string(saved_contact_count_));
G()->td_db()->get_binlog()->force_sync(PromiseCreator::lambda([user_ids = std::move(user_ids)](Result<> result) { G()->td_db()->get_binlog()->force_sync(PromiseCreator::lambda([user_ids = std::move(user_ids)](Result<> result) {
if (result.is_ok()) { if (result.is_ok()) {
LOG(INFO) << "Save contacts to database"; LOG(INFO) << "Saved contacts to database";
G()->td_db()->get_sqlite_pmc()->set( G()->td_db()->get_sqlite_pmc()->set(
"user_contacts", log_event_store(user_ids).as_slice().str(), PromiseCreator::lambda([](Result<> result) { "user_contacts", log_event_store(user_ids).as_slice().str(), PromiseCreator::lambda([](Result<> result) {
if (result.is_ok()) { if (result.is_ok()) {
@ -9915,7 +9915,8 @@ void ContactsManager::update_user(User *u, UserId user_id, bool from_binlog, boo
} }
LOG(DEBUG) << "Update " << user_id << ": need_save_to_database = " << u->need_save_to_database LOG(DEBUG) << "Update " << user_id << ": need_save_to_database = " << u->need_save_to_database
<< ", is_changed = " << u->is_changed << ", is_status_changed = " << u->is_status_changed; << ", is_changed = " << u->is_changed << ", is_status_changed = " << u->is_status_changed
<< ", from_binlog = " << from_binlog << ", from_database = " << from_database;
u->need_save_to_database |= u->is_changed; u->need_save_to_database |= u->is_changed;
if (u->need_save_to_database) { if (u->need_save_to_database) {
if (!from_database) { if (!from_database) {
@ -13817,7 +13818,7 @@ void ContactsManager::update_contacts_hints(const User *u, UserId user_id, bool
int64 key = user_id.get(); int64 key = user_id.get();
string old_value = contacts_hints_.key_to_string(key); string old_value = contacts_hints_.key_to_string(key);
string new_value = is_contact ? u->first_name + " " + u->last_name + " " + u->username : ""; string new_value = is_contact ? (PSTRING() << u->first_name << ' ' << u->last_name << ' ' << u->username) : string();
if (new_value != old_value) { if (new_value != old_value) {
if (is_contact) { if (is_contact) {
@ -13830,7 +13831,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()) { if (!from_database && load_contacts_queries_.empty() && is_contact) {
search_contacts("", std::numeric_limits<int32>::max(), Auto()); search_contacts("", std::numeric_limits<int32>::max(), Auto());
} }
} else { } else {