From 90ef0e496988fd40e830439fe5e12cba1268ec2e Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sat, 20 Aug 2022 13:18:31 +0300 Subject: [PATCH] Reformated serializing and parsing of ref data for Premium Settings. --- .../data/stickers/data_custom_emoji.h | 2 - .../info/profile/info_profile_cover.cpp | 6 +- .../SourceFiles/settings/settings_premium.cpp | 59 ++++++++++++++++--- .../SourceFiles/settings/settings_premium.h | 3 + 4 files changed, 57 insertions(+), 13 deletions(-) diff --git a/Telegram/SourceFiles/data/stickers/data_custom_emoji.h b/Telegram/SourceFiles/data/stickers/data_custom_emoji.h index 11e4b979c..3d052e522 100644 --- a/Telegram/SourceFiles/data/stickers/data_custom_emoji.h +++ b/Telegram/SourceFiles/data/stickers/data_custom_emoji.h @@ -12,8 +12,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/timer.h" #include "base/weak_ptr.h" -struct StickerSetIdentifier; - namespace Main { class Session; } // namespace Main diff --git a/Telegram/SourceFiles/info/profile/info_profile_cover.cpp b/Telegram/SourceFiles/info/profile/info_profile_cover.cpp index 15f75a2f8..2c25cfdb4 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_cover.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_cover.cpp @@ -140,7 +140,7 @@ void BadgeView::setBadge(Badge badge, DocumentId emojiStatusId) { : SizeTag::Normal; _emojiStatus = _peer->owner().customEmojiManager().create( _emojiStatusId, - [raw = _view.data()]{ raw->update(); }, + [raw = _view.data()] { raw->update(); }, tag); const auto emoji = Data::FrameSizeFromTag(tag) / style::DevicePixelRatio(); @@ -347,9 +347,7 @@ Cover::Cover( if (_peer->isSelf()) { _emojiStatusPanel.show(_controller, _badge.widget()); } else { - ::Settings::ShowPremium( - _controller, - u"profile__%1"_q.arg(peerToUser(_peer->id).bare)); + ::Settings::ShowEmojiStatusPremium(_controller, _peer); } }); _badge.updated() | rpl::start_with_next([=] { diff --git a/Telegram/SourceFiles/settings/settings_premium.cpp b/Telegram/SourceFiles/settings/settings_premium.cpp index c37b79cc9..64a6587a2 100644 --- a/Telegram/SourceFiles/settings/settings_premium.cpp +++ b/Telegram/SourceFiles/settings/settings_premium.cpp @@ -54,13 +54,20 @@ using SectionCustomTopBarData = Info::Settings::SectionCustomTopBarData; constexpr auto kBodyAnimationPart = 0.90; constexpr auto kTitleAdditionalScale = 0.15; -struct GiftRef { +namespace Ref { +namespace Gift { + +struct Data { PeerId peerId; int months; bool me; + + explicit operator bool() const { + return peerId != 0; + } }; -[[nodiscard]] QString SerializeRef(const GiftRef &gift) { +[[nodiscard]] QString Serialize(const Data &gift) { return QString::number(gift.peerId.value) + ':' + QString::number(gift.months) @@ -68,7 +75,7 @@ struct GiftRef { + QString::number(gift.me ? 1 : 0); } -[[nodiscard]] GiftRef ParseGiftRef(QStringView data) { +[[nodiscard]] Data Parse(QStringView data) { const auto components = data.split(':'); if (components.size() != 3) { return {}; @@ -80,6 +87,38 @@ struct GiftRef { }; } +} // namespace Gift + +namespace EmojiStatus { + +struct Data { + PeerId peerId; + + explicit operator bool() const { + return peerId != 0; + } +}; + +[[nodiscard]] QString Serialize(const Data &gift) { + return QString("profile_:%1").arg(QString::number(gift.peerId.value)); +} + +[[nodiscard]] Data Parse(QStringView data) { + if (data.startsWith(u"profile_:"_q)) { + const auto components = data.split(':'); + if (components.size() != 2) { + return {}; + } + return { + .peerId = PeerId(components[1].toULongLong()), + }; + } + return {}; +} + +} // namespace EmojiStatus +} // namespace Ref + struct Entry { const style::icon *icon; rpl::producer title; @@ -760,8 +799,8 @@ QPointer Premium::createPinnedToTop( tr::lng_premium_summary_title_subscribed(), tr::lng_premium_summary_title()); auto about = [&]() -> rpl::producer { - const auto gift = ParseGiftRef(_ref); - if (gift.peerId) { + const auto gift = Ref::Gift::Parse(_ref); + if (gift) { auto &data = _controller->session().data(); if (const auto peer = data.peer(gift.peerId)) { return (gift.me @@ -856,7 +895,7 @@ QPointer Premium::createPinnedToBottom( not_null parent) { const auto content = Ui::CreateChild(parent.get()); - if (ParseGiftRef(_ref).peerId) { + if (Ref::Gift::Parse(_ref)) { return nullptr; } @@ -938,7 +977,13 @@ void ShowGiftPremium( not_null peer, int months, bool me) { - ShowPremium(controller, SerializeRef({ peer->id, months, me })); + ShowPremium(controller, Ref::Gift::Serialize({ peer->id, months, me })); +} + +void ShowEmojiStatusPremium( + not_null controller, + not_null peer) { + ShowPremium(controller, Ref::EmojiStatus::Serialize({ peer->id })); } void StartPremiumPayment( diff --git a/Telegram/SourceFiles/settings/settings_premium.h b/Telegram/SourceFiles/settings/settings_premium.h index 78e675742..570749471 100644 --- a/Telegram/SourceFiles/settings/settings_premium.h +++ b/Telegram/SourceFiles/settings/settings_premium.h @@ -37,6 +37,9 @@ void ShowGiftPremium( not_null peer, int months, bool me); +void ShowEmojiStatusPremium( + not_null controller, + not_null peer); void StartPremiumPayment( not_null controller,