mirror of https://github.com/procxx/kepka.git
Create polls with different settings.
This commit is contained in:
parent
04d9b93e17
commit
f700220ec1
|
@ -5842,15 +5842,24 @@ void ApiWrap::createPoll(
|
||||||
sendFlags |= MTPmessages_SendMedia::Flag::f_schedule_date;
|
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;
|
const auto replyTo = action.replyTo;
|
||||||
history->sendRequestId = request(MTPmessages_SendMedia(
|
history->sendRequestId = request(MTPmessages_SendMedia(
|
||||||
MTP_flags(sendFlags),
|
MTP_flags(sendFlags),
|
||||||
peer->input,
|
peer->input,
|
||||||
MTP_int(replyTo),
|
MTP_int(replyTo),
|
||||||
MTP_inputMediaPoll(
|
MTP_inputMediaPoll(
|
||||||
MTP_flags(0),
|
MTP_flags(inputFlags),
|
||||||
PollDataToMTP(&data),
|
PollDataToMTP(&data),
|
||||||
MTPvector<MTPbytes>()), // correct_answers #TODO polls
|
MTP_vector<MTPbytes>(correct)),
|
||||||
MTP_string(),
|
MTP_string(),
|
||||||
MTP_long(rand_value<uint64>()),
|
MTP_long(rand_value<uint64>()),
|
||||||
MTPReplyMarkup(),
|
MTPReplyMarkup(),
|
||||||
|
@ -5924,15 +5933,24 @@ void ApiWrap::closePoll(not_null<HistoryItem*> item) {
|
||||||
return;
|
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(
|
const auto requestId = request(MTPmessages_EditMessage(
|
||||||
MTP_flags(MTPmessages_EditMessage::Flag::f_media),
|
MTP_flags(MTPmessages_EditMessage::Flag::f_media),
|
||||||
item->history()->peer->input,
|
item->history()->peer->input,
|
||||||
MTP_int(item->id),
|
MTP_int(item->id),
|
||||||
MTPstring(),
|
MTPstring(),
|
||||||
MTP_inputMediaPoll(
|
MTP_inputMediaPoll(
|
||||||
MTP_flags(0),
|
MTP_flags(inputFlags),
|
||||||
PollDataToMTP(poll),
|
PollDataToMTP(poll, true),
|
||||||
MTPvector<MTPbytes>()), // correct_answers #TODO polls
|
MTP_vector<MTPbytes>(correct)),
|
||||||
MTPReplyMarkup(),
|
MTPReplyMarkup(),
|
||||||
MTPVector<MTPMessageEntity>(),
|
MTPVector<MTPMessageEntity>(),
|
||||||
MTP_int(0) // schedule_date
|
MTP_int(0) // schedule_date
|
||||||
|
|
|
@ -869,9 +869,13 @@ object_ptr<Ui::RpWidget> CreatePollBox::setupContent() {
|
||||||
};
|
};
|
||||||
|
|
||||||
const auto collectResult = [=] {
|
const auto collectResult = [=] {
|
||||||
|
using Flag = PollData::Flag;
|
||||||
auto result = PollData(&_session->data(), id);
|
auto result = PollData(&_session->data(), id);
|
||||||
result.question = question->getLastText().trimmed();
|
result.question = question->getLastText().trimmed();
|
||||||
result.answers = options->toPollAnswers();
|
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;
|
return result;
|
||||||
};
|
};
|
||||||
const auto send = [=](Api::SendOptions options) {
|
const auto send = [=](Api::SendOptions options) {
|
||||||
|
|
|
@ -177,6 +177,13 @@ bool PollData::applyResultToAnswers(
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PollData::setFlags(Flags flags) {
|
||||||
|
if (_flags != flags) {
|
||||||
|
_flags = flags;
|
||||||
|
++version;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PollData::Flags PollData::flags() const {
|
PollData::Flags PollData::flags() const {
|
||||||
return _flags;
|
return _flags;
|
||||||
}
|
}
|
||||||
|
@ -201,7 +208,7 @@ bool PollData::quiz() const {
|
||||||
return (_flags & Flag::Quiz);
|
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) {
|
const auto convert = [](const PollAnswer &answer) {
|
||||||
return MTP_pollAnswer(
|
return MTP_pollAnswer(
|
||||||
MTP_string(answer.text),
|
MTP_string(answer.text),
|
||||||
|
@ -213,9 +220,14 @@ MTPPoll PollDataToMTP(not_null<const PollData*> poll) {
|
||||||
poll->answers,
|
poll->answers,
|
||||||
ranges::back_inserter(answers),
|
ranges::back_inserter(answers),
|
||||||
convert);
|
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(
|
return MTP_poll(
|
||||||
MTP_long(poll->id),
|
MTP_long(poll->id),
|
||||||
MTP_flags(MTPDpoll::Flag::f_closed),
|
MTP_flags(flags),
|
||||||
MTP_string(poll->question),
|
MTP_string(poll->question),
|
||||||
MTP_vector<MTPPollAnswer>(answers));
|
MTP_vector<MTPPollAnswer>(answers));
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,7 @@ struct PollData {
|
||||||
[[nodiscard]] const PollAnswer *answerByOption(
|
[[nodiscard]] const PollAnswer *answerByOption(
|
||||||
const QByteArray &option) const;
|
const QByteArray &option) const;
|
||||||
|
|
||||||
|
void setFlags(Flags flags);
|
||||||
[[nodiscard]] Flags flags() const;
|
[[nodiscard]] Flags flags() const;
|
||||||
[[nodiscard]] bool voted() const;
|
[[nodiscard]] bool voted() const;
|
||||||
[[nodiscard]] bool closed() 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);
|
||||||
|
|
Loading…
Reference in New Issue