From f3130ea7fbc15d684c17ec191edb8ee4296fb19a Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 14 Jan 2020 17:16:36 +0300 Subject: [PATCH] Update layer 109 scheme. GitOrigin-RevId: 224d93e4569e849567554961da097c8dc84ab907 --- td/generate/scheme/telegram_api.tl | 2 ++ td/generate/scheme/telegram_api.tlo | Bin 199936 -> 200248 bytes td/telegram/PollManager.cpp | 38 +++++++++++++++++++++------- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/td/generate/scheme/telegram_api.tl b/td/generate/scheme/telegram_api.tl index 99f3e31c6..c4e1a6e5b 100644 --- a/td/generate/scheme/telegram_api.tl +++ b/td/generate/scheme/telegram_api.tl @@ -1095,6 +1095,8 @@ themeSettings#9c14984a flags:# base_theme:BaseTheme accent_color:int message_top webPageAttributeTheme#54b56617 flags:# documents:flags.0?Vector settings:flags.1?ThemeSettings = WebPageAttribute; messageUserVote#a28e5559 user_id:int option:bytes date:int = MessageUserVote; +messageUserVoteInputOption#36377430 user_id:int date:int = MessageUserVote; +messageUserVoteMultiple#e8fe0de user_id:int options:Vector date:int = MessageUserVote; messages.votesList#823f649 flags:# count:int votes:Vector users:Vector next_offset:flags.0?string = messages.VotesList; diff --git a/td/generate/scheme/telegram_api.tlo b/td/generate/scheme/telegram_api.tlo index 81d00fc2fed67eaae582d930352eb0d4bbadfaa0..fc67277c6a005f7e5ac13e82a669bfb74c895baf 100644 GIT binary patch delta 216 zcmZpe#j|4$&xQ{oqT3Ie&Eoe>EiO(>PYo?jEegvoNoAg_$SA&9MpQ(OQE#)MvGOMt zkgCZBB|6g^4l{8~?@?v6F#!oNK*3cxt{8(7b2F)2RD(S83Q9}-3raHc^BBNJ=rjiy zpliJMpr211O`~sVPDy4#PAc5qGcTA7rY}%s)BroB{fsK(_A{zXJJ`V7X=fQ7wx7^p HvUmUhrrS@( delta 93 zcmdlnho@l{&xQ{oB9Wnei}-z0i;EM}Q$veWi^B3tQYS8u*eoL|BFCt++0a<|6AMVq qWP=i&=^Am23X?Z<%S@hN!2uR+XHjR|&Z5q=gAL5xen6M0;sF3)#Ub4Q diff --git a/td/telegram/PollManager.cpp b/td/telegram/PollManager.cpp index ad15fb3cb..d2f428b72 100644 --- a/td/telegram/PollManager.cpp +++ b/td/telegram/PollManager.cpp @@ -22,6 +22,7 @@ #include "td/telegram/StateManager.h" #include "td/telegram/Td.h" #include "td/telegram/TdDb.h" +#include "td/telegram/telegram_api.hpp" #include "td/telegram/UpdatesManager.h" #include "td/db/binlog/BinlogEvent.h" @@ -875,7 +876,7 @@ void PollManager::get_poll_voters(PollId poll_id, FullMessageId full_message_id, return promise.set_value({poll->options[option_id].voter_count, std::move(result)}); } - if (poll->options[option_id].voter_count == 0) { + if (poll->options[option_id].voter_count == 0 || (voters.next_offset.empty() && cur_offset > 0)) { return promise.set_value({0, vector()}); } @@ -927,20 +928,39 @@ void PollManager::on_get_poll_voters(PollId poll_id, int32 option_id, } vector user_ids; - for (auto &voter : vote_list->votes_) { - UserId user_id(voter->user_id_); + for (auto &user_vote : vote_list->votes_) { + UserId user_id; + downcast_call(*user_vote, [&user_id](auto &voter) { user_id = UserId(voter.user_id_); }); if (!user_id.is_valid()) { LOG(ERROR) << "Receive " << user_id << " as voter in " << poll_id; continue; } - if (voter->option_ != poll->options[option_id].data) { - LOG(ERROR) << "Receive " << user_id << " in " << poll_id << " voted for unexpected option"; - continue; - } - voters.voter_user_ids.push_back(user_id); - user_ids.push_back(user_id); + switch (user_vote->get_id()) { + case telegram_api::messageUserVote::ID: { + auto voter = telegram_api::move_object_as(user_vote); + if (voter->option_ != poll->options[option_id].data) { + continue; + } + + user_ids.push_back(user_id); + break; + } + case telegram_api::messageUserVoteInputOption::ID: + user_ids.push_back(user_id); + break; + case telegram_api::messageUserVoteMultiple::ID: { + auto voter = telegram_api::move_object_as(user_vote); + if (!td::contains(voter->options_, poll->options[option_id].data)) { + continue; + } + + user_ids.push_back(user_id); + break; + } + } } + voters.voter_user_ids.insert(voters.voter_user_ids.end(), user_ids.begin(), user_ids.end()); for (auto &promise : promises) { promise.set_value({vote_list->count_, vector(user_ids)});