| 74 | } |
| 75 | |
| 76 | void InviteLinks::performCreate( |
| 77 | const CreateInviteLinkArgs &args, |
| 78 | bool revokeLegacyPermanent) { |
| 79 | if (const auto i = _createCallbacks.find(args.peer) |
| 80 | ; i != end(_createCallbacks)) { |
| 81 | if (args.done) { |
| 82 | i->second.push_back(std::move(args.done)); |
| 83 | } |
| 84 | return; |
| 85 | } |
| 86 | auto &callbacks = _createCallbacks[args.peer]; |
| 87 | if (args.done) { |
| 88 | callbacks.push_back(std::move(args.done)); |
| 89 | } |
| 90 | |
| 91 | const auto requestApproval = !args.subscription && args.requestApproval; |
| 92 | using Flag = MTPmessages_ExportChatInvite::Flag; |
| 93 | _api->request(MTPmessages_ExportChatInvite( |
| 94 | MTP_flags((revokeLegacyPermanent |
| 95 | ? Flag::f_legacy_revoke_permanent |
| 96 | : Flag(0)) |
| 97 | | (!args.label.isEmpty() ? Flag::f_title : Flag(0)) |
| 98 | | (args.expireDate ? Flag::f_expire_date : Flag(0)) |
| 99 | | ((!requestApproval && args.usageLimit) |
| 100 | ? Flag::f_usage_limit |
| 101 | : Flag(0)) |
| 102 | | (requestApproval ? Flag::f_request_needed : Flag(0)) |
| 103 | | (args.subscription ? Flag::f_subscription_pricing : Flag(0))), |
| 104 | args.peer->input(), |
| 105 | MTP_int(args.expireDate), |
| 106 | MTP_int(args.usageLimit), |
| 107 | MTP_string(args.label), |
| 108 | MTP_starsSubscriptionPricing( |
| 109 | MTP_int(args.subscription.period), |
| 110 | MTP_long(args.subscription.credits)) |
| 111 | )).done([=, peer = args.peer](const MTPExportedChatInvite &result) { |
| 112 | const auto callbacks = _createCallbacks.take(peer); |
| 113 | const auto link = prepend(peer, peer->session().user(), result); |
| 114 | if (link && callbacks) { |
| 115 | for (const auto &callback : *callbacks) { |
| 116 | callback(*link); |
| 117 | } |
| 118 | } |
| 119 | }).fail([=, peer = args.peer] { |
| 120 | _createCallbacks.erase(peer); |
| 121 | }).send(); |
| 122 | } |
| 123 | |
| 124 | auto InviteLinks::lookupMyPermanent(not_null<PeerData*> peer) -> Link* { |
| 125 | auto i = _firstSlices.find(peer); |
nothing calls this directly
no test coverage detected