mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-03-25 04:38:23 +00:00
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;
|
||||
}
|
||||
|
||||
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
|
||||
|
@ -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) {
|
||||
|
@ -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));
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user