Remove contacts by phone number in changeImportedContacts.
GitOrigin-RevId: 1ac5998d3d01b289761aa62e131589163e1b5194
This commit is contained in:
parent
9cb950bc05
commit
78a0a37afb
@ -592,6 +592,41 @@ class DeleteContactsQuery : public Td::ResultHandler {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class DeleteContactsByPhoneNumberQuery : public Td::ResultHandler {
|
||||||
|
Promise<Unit> promise_;
|
||||||
|
vector<UserId> user_ids_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit DeleteContactsByPhoneNumberQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void send(vector<string> &&user_phone_numbers, vector<UserId> &&user_ids) {
|
||||||
|
user_ids_ = std::move(user_ids);
|
||||||
|
send_query(G()->net_query_creator().create(
|
||||||
|
create_storer(telegram_api::contacts_deleteByPhones(std::move(user_phone_numbers)))));
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_result(uint64 id, BufferSlice packet) override {
|
||||||
|
auto result_ptr = fetch_result<telegram_api::contacts_deleteByPhones>(packet);
|
||||||
|
if (result_ptr.is_error()) {
|
||||||
|
return on_error(id, result_ptr.move_as_error());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool result = result_ptr.ok();
|
||||||
|
if (!result) {
|
||||||
|
return on_error(id, Status::Error(500, "Some contacts can't be deleted"));
|
||||||
|
}
|
||||||
|
|
||||||
|
td->contacts_manager_->on_deleted_contacts(user_ids_);
|
||||||
|
promise_.set_value(Unit());
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_error(uint64 id, Status status) override {
|
||||||
|
promise_.set_error(std::move(status));
|
||||||
|
td->contacts_manager_->reload_contacts(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class ResetContactsQuery : public Td::ResultHandler {
|
class ResetContactsQuery : public Td::ResultHandler {
|
||||||
Promise<Unit> promise_;
|
Promise<Unit> promise_;
|
||||||
|
|
||||||
@ -3525,11 +3560,22 @@ void ContactsManager::remove_contacts(vector<UserId> user_ids, Promise<Unit> &&p
|
|||||||
return promise.set_value(Unit());
|
return promise.set_value(Unit());
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO DeleteContactQuery
|
|
||||||
td_->create_handler<DeleteContactsQuery>(std::move(promise))
|
td_->create_handler<DeleteContactsQuery>(std::move(promise))
|
||||||
->send(std::move(to_delete_user_ids), std::move(input_users));
|
->send(std::move(to_delete_user_ids), std::move(input_users));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ContactsManager::remove_contacts_by_phone_number(vector<string> user_phone_numbers, vector<UserId> user_ids,
|
||||||
|
Promise<Unit> &&promise) {
|
||||||
|
LOG(INFO) << "Delete contacts by phone number: " << format::as_array(user_phone_numbers);
|
||||||
|
if (!are_contacts_loaded_) {
|
||||||
|
load_contacts(std::move(promise));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
td_->create_handler<DeleteContactsByPhoneNumberQuery>(std::move(promise))
|
||||||
|
->send(std::move(user_phone_numbers), std::move(user_ids));
|
||||||
|
}
|
||||||
|
|
||||||
int32 ContactsManager::get_imported_contact_count(Promise<Unit> &&promise) {
|
int32 ContactsManager::get_imported_contact_count(Promise<Unit> &&promise) {
|
||||||
LOG(INFO) << "Get imported contact count";
|
LOG(INFO) << "Get imported contact count";
|
||||||
|
|
||||||
@ -3690,13 +3736,18 @@ std::pair<vector<UserId>, vector<int32>> ContactsManager::change_imported_contac
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<UserId> to_delete;
|
vector<string> to_delete;
|
||||||
|
vector<UserId> to_delete_user_ids;
|
||||||
for (auto &old_contact : all_imported_contacts_) {
|
for (auto &old_contact : all_imported_contacts_) {
|
||||||
auto user_id = old_contact.get_user_id();
|
auto user_id = old_contact.get_user_id();
|
||||||
auto it = different_new_contacts.find(old_contact);
|
auto it = different_new_contacts.find(old_contact);
|
||||||
if (it == different_new_contacts.end()) {
|
if (it == different_new_contacts.end()) {
|
||||||
if (user_id.is_valid() && different_new_phone_numbers.count(old_contact.get_phone_number()) == 0) {
|
auto phone_number = old_contact.get_phone_number();
|
||||||
to_delete.push_back(user_id);
|
if (different_new_phone_numbers.count(phone_number) == 0) {
|
||||||
|
to_delete.push_back(std::move(phone_number));
|
||||||
|
if (user_id.is_valid()) {
|
||||||
|
to_delete_user_ids.push_back(user_id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
unique_new_contacts[it->second].set_user_id(user_id);
|
unique_new_contacts[it->second].set_user_id(user_id);
|
||||||
@ -3723,8 +3774,8 @@ std::pair<vector<UserId>, vector<int32>> ContactsManager::change_imported_contac
|
|||||||
are_imported_contacts_changing_ = true;
|
are_imported_contacts_changing_ = true;
|
||||||
random_id = 1;
|
random_id = 1;
|
||||||
|
|
||||||
remove_contacts(
|
remove_contacts_by_phone_number(
|
||||||
std::move(to_delete),
|
std::move(to_delete), std::move(to_delete_user_ids),
|
||||||
PromiseCreator::lambda([new_contacts = std::move(unique_new_contacts),
|
PromiseCreator::lambda([new_contacts = std::move(unique_new_contacts),
|
||||||
new_contacts_unique_id = std::move(new_contacts_unique_id), to_add = std::move(to_add),
|
new_contacts_unique_id = std::move(new_contacts_unique_id), to_add = std::move(to_add),
|
||||||
promise = std::move(promise)](Result<> result) mutable {
|
promise = std::move(promise)](Result<> result) mutable {
|
||||||
@ -4781,7 +4832,7 @@ void ContactsManager::on_imported_contacts(int64 random_id, vector<UserId> impor
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ContactsManager::on_deleted_contacts(const vector<UserId> &deleted_contact_user_ids) {
|
void ContactsManager::on_deleted_contacts(const vector<UserId> &deleted_contact_user_ids) {
|
||||||
LOG(INFO) << "Contacts deletion has finished";
|
LOG(INFO) << "Contacts deletion has finished for " << deleted_contact_user_ids;
|
||||||
|
|
||||||
for (auto user_id : deleted_contact_user_ids) {
|
for (auto user_id : deleted_contact_user_ids) {
|
||||||
LOG(INFO) << "Drop contact with " << user_id;
|
LOG(INFO) << "Drop contact with " << user_id;
|
||||||
|
@ -265,6 +265,9 @@ class ContactsManager : public Actor {
|
|||||||
|
|
||||||
void remove_contacts(vector<UserId> user_ids, Promise<Unit> &&promise);
|
void remove_contacts(vector<UserId> user_ids, Promise<Unit> &&promise);
|
||||||
|
|
||||||
|
void remove_contacts_by_phone_number(vector<string> user_phone_numbers, vector<UserId> user_ids,
|
||||||
|
Promise<Unit> &&promise);
|
||||||
|
|
||||||
int32 get_imported_contact_count(Promise<Unit> &&promise);
|
int32 get_imported_contact_count(Promise<Unit> &&promise);
|
||||||
|
|
||||||
std::pair<vector<UserId>, vector<int32>> change_imported_contacts(vector<tl_object_ptr<td_api::contact>> &&contacts,
|
std::pair<vector<UserId>, vector<int32>> change_imported_contacts(vector<tl_object_ptr<td_api::contact>> &&contacts,
|
||||||
|
Reference in New Issue
Block a user