From b448160ad601b46bdebe8f76203d134795e3d31a Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 9 Apr 2019 13:25:29 +0300 Subject: [PATCH] Send updatePoll for being closed polls. GitOrigin-RevId: 3e2302d838e5d5dc03b0f6d5b164081b64b1c0eb --- td/telegram/PollManager.cpp | 12 ++++++------ td/telegram/PollManager.h | 2 ++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/td/telegram/PollManager.cpp b/td/telegram/PollManager.cpp index 886f91f9..8d883261 100644 --- a/td/telegram/PollManager.cpp +++ b/td/telegram/PollManager.cpp @@ -732,6 +732,8 @@ void PollManager::do_stop_poll(PollId poll_id, FullMessageId full_message_id, ui logevent_id = binlog_add(G()->td_db()->get_binlog(), LogEvent::HandlerType::StopPoll, storer); } + bool is_inserted = being_closed_polls_.insert(poll_id).second; + CHECK(is_inserted); auto new_promise = get_erase_logevent_promise(logevent_id, std::move(promise)); send_closure(td_->create_net_actor(std::move(new_promise)), &StopPollActor::send, full_message_id); @@ -890,7 +892,7 @@ PollId PollManager::on_get_poll(PollId poll_id, tl_object_ptrflags_ & telegram_api::poll::CLOSED_MASK) != 0; - if (is_closed != poll->is_closed) { + if (is_closed && !poll->is_closed) { poll->is_closed = is_closed; is_changed = true; } @@ -964,11 +966,9 @@ PollId PollManager::on_get_poll(PollId poll_id, tl_object_ptrtd(), &Td::send_update, - td_api::make_object(get_poll_object(poll_id, poll))); - } + } + if (need_update_poll && (is_changed || (poll->is_closed && being_closed_polls_.erase(poll_id) != 0))) { + send_closure(G()->td(), &Td::send_update, td_api::make_object(get_poll_object(poll_id, poll))); } return poll_id; } diff --git a/td/telegram/PollManager.h b/td/telegram/PollManager.h index 64a3f02b..5814c364 100644 --- a/td/telegram/PollManager.h +++ b/td/telegram/PollManager.h @@ -170,6 +170,8 @@ class PollManager : public Actor { uint64 current_generation_ = 0; std::unordered_set loaded_from_database_polls_; + + std::unordered_set being_closed_polls_; }; } // namespace td