56 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
	
		
			1.4 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
 | 
						|
 | 
						|
#include "data/data_subscription_option.h"
 | 
						|
 | 
						|
namespace Api {
 | 
						|
 | 
						|
[[nodiscard]] Data::SubscriptionOption CreateSubscriptionOption(
 | 
						|
	int months,
 | 
						|
	int monthlyAmount,
 | 
						|
	int64 amount,
 | 
						|
	const QString ¤cy,
 | 
						|
	const QString &botUrl);
 | 
						|
 | 
						|
template<typename Option>
 | 
						|
[[nodiscard]] Data::SubscriptionOptions SubscriptionOptionsFromTL(
 | 
						|
		const QVector<Option> &tlOptions) {
 | 
						|
	if (tlOptions.isEmpty()) {
 | 
						|
		return {};
 | 
						|
	}
 | 
						|
	auto result = Data::SubscriptionOptions();
 | 
						|
	const auto monthlyAmount = [&] {
 | 
						|
		const auto &min = ranges::min_element(
 | 
						|
			tlOptions,
 | 
						|
			ranges::less(),
 | 
						|
			[](const Option &o) { return o.data().vamount().v; }
 | 
						|
		)->data();
 | 
						|
		return min.vamount().v / float64(min.vmonths().v);
 | 
						|
	}();
 | 
						|
	result.reserve(tlOptions.size());
 | 
						|
	for (const auto &tlOption : tlOptions) {
 | 
						|
		const auto &option = tlOption.data();
 | 
						|
		auto botUrl = QString();
 | 
						|
		if constexpr (!std::is_same_v<Option, MTPPremiumGiftCodeOption>) {
 | 
						|
			botUrl = qs(option.vbot_url());
 | 
						|
		}
 | 
						|
		const auto months = option.vmonths().v;
 | 
						|
		const auto amount = option.vamount().v;
 | 
						|
		const auto currency = qs(option.vcurrency());
 | 
						|
		result.push_back(CreateSubscriptionOption(
 | 
						|
			months,
 | 
						|
			monthlyAmount,
 | 
						|
			amount,
 | 
						|
			currency,
 | 
						|
			botUrl));
 | 
						|
	}
 | 
						|
	return result;
 | 
						|
}
 | 
						|
 | 
						|
} // namespace Api
 |