Create polls with different settings.

This commit is contained in:
John Preston 2020-01-13 13:49:18 +03:00
parent 04d9b93e17
commit f700220ec1
4 changed files with 43 additions and 8 deletions

View File

@ -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<MTPbytes>();
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<MTPbytes>()), // correct_answers #TODO polls
MTP_vector<MTPbytes>(correct)),
MTP_string(),
MTP_long(rand_value<uint64>()),
MTPReplyMarkup(),
@ -5924,15 +5933,24 @@ void ApiWrap::closePoll(not_null<HistoryItem*> item) {
return;
}
const auto inputFlags = poll->quiz()
? MTPDinputMediaPoll::Flag::f_correct_answers
: MTPDinputMediaPoll::Flag(0);
auto correct = QVector<MTPbytes>();
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<MTPbytes>()), // correct_answers #TODO polls
MTP_flags(inputFlags),
PollDataToMTP(poll, true),
MTP_vector<MTPbytes>(correct)),
MTPReplyMarkup(),
MTPVector<MTPMessageEntity>(),
MTP_int(0) // schedule_date

View File

@ -869,9 +869,13 @@ object_ptr<Ui::RpWidget> 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) {

View File

@ -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<const PollData*> poll) {
MTPPoll PollDataToMTP(not_null<const PollData*> poll, bool close) {
const auto convert = [](const PollAnswer &answer) {
return MTP_pollAnswer(
MTP_string(answer.text),
@ -213,9 +220,14 @@ MTPPoll PollDataToMTP(not_null<const PollData*> 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<MTPPollAnswer>(answers));
}

View File

@ -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<const PollData*> poll);
MTPPoll PollDataToMTP(not_null<const PollData*> poll, bool close = false);