Fix handling errors to setPollAnswer.
GitOrigin-RevId: 686a76db9a69d7c19bda0c07d294ce9a448d09d4
This commit is contained in:
parent
1cb2141fee
commit
1e4c1f16b9
@ -314,6 +314,7 @@ string PollManager::get_poll_database_key(PollId poll_id) {
|
||||
|
||||
void PollManager::save_poll(const Poll *poll, PollId poll_id) {
|
||||
CHECK(!is_local_poll_id(poll_id));
|
||||
poll->was_saved = true;
|
||||
|
||||
if (!G()->parameters().use_message_db) {
|
||||
return;
|
||||
@ -788,6 +789,10 @@ void PollManager::on_set_poll_answer(PollId poll_id, uint64 generation,
|
||||
auto promises = std::move(pending_answer.promises_);
|
||||
pending_answers_.erase(it);
|
||||
|
||||
auto poll = get_poll(poll_id);
|
||||
if (poll != nullptr) {
|
||||
poll->was_saved = false;
|
||||
}
|
||||
if (result.is_ok()) {
|
||||
td_->updates_manager_->on_get_updates(result.move_as_ok());
|
||||
|
||||
@ -799,6 +804,17 @@ void PollManager::on_set_poll_answer(PollId poll_id, uint64 generation,
|
||||
promise.set_error(result.error().clone());
|
||||
}
|
||||
}
|
||||
if (poll != nullptr && !poll->was_saved) {
|
||||
// no updates was sent during updates processing, so send them
|
||||
// poll wasn't changed, so there is no reason to actually save it
|
||||
if (!poll->is_closed) {
|
||||
LOG(INFO) << "Schedule updating of " << poll_id << " soon";
|
||||
update_poll_timeout_.set_timeout_in(poll_id.get(), 0.0);
|
||||
}
|
||||
|
||||
notify_on_poll_update(poll_id);
|
||||
poll->was_saved = true;
|
||||
}
|
||||
}
|
||||
|
||||
void PollManager::invalidate_poll_voters(const Poll *poll, PollId poll_id) {
|
||||
|
@ -112,6 +112,7 @@ class PollManager : public Actor {
|
||||
bool allow_multiple_answers = false;
|
||||
bool is_quiz = false;
|
||||
bool is_closed = false;
|
||||
mutable bool was_saved = false;
|
||||
|
||||
template <class StorerT>
|
||||
void store(StorerT &storer) const;
|
||||
|
Reference in New Issue
Block a user