MCPcopy Create free account
hub / github.com/TDesktop-x64/tdesktop / requestPremiumRequiredSlice

Method requestPremiumRequiredSlice

Telegram/SourceFiles/api/api_premium.cpp:426–490  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

424}
425
426void Premium::requestPremiumRequiredSlice() {
427 _messageMoneyRequestScheduled = false;
428 if (!_resolveMessageMoneyRequestedUsers.empty()
429 || _resolveMessageMoneyRequiredUsers.empty()) {
430 return;
431 }
432 constexpr auto kPerRequest = 100;
433 auto users = MTP_vector_from_range(_resolveMessageMoneyRequiredUsers
434 | ranges::views::transform(&UserData::inputUser));
435 if (users.v.size() > kPerRequest) {
436 auto shortened = users.v;
437 shortened.resize(kPerRequest);
438 users = MTP_vector<MTPInputUser>(std::move(shortened));
439 const auto from = begin(_resolveMessageMoneyRequiredUsers);
440 _resolveMessageMoneyRequestedUsers = { from, from + kPerRequest };
441 _resolveMessageMoneyRequiredUsers.erase(from, from + kPerRequest);
442 } else {
443 _resolveMessageMoneyRequestedUsers
444 = base::take(_resolveMessageMoneyRequiredUsers);
445 }
446 const auto finish = [=](const QVector<MTPRequirementToContact> &list) {
447
448 auto index = 0;
449 for (const auto &user : base::take(_resolveMessageMoneyRequestedUsers)) {
450 const auto set = [&](bool requirePremium, int stars) {
451 using Flag = UserDataFlag;
452 constexpr auto me = Flag::RequiresPremiumToWrite;
453 constexpr auto known = Flag::MessageMoneyRestrictionsKnown;
454 constexpr auto hasPrem = Flag::HasRequirePremiumToWrite;
455 constexpr auto hasStars = Flag::HasStarsPerMessage;
456 user->setStarsPerMessage(stars);
457 user->setFlags((user->flags() & ~me)
458 | known
459 | (requirePremium ? (me | hasPrem) : Flag())
460 | (stars ? hasStars : Flag()));
461 };
462 if (index >= list.size()) {
463 set(false, 0);
464 continue;
465 }
466 list[index++].match([&](const MTPDrequirementToContactEmpty &) {
467 set(false, 0);
468 }, [&](const MTPDrequirementToContactPremium &) {
469 set(true, 0);
470 }, [&](const MTPDrequirementToContactPaidMessages &data) {
471 set(false, data.vstars_amount().v);
472 });
473 }
474 if (!_messageMoneyRequestScheduled
475 && !_resolveMessageMoneyRequiredUsers.empty()) {
476 _messageMoneyRequestScheduled = true;
477 crl::on_main(_session, [=] {
478 requestPremiumRequiredSlice();
479 });
480 }
481 _someMessageMoneyRestrictionsResolved.fire({});
482 };
483 _session->api().request(

Callers

nothing calls this directly

Calls 15

MTP_vector_from_rangeFunction · 0.85
resizeMethod · 0.80
apiMethod · 0.80
FlagEnum · 0.50
finishFunction · 0.50
emptyMethod · 0.45
sizeMethod · 0.45
eraseMethod · 0.45
setStarsPerMessageMethod · 0.45
setFlagsMethod · 0.45
flagsMethod · 0.45
fireMethod · 0.45

Tested by

no test coverage detected