57 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
| This file is part of Telegram Desktop,
 | |
| the official desktop application for the Telegram messaging service.
 | |
| 
 | |
| For license and copyright information please follow this link:
 | |
| https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 | |
| */
 | |
| #pragma once
 | |
| 
 | |
| struct PollAnswer {
 | |
| 	QString text;
 | |
| 	QByteArray option;
 | |
| 	int votes = 0;
 | |
| 	bool chosen = false;
 | |
| };
 | |
| 
 | |
| inline bool operator==(const PollAnswer &a, const PollAnswer &b) {
 | |
| 	return (a.text == b.text)
 | |
| 		&& (a.option == b.option);
 | |
| }
 | |
| 
 | |
| inline bool operator!=(const PollAnswer &a, const PollAnswer &b) {
 | |
| 	return !(a == b);
 | |
| }
 | |
| 
 | |
| struct PollData {
 | |
| 	explicit PollData(PollId id);
 | |
| 
 | |
| 	bool applyChanges(const MTPDpoll &poll);
 | |
| 	bool applyResults(const MTPPollResults &results);
 | |
| 	void checkResultsReload(not_null<HistoryItem*> item, crl::time now);
 | |
| 
 | |
| 	PollAnswer *answerByOption(const QByteArray &option);
 | |
| 	const PollAnswer *answerByOption(const QByteArray &option) const;
 | |
| 
 | |
| 	bool voted() const;
 | |
| 
 | |
| 	PollId id = 0;
 | |
| 	QString question;
 | |
| 	std::vector<PollAnswer> answers;
 | |
| 	int totalVoters = 0;
 | |
| 	bool closed = false;
 | |
| 	QByteArray sendingVote;
 | |
| 	crl::time lastResultsUpdate = 0;
 | |
| 
 | |
| 	int version = 0;
 | |
| 
 | |
| 	static constexpr auto kMaxOptions = 10;
 | |
| 
 | |
| private:
 | |
| 	bool applyResultToAnswers(
 | |
| 		const MTPPollAnswerVoters &result,
 | |
| 		bool isMinResults);
 | |
| 
 | |
| };
 | |
| 
 | |
| MTPPoll PollDataToMTP(not_null<const PollData*> poll);
 | 
