From 81a79e2895ca2359c04c489b2f5a1b0d8e03ff8a Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sat, 10 Aug 2024 22:21:28 +0300 Subject: [PATCH] Added subscription price info to list of invite links. --- .../boxes/peers/edit_peer_invite_links.cpp | 40 +++++++++++++++++-- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp index fdbc07dd5..7cdc29224 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp @@ -15,6 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "main/session/session_show.h" #include "main/main_session.h" #include "api/api_invite_links.h" +#include "settings/settings_credits_graphics.h" #include "ui/wrap/slide_wrap.h" #include "ui/widgets/buttons.h" #include "ui/widgets/popup_menu.h" @@ -64,8 +65,12 @@ struct InviteLinkAction { class Row; +using SubscriptionRightLabel = Settings::SubscriptionRightLabel; + class RowDelegate { public: + virtual std::optional rightLabel( + int credits) const = 0; virtual void rowUpdateRow(not_null row) = 0; virtual void rowPaintIcon( QPainter &p, @@ -95,6 +100,7 @@ public: bool forceRound) override; QSize rightActionSize() const override; + bool rightActionDisabled() const override; QMargins rightActionMargins() const override; void rightActionPaint( Painter &p, @@ -106,6 +112,7 @@ public: private: const not_null _delegate; + std::optional _rightLabel; InviteLinkData _data; QString _status; float64 _progressTillExpire = 0.; @@ -141,7 +148,9 @@ private: [[nodiscard]] Color ComputeColor( const InviteLinkData &link, float64 progress) { - return link.revoked + return link.subscription + ? Color::Subscription + : link.revoked ? Color::Revoked : (progress >= 1.) ? Color::Expired @@ -149,8 +158,6 @@ private: ? Color::ExpireSoon : (progress >= 0.) ? Color::Expiring - : link.subscription - ? Color::Subscription : Color::Permanent; } @@ -236,11 +243,13 @@ Row::Row( , _data(data) , _progressTillExpire(ComputeProgress(data, now)) , _color(ComputeColor(data, _progressTillExpire)) { + _rightLabel = _delegate->rightLabel(_data.subscription.credits); setCustomStatus(ComputeStatus(data, now)); } void Row::update(const InviteLinkData &data, TimeId now) { _data = data; + _rightLabel = _delegate->rightLabel(_data.subscription.credits); _progressTillExpire = ComputeProgress(data, now); _color = ComputeColor(data, _progressTillExpire); setCustomStatus(ComputeStatus(data, now)); @@ -311,12 +320,22 @@ PaintRoundImageCallback Row::generatePaintUserpicCallback(bool forceRound) { } QSize Row::rightActionSize() const { + if (_rightLabel) { + return _rightLabel->size; + } return QSize( st::inviteLinkThreeDotsIcon.width(), st::inviteLinkThreeDotsIcon.height()); } +bool Row::rightActionDisabled() const { + return _rightLabel.has_value(); +} + QMargins Row::rightActionMargins() const { + if (_rightLabel) { + return QMargins(0, 0, st::boxRowPadding.right(), 0); + } return QMargins( 0, (st::inviteLinkList.item.height - rightActionSize().height()) / 2, @@ -331,6 +350,9 @@ void Row::rightActionPaint( int outerWidth, bool selected, bool actionSelected) { + if (_rightLabel) { + return _rightLabel->draw(p, x, y, st::inviteLinkList.item.height); + } (actionSelected ? st::inviteLinkThreeDotsIconOver : st::inviteLinkThreeDotsIcon).paint(p, x, y, outerWidth); @@ -360,6 +382,7 @@ public: not_null row) override; Main::Session &session() const override; + std::optional rightLabel(int) const override; void rowUpdateRow(not_null row) override; void rowPaintIcon( QPainter &p, @@ -645,6 +668,17 @@ void LinksController::expiringProgressTimer() { } } +std::optional LinksController::rightLabel( + int credits) const { + if (credits > 0) { + return Settings::PaintSubscriptionRightLabelCallback( + &session(), + st::inviteLinkList.item, + credits); + } + return std::nullopt; +} + void LinksController::rowUpdateRow(not_null row) { delegate()->peerListUpdateRow(row); }