From 7ed715b01c8d04c0de1923a9911ee2f6357d364f Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 8 Aug 2024 14:34:18 +0300 Subject: [PATCH] Added ability to edit invite links with subscription. --- Telegram/SourceFiles/api/api_invite_links.cpp | 14 ++++- Telegram/SourceFiles/api/api_invite_links.h | 9 ++- .../boxes/peers/edit_peer_invite_link.cpp | 7 +++ .../SourceFiles/ui/boxes/edit_invite_link.cpp | 61 ++++++++++--------- 4 files changed, 59 insertions(+), 32 deletions(-) diff --git a/Telegram/SourceFiles/api/api_invite_links.cpp b/Telegram/SourceFiles/api/api_invite_links.cpp index 511cc5650..c89656103 100644 --- a/Telegram/SourceFiles/api/api_invite_links.cpp +++ b/Telegram/SourceFiles/api/api_invite_links.cpp @@ -225,6 +225,15 @@ void InviteLinks::edit( requestApproval); } +void InviteLinks::editTitle( + not_null peer, + not_null admin, + const QString &link, + const QString &label, + Fn done) { + performEdit(peer, admin, link, done, false, label, 0, 0, false, true); +} + void InviteLinks::performEdit( not_null peer, not_null admin, @@ -234,7 +243,8 @@ void InviteLinks::performEdit( const QString &label, TimeId expireDate, int usageLimit, - bool requestApproval) { + bool requestApproval, + bool editOnlyTitle) { const auto key = LinkKey{ peer, link }; if (_deleteCallbacks.contains(key)) { return; @@ -259,7 +269,7 @@ void InviteLinks::performEdit( ? Flag::f_request_needed : Flag(0)); _api->request(MTPmessages_EditExportedChatInvite( - MTP_flags(flags), + MTP_flags(editOnlyTitle ? Flag::f_title : flags), peer->input, MTP_string(link), MTP_int(expireDate), diff --git a/Telegram/SourceFiles/api/api_invite_links.h b/Telegram/SourceFiles/api/api_invite_links.h index 892cd56f0..dd52feb99 100644 --- a/Telegram/SourceFiles/api/api_invite_links.h +++ b/Telegram/SourceFiles/api/api_invite_links.h @@ -84,6 +84,12 @@ public: int usageLimit, bool requestApproval, Fn done = nullptr); + void editTitle( + not_null peer, + not_null admin, + const QString &link, + const QString &label, + Fn done = nullptr); void revoke( not_null peer, not_null admin, @@ -194,7 +200,8 @@ private: const QString &label = QString(), TimeId expireDate = 0, int usageLimit = 0, - bool requestApproval = false); + bool requestApproval = false, + bool editOnlyTitle = false); void performCreate( const CreateInviteLinkArgs &args, bool revokeLegacyPermanent); diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp index 1cb38ced1..6b6bf6cab 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp @@ -1281,6 +1281,13 @@ object_ptr EditLinkBox( result.requestApproval, { uint64(result.subscriptionCredits), period }, }); + } else if (result.subscriptionCredits) { + peer->session().api().inviteLinks().editTitle( + peer, + data.admin, + result.link, + result.label, + finish); } else { peer->session().api().inviteLinks().edit( peer, diff --git a/Telegram/SourceFiles/ui/boxes/edit_invite_link.cpp b/Telegram/SourceFiles/ui/boxes/edit_invite_link.cpp index 3e09d254b..49905b87e 100644 --- a/Telegram/SourceFiles/ui/boxes/edit_invite_link.cpp +++ b/Telegram/SourceFiles/ui/boxes/edit_invite_link.cpp @@ -55,6 +55,7 @@ void EditInviteLinkBox( const auto link = data.link; const auto isGroup = data.isGroup; const auto isPublic = data.isPublic; + const auto subscriptionLocked = data.subscriptionCredits > 0; box->setTitle(link.isEmpty() ? tr::lng_group_invite_new_title() : tr::lng_group_invite_edit_title()); @@ -108,7 +109,6 @@ void EditInviteLinkBox( .subscription = false, }); - const auto subscriptionLocked = data.subscriptionCredits > 0; const auto requestApproval = (isPublic || subscriptionLocked) ? nullptr : container->add( @@ -171,6 +171,37 @@ void EditInviteLinkBox( labelField->setMaxLength(kMaxLabelLength); addDivider(container, tr::lng_group_invite_label_about()); + const auto &saveLabel = link.isEmpty() + ? tr::lng_formatting_link_create + : tr::lng_settings_save; + box->addButton(saveLabel(), [=] { + const auto label = labelField->getLastText(); + const auto expireDate = (state->expireValue == kMaxLimit) + ? 0 + : (state->expireValue < 0) + ? (base::unixtime::now() - state->expireValue) + : state->expireValue; + const auto usageLimit = (state->usageValue == kMaxLimit) + ? 0 + : state->usageValue; + done(InviteLinkFields{ + .link = link, + .label = label, + .expireDate = expireDate, + .usageLimit = usageLimit, + .subscriptionCredits = credits + ? credits->getLastText().toInt() + : 0, + .requestApproval = state->requestApproval.current(), + .isGroup = isGroup, + .isPublic = isPublic, + }); + }); + box->addButton(tr::lng_cancel(), [=] { box->closeBox(); }); + + if (subscriptionLocked) { + return; + } addTitle(container, tr::lng_group_invite_expire_title()); const auto expiresWrap = container->add( object_ptr(container), @@ -342,34 +373,6 @@ void EditInviteLinkBox( usagesSlide->toggleOn(state->requestApproval.value() | rpl::map(!_1)); usagesSlide->finishAnimating(); - - const auto &saveLabel = link.isEmpty() - ? tr::lng_formatting_link_create - : tr::lng_settings_save; - box->addButton(saveLabel(), [=] { - const auto label = labelField->getLastText(); - const auto expireDate = (state->expireValue == kMaxLimit) - ? 0 - : (state->expireValue < 0) - ? (base::unixtime::now() - state->expireValue) - : state->expireValue; - const auto usageLimit = (state->usageValue == kMaxLimit) - ? 0 - : state->usageValue; - done(InviteLinkFields{ - .link = link, - .label = label, - .expireDate = expireDate, - .usageLimit = usageLimit, - .subscriptionCredits = credits - ? credits->getLastText().toInt() - : 0, - .requestApproval = state->requestApproval.current(), - .isGroup = isGroup, - .isPublic = isPublic, - }); - }); - box->addButton(tr::lng_cancel(), [=] { box->closeBox(); }); } void CreateInviteLinkBox(