Use InvokeAfter for ToggleDialogIsBlocked queries.
This commit is contained in:
parent
5642947198
commit
f96d61dd4d
@ -1740,26 +1740,25 @@ class ToggleDialogUnreadMarkQuery final : public Td::ResultHandler {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class ToggleDialogIsBlockedQuery final : public Td::ResultHandler {
|
class ToggleDialogIsBlockedActor final : public NetActorOnce {
|
||||||
Promise<Unit> promise_;
|
Promise<Unit> promise_;
|
||||||
DialogId dialog_id_;
|
DialogId dialog_id_;
|
||||||
bool is_blocked_;
|
bool is_blocked_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit ToggleDialogIsBlockedQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
explicit ToggleDialogIsBlockedActor(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void send(DialogId dialog_id, bool is_blocked) {
|
void send(DialogId dialog_id, bool is_blocked, uint64 sequence_dispatcher_id) {
|
||||||
dialog_id_ = dialog_id;
|
dialog_id_ = dialog_id;
|
||||||
is_blocked_ = is_blocked;
|
is_blocked_ = is_blocked;
|
||||||
|
|
||||||
auto input_peer = td->messages_manager_->get_input_peer(dialog_id, AccessRights::Know);
|
auto input_peer = td->messages_manager_->get_input_peer(dialog_id, AccessRights::Know);
|
||||||
CHECK(input_peer != nullptr && input_peer->get_id() != telegram_api::inputPeerEmpty::ID);
|
CHECK(input_peer != nullptr && input_peer->get_id() != telegram_api::inputPeerEmpty::ID);
|
||||||
if (is_blocked) {
|
auto query = is_blocked ? G()->net_query_creator().create(telegram_api::contacts_block(std::move(input_peer)))
|
||||||
send_query(G()->net_query_creator().create(telegram_api::contacts_block(std::move(input_peer))));
|
: G()->net_query_creator().create(telegram_api::contacts_unblock(std::move(input_peer)));
|
||||||
} else {
|
send_closure(td->messages_manager_->sequence_dispatcher_, &MultiSequenceDispatcher::send_with_callback,
|
||||||
send_query(G()->net_query_creator().create(telegram_api::contacts_unblock(std::move(input_peer))));
|
std::move(query), actor_shared(this), sequence_dispatcher_id);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_result(uint64 id, BufferSlice packet) final {
|
void on_result(uint64 id, BufferSlice packet) final {
|
||||||
@ -1777,13 +1776,13 @@ class ToggleDialogIsBlockedQuery final : public Td::ResultHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void on_error(uint64 id, Status status) final {
|
void on_error(uint64 id, Status status) final {
|
||||||
if (!td->messages_manager_->on_get_dialog_error(dialog_id_, status, "ToggleDialogIsBlockedQuery")) {
|
if (!td->messages_manager_->on_get_dialog_error(dialog_id_, status, "ToggleDialogIsBlockedActor")) {
|
||||||
LOG(ERROR) << "Receive error for ToggleDialogIsBlockedQuery: " << status;
|
LOG(ERROR) << "Receive error for ToggleDialogIsBlockedActor: " << status;
|
||||||
}
|
}
|
||||||
if (!G()->close_flag()) {
|
if (!G()->close_flag()) {
|
||||||
td->messages_manager_->on_update_dialog_is_blocked(dialog_id_, !is_blocked_);
|
td->messages_manager_->on_update_dialog_is_blocked(dialog_id_, !is_blocked_);
|
||||||
td->messages_manager_->get_dialog_info_full(dialog_id_, Auto(), "ToggleDialogIsBlockedQuery");
|
td->messages_manager_->get_dialog_info_full(dialog_id_, Auto(), "ToggleDialogIsBlockedActor");
|
||||||
td->messages_manager_->reget_dialog_action_bar(dialog_id_, "ToggleDialogIsBlockedQuery");
|
td->messages_manager_->reget_dialog_action_bar(dialog_id_, "ToggleDialogIsBlockedActor");
|
||||||
}
|
}
|
||||||
promise_.set_error(std::move(status));
|
promise_.set_error(std::move(status));
|
||||||
}
|
}
|
||||||
@ -19188,8 +19187,9 @@ void MessagesManager::toggle_dialog_is_blocked_on_server(DialogId dialog_id, boo
|
|||||||
log_event_id = save_toggle_dialog_is_blocked_on_server_log_event(dialog_id, is_blocked);
|
log_event_id = save_toggle_dialog_is_blocked_on_server_log_event(dialog_id, is_blocked);
|
||||||
}
|
}
|
||||||
|
|
||||||
td_->create_handler<ToggleDialogIsBlockedQuery>(get_erase_log_event_promise(log_event_id))
|
send_closure(td_->create_net_actor<ToggleDialogIsBlockedActor>(get_erase_log_event_promise(log_event_id)),
|
||||||
->send(dialog_id, is_blocked);
|
&ToggleDialogIsBlockedActor::send, dialog_id, is_blocked,
|
||||||
|
get_sequence_dispatcher_id(dialog_id, MessageContentType::Text));
|
||||||
}
|
}
|
||||||
|
|
||||||
Status MessagesManager::toggle_dialog_silent_send_message(DialogId dialog_id, bool silent_send_message) {
|
Status MessagesManager::toggle_dialog_silent_send_message(DialogId dialog_id, bool silent_send_message) {
|
||||||
|
Loading…
Reference in New Issue
Block a user