Add cache for resolved phone numbers.
This commit is contained in:
parent
0939ad3db3
commit
254d74c4a6
|
@ -3626,6 +3626,7 @@ void ContactsManager::User::parse(ParserT &parser) {
|
|||
cache_version = 0;
|
||||
}
|
||||
|
||||
clean_phone_number(phone_number);
|
||||
if (first_name.empty() && last_name.empty()) {
|
||||
first_name = phone_number;
|
||||
}
|
||||
|
@ -8527,6 +8528,10 @@ void ContactsManager::on_binlog_user_event(BinlogEvent &&event) {
|
|||
User *u = add_user(user_id, "on_binlog_user_event");
|
||||
*u = std::move(log_event.u); // users come from binlog before all other events, so just add them
|
||||
|
||||
if (!u->phone_number.empty()) {
|
||||
resolved_phone_numbers_[u->phone_number] = user_id;
|
||||
}
|
||||
|
||||
u->log_event_id = event.id_;
|
||||
|
||||
update_user(u, user_id, true, false);
|
||||
|
@ -8655,6 +8660,10 @@ void ContactsManager::on_load_user_from_database(UserId user_id, string value, b
|
|||
|
||||
log_event_parse(*u, value).ensure();
|
||||
|
||||
if (!u->phone_number.empty()) {
|
||||
resolved_phone_numbers_[u->phone_number] = user_id;
|
||||
}
|
||||
|
||||
u->is_saved = true;
|
||||
u->is_status_saved = true;
|
||||
update_user(u, user_id, true, true);
|
||||
|
@ -11073,10 +11082,19 @@ void ContactsManager::on_update_user_phone_number(UserId user_id, string &&phone
|
|||
}
|
||||
|
||||
void ContactsManager::on_update_user_phone_number(User *u, UserId user_id, string &&phone_number) {
|
||||
clean_phone_number(phone_number);
|
||||
if (u->phone_number != phone_number) {
|
||||
if (!u->phone_number.empty()) {
|
||||
resolved_phone_numbers_.erase(u->phone_number);
|
||||
}
|
||||
|
||||
u->phone_number = std::move(phone_number);
|
||||
LOG(DEBUG) << "Phone number has changed for " << user_id;
|
||||
u->is_changed = true;
|
||||
|
||||
if (!u->phone_number.empty()) {
|
||||
resolved_phone_numbers_[u->phone_number] = user_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1191,7 +1191,7 @@ class ContactsManager final : public Actor {
|
|||
static bool is_valid_username(const string &username);
|
||||
|
||||
void on_update_user_name(User *u, UserId user_id, string &&first_name, string &&last_name, string &&username);
|
||||
static void on_update_user_phone_number(User *u, UserId user_id, string &&phone_number);
|
||||
void on_update_user_phone_number(User *u, UserId user_id, string &&phone_number);
|
||||
void on_update_user_photo(User *u, UserId user_id, tl_object_ptr<telegram_api::UserProfilePhoto> &&photo,
|
||||
const char *source);
|
||||
void on_update_user_is_contact(User *u, UserId user_id, bool is_contact, bool is_mutual_contact);
|
||||
|
@ -1734,6 +1734,8 @@ class ContactsManager final : public Actor {
|
|||
|
||||
FlatHashMap<ChannelId, vector<DialogParticipant>, ChannelIdHash> cached_channel_participants_;
|
||||
|
||||
FlatHashMap<string, UserId> resolved_phone_numbers_;
|
||||
|
||||
// bot-administrators only
|
||||
struct ChannelParticipantInfo {
|
||||
DialogParticipant participant_;
|
||||
|
|
Loading…
Reference in New Issue
Block a user