From de8b09d7fcc1029fdebbff582890e7e2aeae25c2 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 17 Dec 2023 21:04:50 +0000 Subject: [PATCH] Use correct phrases for outgoing giftcodes. --- .../SourceFiles/boxes/gift_premium_box.cpp | 18 +++++--- Telegram/SourceFiles/history/history_item.cpp | 42 +++++++++++++------ .../view/media/history_view_premium_gift.cpp | 20 +++++++-- .../view/media/history_view_premium_gift.h | 3 ++ .../SourceFiles/settings/settings_premium.cpp | 11 +++-- 5 files changed, 68 insertions(+), 26 deletions(-) diff --git a/Telegram/SourceFiles/boxes/gift_premium_box.cpp b/Telegram/SourceFiles/boxes/gift_premium_box.cpp index 71ed96b18..a5847028e 100644 --- a/Telegram/SourceFiles/boxes/gift_premium_box.cpp +++ b/Telegram/SourceFiles/boxes/gift_premium_box.cpp @@ -720,7 +720,7 @@ void AddTable( controller, current.from); } - if (current.to) { + if (current.from && current.to) { AddTableRow( table, tr::lng_gift_link_label_to(), @@ -739,7 +739,7 @@ void AddTable( lt_duration, GiftDurationValue(current.months) | Ui::Text::ToWithEntities(), Ui::Text::WithEntities)); - if (!skipReason) { + if (!skipReason && current.from) { const auto reason = AddTableRow( table, tr::lng_gift_link_label_reason(), @@ -1178,13 +1178,19 @@ void ResolveGiftCode( PeerId fromId, PeerId toId) { const auto done = [=](Api::GiftCode code) { + const auto session = &controller->session(); + const auto selfId = session->userPeerId(); if (!code) { controller->showToast(tr::lng_gift_link_expired(tr::now)); + } else if (!code.from && fromId == selfId) { + code.from = fromId; + code.to = toId; + const auto self = (fromId == selfId); + const auto peer = session->data().peer(self ? toId : fromId); + const auto months = code.months; + const auto parent = controller->parentController(); + Settings::ShowGiftPremium(parent, peer, months, self); } else { - if (!code.from) { - code.from = fromId; - code.to = toId; - } controller->uiShow()->showBox(Box(GiftCodeBox, controller, slug)); } }; diff --git a/Telegram/SourceFiles/history/history_item.cpp b/Telegram/SourceFiles/history/history_item.cpp index b078c358e..1b867ce6e 100644 --- a/Telegram/SourceFiles/history/history_item.cpp +++ b/Telegram/SourceFiles/history/history_item.cpp @@ -4530,19 +4530,35 @@ void HistoryItem::setServiceMessageByAction(const MTPmessageAction &action) { auto prepareGiftCode = [&](const MTPDmessageActionGiftCode &action) { auto result = PreparedServiceText(); _history->session().giftBoxStickersPacks().load(); - result.text = { - (action.is_unclaimed() - ? tr::lng_prize_unclaimed_about - : action.is_via_giveaway() - ? tr::lng_prize_about - : tr::lng_prize_gift_about)( + if (const auto boosted = action.vboost_peer()) { + result.text = { + (action.is_unclaimed() + ? tr::lng_prize_unclaimed_about + : action.is_via_giveaway() + ? tr::lng_prize_about + : tr::lng_prize_gift_about)( + tr::now, + lt_channel, + _from->owner().peer( + peerFromMTP(*action.vboost_peer()))->name()), + }; + } else { + const auto isSelf = (_from->id == _from->session().userPeerId()); + const auto peer = isSelf ? _history->peer : _from; + result.links.push_back(peer->createOpenLink()); + result.text = (isSelf + ? tr::lng_action_gift_received_me + : tr::lng_action_gift_received)( tr::now, - lt_channel, - (action.vboost_peer() - ? _from->owner().peer( - peerFromMTP(*action.vboost_peer()))->name() - : "a channel")), - }; + lt_user, + Ui::Text::Link(peer->name(), 1), // Link 1. + lt_cost, + { Ui::FillAmountAndCurrency( + action.vamount().value_or_empty(), + qs(action.vcurrency().value_or_empty())) }, + Ui::Text::WithEntities); + + } return result; }; @@ -4697,7 +4713,7 @@ void HistoryItem::applyAction(const MTPMessageAction &action) { _from, Data::GiftCode{ .slug = qs(data.vslug()), - .channel = (peerIsChannel(boostedId) + .channel = (boostedId ? history()->owner().channel(boostedId).get() : nullptr), .months = data.vmonths().v, diff --git a/Telegram/SourceFiles/history/view/media/history_view_premium_gift.cpp b/Telegram/SourceFiles/history/view/media/history_view_premium_gift.cpp index ad3e9dc47..7701f6db8 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_premium_gift.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_premium_gift.cpp @@ -43,7 +43,7 @@ QSize PremiumGift::size() { } QString PremiumGift::title() { - return _data.slug.isEmpty() + return gift() ? tr::lng_premium_summary_title(tr::now) : _data.unclaimed ? tr::lng_prize_unclaimed_title(tr::now) @@ -51,7 +51,7 @@ QString PremiumGift::title() { } TextWithEntities PremiumGift::subtitle() { - if (_data.slug.isEmpty()) { + if (gift()) { return { GiftDuration(_data.months) }; } const auto name = _data.channel ? _data.channel->name() : "channel"; @@ -78,7 +78,7 @@ TextWithEntities PremiumGift::subtitle() { } rpl::producer PremiumGift::button() { - return _data.slug.isEmpty() + return (gift() && (outgoingGift() || !_data.unclaimed)) ? tr::lng_sticker_premium_view() : tr::lng_prize_open(); } @@ -121,7 +121,7 @@ void PremiumGift::draw( } bool PremiumGift::hideServiceText() { - return !_data.slug.isEmpty(); + return !gift(); } void PremiumGift::stickerClearLoopPlayed() { @@ -148,6 +148,18 @@ void PremiumGift::unloadHeavyPart() { } } +bool PremiumGift::incomingGift() const { + return gift() && !_parent->data()->out(); +} + +bool PremiumGift::outgoingGift() const { + return gift() && _parent->data()->out(); +} + +bool PremiumGift::gift() const { + return _data.slug.isEmpty() || !_data.channel; +} + void PremiumGift::ensureStickerCreated() const { if (_sticker) { return; diff --git a/Telegram/SourceFiles/history/view/media/history_view_premium_gift.h b/Telegram/SourceFiles/history/view/media/history_view_premium_gift.h index b83c4e16b..af5724dfa 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_premium_gift.h +++ b/Telegram/SourceFiles/history/view/media/history_view_premium_gift.h @@ -46,6 +46,9 @@ public: void unloadHeavyPart() override; private: + [[nodiscard]] bool incomingGift() const; + [[nodiscard]] bool outgoingGift() const; + [[nodiscard]] bool gift() const; void ensureStickerCreated() const; const not_null _parent; diff --git a/Telegram/SourceFiles/settings/settings_premium.cpp b/Telegram/SourceFiles/settings/settings_premium.cpp index 6c1cb52cd..a64e004c6 100644 --- a/Telegram/SourceFiles/settings/settings_premium.cpp +++ b/Telegram/SourceFiles/settings/settings_premium.cpp @@ -871,6 +871,7 @@ void Premium::setStepDataReference(std::any &data) { void Premium::setupSubscriptionOptions( not_null container) { const auto isEmojiStatus = (!!Ref::EmojiStatus::Parse(_ref)); + const auto isGift = (!!Ref::Gift::Parse(_ref)); const auto options = container->add( object_ptr>( @@ -900,15 +901,19 @@ void Premium::setupSubscriptionOptions( Ui::AddSkip(content, lastSkip - st::defaultVerticalListSkip); Ui::AddSkip(skip->entity(), lastSkip); + if (isEmojiStatus || isGift) { + options->toggle(false, anim::type::instant); + skip->toggle(true, anim::type::instant); + return; + } auto toggleOn = rpl::combine( Data::AmPremiumValue(&_controller->session()), - rpl::single(isEmojiStatus), apiPremium->statusTextValue( ) | rpl::map([=] { return apiPremium->subscriptionOptions().size() < 2; }) - ) | rpl::map([=](bool premium, bool isEmojiStatus, bool noOptions) { - return !premium && !isEmojiStatus && !noOptions; + ) | rpl::map([=](bool premium, bool noOptions) { + return !premium && !noOptions; }); options->toggleOn(rpl::duplicate(toggleOn), anim::type::instant); skip->toggleOn(std::move(