Fix send_update_new_message.

GitOrigin-RevId: 12d4f0c6aa9b84b91bb1438fb1ffecab48381471
This commit is contained in:
levlam 2018-05-24 19:27:56 +03:00
parent 0e48dd8a81
commit 3229ea3ce2
2 changed files with 23 additions and 15 deletions

View File

@ -18952,8 +18952,8 @@ void MessagesManager::send_update_new_message(Dialog *d, const Message *m, bool
} }
bool have_settings = true; bool have_settings = true;
DialogId settings_dialog_id; DialogId settings_dialog_id;
Dialog *settings_dialog = nullptr;
if (!disable_notification) { if (!disable_notification) {
Dialog *settings_dialog;
if (!m->contains_mention || !m->sender_user_id.is_valid()) { if (!m->contains_mention || !m->sender_user_id.is_valid()) {
// use notification settings from the dialog // use notification settings from the dialog
settings_dialog_id = d->dialog_id; settings_dialog_id = d->dialog_id;
@ -18985,7 +18985,11 @@ void MessagesManager::send_update_new_message(Dialog *d, const Message *m, bool
auto promise = PromiseCreator::lambda([actor_id = actor_id(this), dialog_id = d->dialog_id](Result<Unit> result) { auto promise = PromiseCreator::lambda([actor_id = actor_id(this), dialog_id = d->dialog_id](Result<Unit> result) {
send_closure(actor_id, &MessagesManager::flush_pending_update_new_messages, dialog_id); send_closure(actor_id, &MessagesManager::flush_pending_update_new_messages, dialog_id);
}); });
send_get_dialog_notification_settings_query(settings_dialog_id, std::move(promise)); if (settings_dialog != nullptr) {
send_get_dialog_notification_settings_query(settings_dialog_id, std::move(promise));
} else {
send_get_dialog_query(settings_dialog_id, std::move(promise));
}
return; return;
} }
@ -19944,9 +19948,13 @@ DialogId MessagesManager::search_public_dialog(const string &username_to_search,
} }
void MessagesManager::send_get_dialog_notification_settings_query(DialogId dialog_id, Promise<Unit> &&promise) { void MessagesManager::send_get_dialog_notification_settings_query(DialogId dialog_id, Promise<Unit> &&promise) {
if (td_->auth_manager_->is_bot()) { if (td_->auth_manager_->is_bot() || dialog_id.get_type() != DialogType::SecretChat) {
return; return promise.set_error(Status::Error(500, "Wrong getDialogNotificationSettings query"));
} }
if (!have_input_peer(dialog_id, AccessRights::Read)) {
return promise.set_error(Status::Error(400, "Can't access the chat"));
}
auto &promises = get_dialog_notification_settings_queries_[dialog_id]; auto &promises = get_dialog_notification_settings_queries_[dialog_id];
promises.push_back(std::move(promise)); promises.push_back(std::move(promise));
if (promises.size() != 1) { if (promises.size() != 1) {
@ -19954,10 +19962,6 @@ void MessagesManager::send_get_dialog_notification_settings_query(DialogId dialo
return; return;
} }
if (!have_input_peer(dialog_id, AccessRights::Read)) {
return promise.set_error(Status::Error(400, "Can't access the chat"));
}
td_->create_handler<GetDialogNotifySettingsQuery>()->send(dialog_id); td_->create_handler<GetDialogNotifySettingsQuery>()->send(dialog_id);
} }
@ -19978,9 +19982,13 @@ void MessagesManager::on_get_dialog_notification_settings_query_finished(DialogI
} }
void MessagesManager::send_get_dialog_query(DialogId dialog_id, Promise<Unit> &&promise) { void MessagesManager::send_get_dialog_query(DialogId dialog_id, Promise<Unit> &&promise) {
if (td_->auth_manager_->is_bot()) { if (td_->auth_manager_->is_bot() || dialog_id.get_type() != DialogType::SecretChat) {
return; return promise.set_error(Status::Error(500, "Wrong getDialog query"));
} }
if (!have_input_peer(dialog_id, AccessRights::Read)) {
return promise.set_error(Status::Error(400, "Can't access the chat"));
}
auto &promises = get_dialog_queries_[dialog_id]; auto &promises = get_dialog_queries_[dialog_id];
promises.push_back(std::move(promise)); promises.push_back(std::move(promise));
if (promises.size() != 1) { if (promises.size() != 1) {

View File

@ -41,17 +41,17 @@ TEST(Mtproto, config) {
auto guard = sched.get_current_guard(); auto guard = sched.get_current_guard();
auto run = [&](auto &func, bool is_test) { auto run = [&](auto &func, bool is_test) {
cnt++; auto promise = PromiseCreator::lambda([&, num = cnt](Result<SimpleConfig> r_simple_config) {
auto promise = PromiseCreator::lambda([&](Result<SimpleConfig> r_simple_config) {
if (r_simple_config.is_ok()) { if (r_simple_config.is_ok()) {
LOG(ERROR) << to_string(r_simple_config.ok()); LOG(ERROR) << num << " " << to_string(r_simple_config.ok());
} else { } else {
LOG(ERROR) << r_simple_config.error(); LOG(ERROR) << num << " " << r_simple_config.error();
} }
if (--cnt == 0) { if (--cnt == 0) {
Scheduler::instance()->finish(); Scheduler::instance()->finish();
} }
}); });
cnt++;
func(std::move(promise), is_test, -1).release(); func(std::move(promise), is_test, -1).release();
}; };
@ -178,13 +178,13 @@ class HandshakeTestActor : public Actor {
} }
private: private:
int32 dc_id_ = 0;
Status *result_; Status *result_;
bool wait_for_raw_connection_ = false; bool wait_for_raw_connection_ = false;
std::unique_ptr<RawConnection> raw_connection_; std::unique_ptr<RawConnection> raw_connection_;
bool wait_for_handshake_ = false; bool wait_for_handshake_ = false;
std::unique_ptr<AuthKeyHandshake> handshake_; std::unique_ptr<AuthKeyHandshake> handshake_;
Status status_; Status status_;
int32 dc_id_ = 0;
bool wait_for_result_ = false; bool wait_for_result_ = false;
void tear_down() override { void tear_down() override {