diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index 6d86fdfa84..3866d85b8d 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -5842,15 +5842,24 @@ void ApiWrap::createPoll( sendFlags |= MTPmessages_SendMedia::Flag::f_schedule_date; } + const auto inputFlags = data.quiz() + ? MTPDinputMediaPoll::Flag::f_correct_answers + : MTPDinputMediaPoll::Flag(0); + auto correct = QVector(); + for (const auto &answer : data.answers) { + if (answer.correct) { + correct.push_back(MTP_bytes(answer.option)); + } + } const auto replyTo = action.replyTo; history->sendRequestId = request(MTPmessages_SendMedia( MTP_flags(sendFlags), peer->input, MTP_int(replyTo), MTP_inputMediaPoll( - MTP_flags(0), + MTP_flags(inputFlags), PollDataToMTP(&data), - MTPvector()), // correct_answers #TODO polls + MTP_vector(correct)), MTP_string(), MTP_long(rand_value()), MTPReplyMarkup(), @@ -5924,15 +5933,24 @@ void ApiWrap::closePoll(not_null item) { return; } + const auto inputFlags = poll->quiz() + ? MTPDinputMediaPoll::Flag::f_correct_answers + : MTPDinputMediaPoll::Flag(0); + auto correct = QVector(); + for (const auto &answer : poll->answers) { + if (answer.correct) { + correct.push_back(MTP_bytes(answer.option)); + } + } const auto requestId = request(MTPmessages_EditMessage( MTP_flags(MTPmessages_EditMessage::Flag::f_media), item->history()->peer->input, MTP_int(item->id), MTPstring(), MTP_inputMediaPoll( - MTP_flags(0), - PollDataToMTP(poll), - MTPvector()), // correct_answers #TODO polls + MTP_flags(inputFlags), + PollDataToMTP(poll, true), + MTP_vector(correct)), MTPReplyMarkup(), MTPVector(), MTP_int(0) // schedule_date diff --git a/Telegram/SourceFiles/boxes/create_poll_box.cpp b/Telegram/SourceFiles/boxes/create_poll_box.cpp index b86863d72e..6af46f625d 100644 --- a/Telegram/SourceFiles/boxes/create_poll_box.cpp +++ b/Telegram/SourceFiles/boxes/create_poll_box.cpp @@ -869,9 +869,13 @@ object_ptr CreatePollBox::setupContent() { }; const auto collectResult = [=] { + using Flag = PollData::Flag; auto result = PollData(&_session->data(), id); result.question = question->getLastText().trimmed(); result.answers = options->toPollAnswers(); + result.setFlags((anonymous->checked() ? Flag(0) : Flag::PublicVotes) + | (multiple->checked() ? Flag::MultiChoice : Flag(0)) + | (quiz->checked() ? Flag::Quiz : Flag(0))); return result; }; const auto send = [=](Api::SendOptions options) { diff --git a/Telegram/SourceFiles/data/data_poll.cpp b/Telegram/SourceFiles/data/data_poll.cpp index 586c097d34..167a94c837 100644 --- a/Telegram/SourceFiles/data/data_poll.cpp +++ b/Telegram/SourceFiles/data/data_poll.cpp @@ -177,6 +177,13 @@ bool PollData::applyResultToAnswers( }); } +void PollData::setFlags(Flags flags) { + if (_flags != flags) { + _flags = flags; + ++version; + } +} + PollData::Flags PollData::flags() const { return _flags; } @@ -201,7 +208,7 @@ bool PollData::quiz() const { return (_flags & Flag::Quiz); } -MTPPoll PollDataToMTP(not_null poll) { +MTPPoll PollDataToMTP(not_null poll, bool close) { const auto convert = [](const PollAnswer &answer) { return MTP_pollAnswer( MTP_string(answer.text), @@ -213,9 +220,14 @@ MTPPoll PollDataToMTP(not_null poll) { poll->answers, ranges::back_inserter(answers), convert); + using Flag = MTPDpoll::Flag; + const auto flags = ((poll->closed() || close) ? Flag::f_closed : Flag(0)) + | (poll->multiChoice() ? Flag::f_multiple_choice : Flag(0)) + | (poll->publicVotes() ? Flag::f_public_voters : Flag(0)) + | (poll->quiz() ? Flag::f_quiz : Flag(0)); return MTP_poll( MTP_long(poll->id), - MTP_flags(MTPDpoll::Flag::f_closed), + MTP_flags(flags), MTP_string(poll->question), MTP_vector(answers)); } diff --git a/Telegram/SourceFiles/data/data_poll.h b/Telegram/SourceFiles/data/data_poll.h index 893027e2cb..590747955a 100644 --- a/Telegram/SourceFiles/data/data_poll.h +++ b/Telegram/SourceFiles/data/data_poll.h @@ -48,6 +48,7 @@ struct PollData { [[nodiscard]] const PollAnswer *answerByOption( const QByteArray &option) const; + void setFlags(Flags flags); [[nodiscard]] Flags flags() const; [[nodiscard]] bool voted() const; [[nodiscard]] bool closed() const; @@ -77,4 +78,4 @@ private: }; -MTPPoll PollDataToMTP(not_null poll); +MTPPoll PollDataToMTP(not_null poll, bool close = false);