From 341b9e4a296f16a3419c8c3a885a478f3d163003 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Wed, 27 Mar 2024 16:07:43 +0300 Subject: [PATCH] Added menu with about box to sponsored messages that can be reported. --- Telegram/CMakeLists.txt | 2 + .../Resources/icons/sponsored/large_about.png | Bin 0 -> 1180 bytes .../icons/sponsored/large_about@2x.png | Bin 0 -> 2303 bytes .../icons/sponsored/large_about@3x.png | Bin 0 -> 3405 bytes .../icons/sponsored/privacy_about.png | Bin 0 -> 534 bytes .../icons/sponsored/privacy_about@2x.png | Bin 0 -> 928 bytes .../icons/sponsored/privacy_about@3x.png | Bin 0 -> 1299 bytes .../icons/sponsored/remove_about.png | Bin 0 -> 771 bytes .../icons/sponsored/remove_about@2x.png | Bin 0 -> 1540 bytes .../icons/sponsored/remove_about@3x.png | Bin 0 -> 2194 bytes .../icons/sponsored/revenue_split.png | Bin 0 -> 651 bytes .../icons/sponsored/revenue_split@2x.png | Bin 0 -> 1287 bytes .../icons/sponsored/revenue_split@3x.png | Bin 0 -> 1944 bytes Telegram/Resources/langs/lang.strings | 11 + .../history/history_item_helpers.cpp | 10 +- .../history/history_item_helpers.h | 3 +- .../history/view/history_view_message.cpp | 2 +- .../earn/channel_earn.style | 5 + Telegram/SourceFiles/menu/menu_sponsored.cpp | 235 ++++++++++++++++++ Telegram/SourceFiles/menu/menu_sponsored.h | 24 ++ 20 files changed, 289 insertions(+), 3 deletions(-) create mode 100644 Telegram/Resources/icons/sponsored/large_about.png create mode 100644 Telegram/Resources/icons/sponsored/large_about@2x.png create mode 100644 Telegram/Resources/icons/sponsored/large_about@3x.png create mode 100644 Telegram/Resources/icons/sponsored/privacy_about.png create mode 100644 Telegram/Resources/icons/sponsored/privacy_about@2x.png create mode 100644 Telegram/Resources/icons/sponsored/privacy_about@3x.png create mode 100644 Telegram/Resources/icons/sponsored/remove_about.png create mode 100644 Telegram/Resources/icons/sponsored/remove_about@2x.png create mode 100644 Telegram/Resources/icons/sponsored/remove_about@3x.png create mode 100644 Telegram/Resources/icons/sponsored/revenue_split.png create mode 100644 Telegram/Resources/icons/sponsored/revenue_split@2x.png create mode 100644 Telegram/Resources/icons/sponsored/revenue_split@3x.png create mode 100644 Telegram/SourceFiles/menu/menu_sponsored.cpp create mode 100644 Telegram/SourceFiles/menu/menu_sponsored.h diff --git a/Telegram/CMakeLists.txt b/Telegram/CMakeLists.txt index 2c5feb862..9ec116fd3 100644 --- a/Telegram/CMakeLists.txt +++ b/Telegram/CMakeLists.txt @@ -1141,6 +1141,8 @@ PRIVATE menu/menu_mute.h menu/menu_send.cpp menu/menu_send.h + menu/menu_sponsored.cpp + menu/menu_sponsored.h menu/menu_ttl_validator.cpp menu/menu_ttl_validator.h mtproto/config_loader.cpp diff --git a/Telegram/Resources/icons/sponsored/large_about.png b/Telegram/Resources/icons/sponsored/large_about.png new file mode 100644 index 0000000000000000000000000000000000000000..95fb27be4545417485bccf1151346e9ee6fa0a1e GIT binary patch literal 1180 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 Qe_t7W9TV-hnvR(N0Eg*N4*&oF literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/sponsored/privacy_about.png b/Telegram/Resources/icons/sponsored/privacy_about.png new file mode 100644 index 0000000000000000000000000000000000000000..67fc01990330f2349f4409ac4e8c9928d28598b2 GIT binary patch literal 534 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 JPDHLkV1i3wLEQiV literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/sponsored/remove_about.png b/Telegram/Resources/icons/sponsored/remove_about.png new file mode 100644 index 0000000000000000000000000000000000000000..06a33dc3c089717f0c8ad67beca035d1daea3184 GIT binary patch literal 771 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDq2jfhpJ1#WBP} z@NS5$$Erk;bMvQMaB<}3bQMwMIJlc*nzQ`{F%6D~HJvgnf+n{_SR7?aiUf04EY#$2 z(a02g%uR)5W`wIx)}BT^m+iUw=PudwhKS`Sa)Po0YpyKb<#k z-nS~-_QMAm`eSzQ-hDRh^P4w5I%4|z`io`$*fLA5bzK~Ipl-kX1{Wnm37-9SDq`IW z1*V^NRZ3j9e!cMIFg`v$wq{2gx#K!!=H}A9Y(dWR=FjhSdu%e>>xk-&fB)>V_*$K& zdZ|wI(9zRdBwmr0o^IF&v}pEhX{UdyHgulO+RDYkG~@X33)zw!sN(u`bU8H)|=AYM|>eYYz^Or9!M}t?YcWT^w`}XavTT;KY zM7Xr3zIySZLn+{yieQ+wQ0KCTK`XcH+SN7jX_2MIn_?kM~Sob(CO2s zw{JI}eb$Wk;Nd<0cJADnW7fTN(FA+>Cf}JpY9S#Fsl%T?e_k8L{aSvux3@P(n1)Esx8Ejr z^UTkQHXomCH2bW@U&G#?<}-aJv1?8~If0|xVMW<)S>IG6NtwI+@;o{#Zogf(W{pCG z)>Ng5e#@0R1@>&++A0c+C}!2VG}WnIQ%^tjP-(i9wN+~V`Q;TAr!Baz`2EbBeEhMj toZPa@nL6BtCN`S_&s~pBO!@cv-2T3`qBhw)RyRQj(9_k=Wt~$(69A{aJm3HT literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/sponsored/remove_about@2x.png b/Telegram/Resources/icons/sponsored/remove_about@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..996851dbc9f57f50181b43546053c9f9a7389393 GIT binary patch literal 1540 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 NBYiWydR>>q{{ktQFPs1X literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/sponsored/revenue_split.png b/Telegram/Resources/icons/sponsored/revenue_split.png new file mode 100644 index 0000000000000000000000000000000000000000..94390bce46b994669692708272717e63c5d253cf GIT binary patch literal 651 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgf?5n4XV~B;| z-H^Sj8v`Z2f9y(9aMf&fJmC;IWsy!;b5gLFQ9#<#luf4&6xziP8J~^Uvq9S!dPc&prR#>&6_RHT7KD<^%(e zOr|F#R)I&Kf9Cw7KYL>Y&)y9ttxgZWRz?0#G3s<%d_-T7W7ix%^`uV?k1c8z+IcD6f zh5?6;%WRF(HPlStF5P|i@y86a**{elU(^u0{JQC5x{>55^$y(@NoP|NQ>k9A)~1sw zN+%hldfk*33SAb6<}h4+b=K*pZHIwwy8Hh75^Jwy!RQldn>D9;*%{05Ie!V!a_v|e z#Q8~ZvT_IO*DBew>XSXsoO}FHA#rESB$J&nebIhCTsQg(_zyl=-XFg@Z1wk~;AIRO zTPHB2sR-SCTlQv2sMgd4hvxsxaV^;Sw#@o;>wy1c)I$ztaD0e0sxRT7Ht3k literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/sponsored/revenue_split@2x.png b/Telegram/Resources/icons/sponsored/revenue_split@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..23a23ff0a6cd7ebcc0fcd51d0449067aa354d924 GIT binary patch literal 1287 zcmV+i1^D`jP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NGaY;l$R9Fe^SXn4-Q5ZHH^GuSV zcrZMO%;iCfl$7y>LV3f3DU>|m1$i(P3dIA-^k6O`C1jQtnUXSPj%4QE@3ypTXRl-L zea_`}>zs$vzrXeGe|`JgYyJPfwuXlKr&d6%!2hOzwzjsBkrAJ@v9U29HXU z21Z6k`uh4>TU&E+Vn01S)zs8s=t;yO#P@urA2Gcz;x z_VyC){3h43vNDK#e}Dh;Y_ynR#wr` z(MwB9T=?#Y>FX-NgNy;P=|9t_=;h_b1qEzDLT+wuB_$;u9v=Ka=%xuFMGfoL z))pMDuCADQLCI~8W)v%TZf-6mB}I-CWx27jAvZ)WQ3PSgWHM%bRoGKAV^MH_e;>A? zplolTXJF1kkr-H1qB76ILHkte<`RC4GkIm{QQQ8hsin( z4Gl%vr=v<3N-9KWf(&REvDJYbA0JOlObAveY_8zoU=$DdCWgQ87ChQ#{F&(CjaYNAhHR8)koFdZEo(1wDN z4JAIuxVyWP^oRw^olnwHRpBl}UPlLrk5Pgjtmxe6T=6XiXAg)$K^VA9O-)6vy1u^V x;y+=dUYeSk@@JB8jOX91M$`(Z75J+P{070bH|ix9ny3H(002ovPDHLkV1m@QL0td< literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/sponsored/revenue_split@3x.png b/Telegram/Resources/icons/sponsored/revenue_split@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..4086a7714e82a908e85e25e9306d8729a96a0774 GIT binary patch literal 1944 zcmV;J2WR++P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91NT34%1ONa40RR91NB{r;0FW_8?*IS?0!c(cRA>e5T3JX}O%&Ix)XFv6 zwA{#r7L_D|$f&4vOhtdZhOdq6$C{rkjkTxvxDX~Bz0o%sJ=Iob6sOFX!i2z_Ea10mlN41sn@F z7Wi2f@V2qhv}x1A!^6YE!lq1_V!nK2WaPz*7lt&mX3Z)uFJH81(Z!1wZ{EBq)6AVa zclYky0RaK0PMv!2;DJn_6SHB%hRc^PkB^W4rS_YcnAovnhoJ=5u3ck1K(lJqDuD(j zgEEZZ)2B}h7cLYCv<+doOP4OGsq;Uo-rinWh#50xeE*uyEvXcq!-Mc3v@yv&ZhY3G8I7l!9oprjsy+2Rrx7kA^v4FtxMCr`rSws`zll$x4K=diA>?g!fD|KQ-@ zz`#J8i@m(=+_^)-l$Dj4^Rakhd~RXs1I>4W8+`fl<*Qe(wr<^OPC41^vSrI?iiZj5 z0)%|^h9kAD7!pfl<+3s|rmL$fDk_TGQx9n2 z742<;=y&GK8KikC%MnpI&xpWe39!&2)AX+78E8#hLl1@V#HNNr>g&n!Tfw!@95}& z1C)indi830dOGq?Hl-5W;9XItffB6*{zS;kfzj{oaoG5skZSNl9!8ag3szKAG=2JX zlwSOlA>7#5IB(uOOd)unUs6+3V@Sr3`W1Wf(`T$lL=!RfTv|^zkU0L5O15$KMQR*53D+W z{ycdF0`A|xkNN=d&C=K=5@UH)Rh0%a*;5QH!LhM1Qb`6LKYol$1!us!854cszab0!=Ee2JipJVZdZlteRuJBl$;yuH0wuU?I0 z7a^G1C$eq@1qGT#H)rR*VmyB&^2kC^dcboEx{Z#GBH`kRJqznqjAZrk@u{e&5Om{v zvP3BW2p(`bD$O$eaZC`!aEN5GwzgKNf>Dwh5)(2%KOZ+1&Gv^6AL2C);SB-(ilJ+L z<;s=L&dxo1_84wS$iBWlf&swU@Ix6seE2Y{N+Tm9Evo_jDHT$C)2D z(#hIeLZ|83vuCn0JZ9?D|D<)d?zVBqkofSIr>(6Gbtf+$gEw#9jLe8A(I&7=*kL2~ z@(DEonx`^P7ce#yLt~7@Wx&UeAJMzb$jDf}d^xhA?Cfl0deDR?!#fuhv2X;yfA;Lz zD#T_qHWUN9vuDrpLR-SvNvV^--VM1g$>O}5SPjQoH%j9jMU4^;wVzz4_wg7HRt8& zSp<68f`l*e<0Lb+v;tEbLBS4G6 zo-#^zOkj-|;O3{ZF)=Z$BZ5Y^@OFmng^UNO6Yf}jeLYU2Ab>M;EZ|tcv4CR%#{!N8 e91Hwj7Wf item) { return std::make_shared([=](ClickContext context) { + const auto my = context.other.value(); + if (const auto controller = my.sessionWindow.get()) { + Menu::ShowSponsored( + controller->widget(), + controller->uiShow(), + item); + } }); } diff --git a/Telegram/SourceFiles/history/history_item_helpers.h b/Telegram/SourceFiles/history/history_item_helpers.h index cdd9af7cd..3d67e29ec 100644 --- a/Telegram/SourceFiles/history/history_item_helpers.h +++ b/Telegram/SourceFiles/history/history_item_helpers.h @@ -142,7 +142,8 @@ ClickHandlerPtr JumpToStoryClickHandler( not_null peer, StoryId storyId); [[nodiscard]] ClickHandlerPtr HideSponsoredClickHandler(); -[[nodiscard]] ClickHandlerPtr ReportSponsoredClickHandler(); +[[nodiscard]] ClickHandlerPtr ReportSponsoredClickHandler( + not_null item); [[nodiscard]] not_null GenerateJoinedMessage( not_null history, diff --git a/Telegram/SourceFiles/history/view/history_view_message.cpp b/Telegram/SourceFiles/history/view/history_view_message.cpp index 2100599a0..100fff459 100644 --- a/Telegram/SourceFiles/history/view/history_view_message.cpp +++ b/Telegram/SourceFiles/history/view/history_view_message.cpp @@ -441,7 +441,7 @@ Message::Message( _rightAction = std::make_unique(); _rightAction->second = std::make_unique(); - _rightAction->second->link = ReportSponsoredClickHandler(); + _rightAction->second->link = ReportSponsoredClickHandler(data); } } } diff --git a/Telegram/SourceFiles/info/channel_statistics/earn/channel_earn.style b/Telegram/SourceFiles/info/channel_statistics/earn/channel_earn.style index 7f0815fc4..12bf06c42 100644 --- a/Telegram/SourceFiles/info/channel_statistics/earn/channel_earn.style +++ b/Telegram/SourceFiles/info/channel_statistics/earn/channel_earn.style @@ -108,3 +108,8 @@ channelEarnLearnDescription: FlatLabel(defaultFlatLabel) { minWidth: 280px; align: align(top); } + +sponsoredAboutTitleIcon: icon {{ "sponsored/large_about", activeButtonFg }}; +sponsoredAboutPrivacyIcon: icon {{ "sponsored/privacy_about", boxTextFg }}; +sponsoredAboutRemoveIcon: icon {{ "sponsored/remove_about", boxTextFg }}; +sponsoredAboutSplitIcon: icon {{ "sponsored/revenue_split", boxTextFg }}; diff --git a/Telegram/SourceFiles/menu/menu_sponsored.cpp b/Telegram/SourceFiles/menu/menu_sponsored.cpp new file mode 100644 index 000000000..a6c13a662 --- /dev/null +++ b/Telegram/SourceFiles/menu/menu_sponsored.cpp @@ -0,0 +1,235 @@ +/* +This file is part of Telegram Desktop, +the official desktop application for the Telegram messaging service. + +For license and copyright information please follow this link: +https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL +*/ +#include "menu/menu_sponsored.h" + +#include "core/ui_integration.h" // Core::MarkedTextContext. +#include "data/data_premium_limits.h" +#include "data/data_session.h" +#include "data/stickers/data_custom_emoji.h" +#include "history/history.h" +#include "history/history_item.h" +#include "lang/lang_keys.h" +#include "main/main_session.h" +#include "ui/layers/generic_box.h" +#include "ui/painter.h" +#include "ui/rect.h" +#include "ui/text/text_utilities.h" +#include "ui/vertical_list.h" +#include "ui/widgets/buttons.h" +#include "ui/widgets/popup_menu.h" +#include "styles/style_channel_earn.h" +#include "styles/style_chat.h" +#include "styles/style_layers.h" +#include "styles/style_menu_icons.h" +#include "styles/style_premium.h" +#include "styles/style_settings.h" + +namespace Menu { +namespace { + +void AboutBox( + not_null box, + not_null session) { + constexpr auto kUrl = "https://promote.telegram.org"_cs; + + box->setNoContentMargin(true); + + const auto content = box->verticalLayout().get(); + const auto levels = Data::LevelLimits(session) + .channelRestrictSponsoredLevelMin(); + + Ui::AddSkip(content); + Ui::AddSkip(content); + Ui::AddSkip(content); + { + const auto &icon = st::sponsoredAboutTitleIcon; + const auto rect = Rect(icon.size() * 1.4); + auto owned = object_ptr(content); + owned->resize(rect.size()); + const auto widget = box->addRow(object_ptr>( + content, + std::move(owned)))->entity(); + widget->paintRequest( + ) | rpl::start_with_next([=] { + auto p = Painter(widget); + p.setPen(Qt::NoPen); + p.setBrush(st::activeButtonBg); + p.drawEllipse(rect); + icon.paintInCenter(p, rect); + }, widget->lifetime()); + } + Ui::AddSkip(content); + Ui::AddSkip(content); + box->addRow(object_ptr>( + content, + object_ptr( + content, + tr::lng_sponsored_menu_revenued_about(), + st::boxTitle))); + Ui::AddSkip(content); + box->addRow(object_ptr>( + content, + object_ptr( + content, + tr::lng_sponsored_revenued_subtitle(), + st::channelEarnLearnDescription))); + Ui::AddSkip(content); + Ui::AddSkip(content); + { + const auto padding = QMargins( + st::settingsButton.padding.left(), + st::boxRowPadding.top(), + st::boxRowPadding.right(), + st::boxRowPadding.bottom()); + const auto addEntry = [&]( + rpl::producer title, + rpl::producer about, + const style::icon &icon) { + const auto top = content->add( + object_ptr( + content, + std::move(title), + st::channelEarnSemiboldLabel), + padding); + Ui::AddSkip(content, st::channelEarnHistoryThreeSkip); + content->add( + object_ptr( + content, + std::move(about), + st::channelEarnHistoryRecipientLabel), + padding); + const auto left = Ui::CreateChild( + box->verticalLayout().get()); + left->paintRequest( + ) | rpl::start_with_next([=] { + auto p = Painter(left); + icon.paint(p, 0, 0, left->width()); + }, left->lifetime()); + left->resize(icon.size()); + top->geometryValue( + ) | rpl::start_with_next([=](const QRect &g) { + left->moveToLeft( + (g.left() - left->width()) / 2, + g.top() + st::channelEarnHistoryThreeSkip); + }, left->lifetime()); + }; + addEntry( + tr::lng_sponsored_revenued_info1_title(), + tr::lng_sponsored_revenued_info1_description( + Ui::Text::RichLangValue), + st::sponsoredAboutPrivacyIcon); + Ui::AddSkip(content); + Ui::AddSkip(content); + addEntry( + tr::lng_sponsored_revenued_info2_title(), + tr::lng_sponsored_revenued_info2_description( + Ui::Text::RichLangValue), + st::sponsoredAboutSplitIcon); + Ui::AddSkip(content); + Ui::AddSkip(content); + addEntry( + tr::lng_sponsored_revenued_info3_title(), + tr::lng_sponsored_revenued_info3_description( + lt_count, + rpl::single(float64(levels)), + lt_link, + tr::lng_settings_privacy_premium_link( + ) | rpl::map([=](QString t) { + return Ui::Text::Link(t, kUrl.utf8()); + }), + Ui::Text::RichLangValue), + st::sponsoredAboutRemoveIcon); + Ui::AddSkip(content); + Ui::AddSkip(content); + } + Ui::AddSkip(content); + Ui::AddSkip(content); + { + box->addRow( + object_ptr>( + content, + object_ptr( + content, + tr::lng_sponsored_revenued_footer_title(), + st::boxTitle))); + } + Ui::AddSkip(content); + { + const auto arrow = Ui::Text::SingleCustomEmoji( + session->data().customEmojiManager().registerInternalEmoji( + st::topicButtonArrow, + st::channelEarnLearnArrowMargins, + false)); + const auto label = box->addRow( + object_ptr( + content, + st::channelEarnLearnDescription)); + tr::lng_sponsored_revenued_footer_description( + lt_link, + tr::lng_channel_earn_about_link( + lt_emoji, + rpl::single(arrow), + Ui::Text::RichLangValue + ) | rpl::map([=](TextWithEntities text) { + return Ui::Text::Link(std::move(text), kUrl.utf8()); + }), + Ui::Text::RichLangValue + ) | rpl::start_with_next([=, l = label]( + TextWithEntities t) { + l->setMarkedText( + std::move(t), + Core::MarkedTextContext{ + .session = session, + .customEmojiRepaint = [=] { l->update(); }, + }); + l->resizeToWidth(box->width() + - rect::m::sum::h(st::boxRowPadding)); + }, label->lifetime()); + } + Ui::AddSkip(content); + Ui::AddSkip(content); + { + const auto &st = st::premiumPreviewDoubledLimitsBox; + box->setStyle(st); + auto button = object_ptr( + box, + tr::lng_box_ok(), + st::defaultActiveButton); + button->resizeToWidth(box->width() + - st.buttonPadding.left() + - st.buttonPadding.left()); + button->setClickedCallback([=] { box->closeBox(); }); + box->addButton(std::move(button)); + } + +} + +} // namespace + +void ShowSponsored( + not_null parent, + std::shared_ptr show, + not_null item) { + Expects(item->isSponsored()); + + struct State final { + }; + const auto state = std::make_shared(); + + const auto menu = Ui::CreateChild( + parent.get(), + st::popupMenuWithIcons); + + menu->addAction(tr::lng_sponsored_menu_revenued_about(tr::now), [=] { + show->show(Box(AboutBox, &item->history()->session())); + }, &st::menuIconInfo); + + menu->popup(QCursor::pos()); +} + +} // namespace Menu diff --git a/Telegram/SourceFiles/menu/menu_sponsored.h b/Telegram/SourceFiles/menu/menu_sponsored.h new file mode 100644 index 000000000..ecdde20c4 --- /dev/null +++ b/Telegram/SourceFiles/menu/menu_sponsored.h @@ -0,0 +1,24 @@ +/* +This file is part of Telegram Desktop, +the official desktop application for the Telegram messaging service. + +For license and copyright information please follow this link: +https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL +*/ +#pragma once + +namespace Ui { +class RpWidget; +class Show; +} // namespace Ui + +class HistoryItem; + +namespace Menu { + +void ShowSponsored( + not_null parent, + std::shared_ptr show, + not_null item); + +} // namespace Menu