From 680171226cddc3c5873f19e9557e15f3c7816b87 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 7 Feb 2024 12:20:59 +0400 Subject: [PATCH] Boost community features list. --- .../settings/premium/features/background.png | Bin 0 -> 734 bytes .../premium/features/background@2x.png | Bin 0 -> 1577 bytes .../premium/features/background@3x.png | Bin 0 -> 2103 bytes .../premium/features/custom_background.png | Bin 0 -> 771 bytes .../premium/features/custom_background@2x.png | Bin 0 -> 1803 bytes .../premium/features/custom_background@3x.png | Bin 0 -> 2395 bytes .../premium/features/custom_emoji.png | Bin 0 -> 914 bytes .../premium/features/custom_emoji@2x.png | Bin 0 -> 1967 bytes .../premium/features/custom_emoji@3x.png | Bin 0 -> 3382 bytes .../settings/premium/features/custom_link.png | Bin 0 -> 712 bytes .../premium/features/custom_link@2x.png | Bin 0 -> 1715 bytes .../premium/features/custom_link@3x.png | Bin 0 -> 2455 bytes .../premium/features/custom_reactions.png | Bin 0 -> 668 bytes .../premium/features/custom_reactions@2x.png | Bin 0 -> 1577 bytes .../premium/features/custom_reactions@3x.png | Bin 0 -> 2280 bytes .../premium/features/emoji_status.png | Bin 0 -> 723 bytes .../premium/features/emoji_status@2x.png | Bin 0 -> 1786 bytes .../premium/features/emoji_status@3x.png | Bin 0 -> 2551 bytes .../icons/settings/premium/features/link.png | Bin 0 -> 639 bytes .../settings/premium/features/link@2x.png | Bin 0 -> 1489 bytes .../settings/premium/features/link@3x.png | Bin 0 -> 1986 bytes .../icons/settings/premium/features/name.png | Bin 0 -> 841 bytes .../settings/premium/features/name@2x.png | Bin 0 -> 1891 bytes .../settings/premium/features/name@3x.png | Bin 0 -> 2481 bytes .../settings/premium/features/stories.png | Bin 0 -> 806 bytes .../settings/premium/features/stories@2x.png | Bin 0 -> 1789 bytes .../settings/premium/features/stories@3x.png | Bin 0 -> 2504 bytes .../settings/premium/features/transcribe.png | Bin 0 -> 705 bytes .../premium/features/transcribe@2x.png | Bin 0 -> 1403 bytes .../premium/features/transcribe@3x.png | Bin 0 -> 2400 bytes Telegram/Resources/langs/lang.strings | 47 +++- Telegram/SourceFiles/api/api_peer_colors.cpp | 45 +++- Telegram/SourceFiles/api/api_peer_colors.h | 14 +- .../boxes/peers/edit_peer_color_box.cpp | 10 +- .../boxes/peers/replace_boost_box.cpp | 44 +++ .../boxes/peers/replace_boost_box.h | 6 + Telegram/SourceFiles/ui/boxes/boost_box.cpp | 251 +++++++++++++++--- Telegram/SourceFiles/ui/boxes/boost_box.h | 13 + Telegram/SourceFiles/ui/effects/premium.style | 29 +- .../window/window_session_controller.cpp | 1 + 40 files changed, 401 insertions(+), 59 deletions(-) create mode 100644 Telegram/Resources/icons/settings/premium/features/background.png create mode 100644 Telegram/Resources/icons/settings/premium/features/background@2x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/background@3x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/custom_background.png create mode 100644 Telegram/Resources/icons/settings/premium/features/custom_background@2x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/custom_background@3x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/custom_emoji.png create mode 100644 Telegram/Resources/icons/settings/premium/features/custom_emoji@2x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/custom_emoji@3x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/custom_link.png create mode 100644 Telegram/Resources/icons/settings/premium/features/custom_link@2x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/custom_link@3x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/custom_reactions.png create mode 100644 Telegram/Resources/icons/settings/premium/features/custom_reactions@2x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/custom_reactions@3x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/emoji_status.png create mode 100644 Telegram/Resources/icons/settings/premium/features/emoji_status@2x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/emoji_status@3x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/link.png create mode 100644 Telegram/Resources/icons/settings/premium/features/link@2x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/link@3x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/name.png create mode 100644 Telegram/Resources/icons/settings/premium/features/name@2x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/name@3x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/stories.png create mode 100644 Telegram/Resources/icons/settings/premium/features/stories@2x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/stories@3x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/transcribe.png create mode 100644 Telegram/Resources/icons/settings/premium/features/transcribe@2x.png create mode 100644 Telegram/Resources/icons/settings/premium/features/transcribe@3x.png diff --git a/Telegram/Resources/icons/settings/premium/features/background.png b/Telegram/Resources/icons/settings/premium/features/background.png new file mode 100644 index 0000000000000000000000000000000000000000..72d93ef9c186f195f10ef7252f719fe847271b8e GIT binary patch literal 734 zcmV<40wMj0P)Tl`%+iQ5c5b+r0!)bR~isa%d=VaA`?M8iIz1K#UgC z(b2#$XljaVa%!k0kZ4FFYHDf=gOCuyMT#pD5rh%fymEd2;l$DZsu6$xJAL<@^F8-F z@A>Yzirejee}BjCG(0@~OF~PEuItrmwd>sM?5xY>YBU3nR4SF^xUTEa zb-fcYJw5&O^u%wKN~PLCntVtk5?fnau~;mV$y{GwkB^T>qtQyGqG_6_1wf+yKpFpOj}*;W;>wzfv{?(WX(_4<51l8cLrUH3aSHYS2xE?2A7B&1J7p->3G z%*@Qg!-L=N7cO*CHa0e%pPx@oP5|Wdc~w>A)EB5;uh;8!5u2t7U~q7-6J!|1$H&Lx z<0F8fp&^+9;L9W1wuK7-NJ>*2%4V|@6BFW;+skQH^mEBxv2FWTpkC?;5*z$Rjs-nI zT|ENO-`_8SpL!(v(4nKFBhxfjR#pI5metqSO78*^wUo_-?t#0 zpin4e+qP+%Brh&5NEQkOlH1$c^7W^urzCH0Z=IlYIxRn()zww;eb3F!0odH!B)Pl0 z>u})a=H~6~%?aAy-zPaaISF8Sd70$W(vr-PC)KWWIxRb(1@d@2wOWm2Fc=&d7$A9k zd^|cj+McPZs;a8uDCXzqNuHgZIY9uXrlxjwb^?I_fLJUhcK7-D*=#o3?=#!BEz2TV zEEZ+1uIoLo+CU%>4u@SXmt|REMAV`vil%9WLSb)jPfm5cX8%#j|N0&M0bM$1l78Oh Qvj6}907*qoM6N<$g0i7n;Q#;t literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/features/background@2x.png b/Telegram/Resources/icons/settings/premium/features/background@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c2b1609eac60f2dc7b260a5486b649dd2003128f GIT binary patch literal 1577 zcmV+^2G;qBP)O9 zi4Q7@Ej>sH7EuyG6dJ5h4@o{)F1?i6AA= zYX-g69neY^kjZ4SSS;Du*@Tc#C=|hy=XpwLFc{phVT0fApP8BY^y$;Y#6+atWm%4k zrlFx>czBquRHLJ#H*enDxN+mMFtG#iJb(ZG{S~8V)!p5lnwn||WE`>s2M(M(dD3h) zKYH}2ySp2WXV0FkuCB&*Pft%@U!ULar<4*xR8>XdP$+qP{U zkB3tF?%g|`YinyO0v$VcEOwyl*RSJU-@biIOG`uJ&Ye4Pl+Mo1aG)iLF(DxV1LStQ zmm7mp8Y4||a&m2LEw=OW@@zI6wnb4C1OWi>RnTb(kgBTa#3B{Wf$vT%3I>DUzkg@{ zPEAe4a@Rlnbj;1o+3ohh!NG-vh34kw-rioc3xa@gFx0=@dwl-<`N)wY>FMdi!^6zT z^Zc3t0f5)*^?JQpOE4J3g<-fH*WhbUDMcW|<+$#)AO8bI(;5J=Y-gzWfbcu;AAxW~ zvN}MkrBwrp{BVZax^=65$cTwC?iq>;$mw(r4Gq0|^(r?vml;_eS{ejckiV=V2Car^e|xR-nS z^r_B`?HEf+N&vuWwSN8jl~Ou6Iayg*sr77WX<=LPnwlB_$j!}VrQF!qSbcr{=;$b= z^x?yY1~7&|j~_qQ;orG)2YW0kDzaEC@>0y0vA?mfydBU%q@9JuhCo*wWI% zZuEFO<>lq~?%g|l_%I3w3iwi8<%~007;U1dV0_^dKr|F zkug0zZODH2?p-$I`}glzO@p%8Y(IbgR1}4UEQ0pz*)uykODXN>=m-Z|5=(Zrg5|ST zi;IicaJgKSm6aZkM|<_fix-1~gGotABO@bGfxKR?q9{p8NzoId&*z(;p9g@VqN1v* zDs9w${P=;5wzf8Hal&CJ3B93 zx`ZF+!otEgZ{A=WeLmm7z(6n<1OT4rRaNDAUJ!&pAb<{N!45f&Lwi9%0p=|Lu-olU zr!)EtF^QsRHk)RYN%*=!*p17naiZ+QypP|UwyLWFxL&N_4`(;@c1OeX^c7mq$ z#B(&(R#o-auU{WNe7Jr4cKGSa%7IWRDJd%h(&dYAptw(A|EcunL+e88?Z+2lHk;Sg b&r^Q@C=eiIof2SJ00000NkvXXu0mjfvr7nN literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/features/background@3x.png b/Telegram/Resources/icons/settings/premium/features/background@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..4eeae2a994e4082657519c46e2066bfcfb576df4 GIT binary patch literal 2103 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/features/custom_background@3x.png b/Telegram/Resources/icons/settings/premium/features/custom_background@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..dd6a63388d68b52e882aa604abbe562b1c32e8ac GIT binary patch literal 2395 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 GFaHP6X^n0G literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/features/custom_link.png b/Telegram/Resources/icons/settings/premium/features/custom_link.png new file mode 100644 index 0000000000000000000000000000000000000000..7faddf7061e79a7543d8b93f9e0c1bad3aa93c26 GIT binary patch literal 712 zcmV;(0yq7MP)Tm9a}|aTLeT^>^haVwaXAxh6EIOF_5^BB6$gDT1R@ zON&eX11<^T;2;!)a3NZnB3yJ3Tq@8-5f$9TS_&L&G6_$^@4b7k_ukig(fe-q{Lb&g z`JQw5UB+&=zrDS|&$Pb2{zHN+!t?z5`}@~Po12@5hllZa-0gNRm&=!z7gYk!^T6}` z*OX$hh^xB4zjwJ@-vF(xt+m^2M7+DZi$o$jJ3AhaC!fz#oY(99C(y>m#&9@9#AGt5 zb^7}H`tk80_4q4Lzu!m1U@)kADhL81Rw|XhgN~1nqtWP}TmwL}*+fKx!JrSaTCJz2 zr@DJ#Hk*~7*=!aOx3{+`$e=vqIIh#_lu9L&$)t=ELPn#JD2mD;!!Q7Vh#=ehtzNH( zh~aQpdBJEj(tfGB-e@%Rt=-<va0)c=sZnN1CQL0e}c|0COEEEdLY?fsQ zgMoH-EXz(NljU-$Gk#GNr8=p$wzkIOv9=bA#nSC|5z+7WOF-GBH z-X0AKf}jHZYRbjM1pwr7IW1_hSXe9;n!Q*o0O0KGtX8Y3^Q7@tt5rmd#bUa3U0z;t z9LKWk(a{kdLOPvxI-P230KhN|eKc-vZVnC(1VPx{-90})Z@1fYi2)#$N+}2yw~(}#zLPN$=? unaN~Ap->``(DvthB7{h0B{Bc&ck~HdSUiGANEDy|0000%Pru)9u~=TdeEI3qr&uhuc=6)W(o%!LP+MCokw~CUXJ_Z(!-su7UnZcr zd#Jv?J{%6i)dvEBGiS~$U%ou8W<^EC)vH&Lt9p8RGQD)}KzhA?YHA9;!0mQxwOZaO z&CSihU=U6*o6U3r81ceqmW1> zg25mFfTrmsOO|kl@t@3KFicNR!x+@*bi6b*H8n1m%WAc*TD1zJX0=*jjjO7v;=*8n zcI?;@jYc7j-EQag(B{pXzkT}#^&1)*GN};+;dDA#mi2nQa=Bb6kkM#F)`y0MGL;1+ zTCFw^2tfVb-rl84muAvbC=@Vdrw!`#Kn%mcjli<3)oSIX*|u#PqVMkRP7T$Wa{Tyl zsCoPLZO%}7prWE8kH>@7x^m@8JdIkdM$JZFUtdW{2}U_PJG-Z+2P*H|w@(mIYilc< z;PrZWeWTawQJgs(4$PN=a_-zYv{clS;DFYzUyqz$Q&WStuGMOP{P=<54F9D706Lux z71z|dksb)S=jP3uc=wl=8da=B=l#?z=&DioBXqoc*e#TaF7aYg;j=g*%p z(;h#5?Dcv(J3C=m;DNSp-ww0iz`y{*Fk@q5c>UiFCE3~k@v+!L-J?g3JRZ-)#6&0* z;tZKgrn0iK3l}b+Cr_R{*}HddFc>^=;DDh1Y33)}y?ZzGZA(iF|IBn^u~_2qIA`Zd zrBZ=+EZk2vIy(CE=T87Yd3pI9dLWHPqf{zIB2iOQ)6D0gP$-c|2(>bEH90vsA3uI% zS$1k_N~KZ>M`>jvhxw_crG-n4@_!ty?ggAO2Go#RwQ=2J&{PHmXR%6wm_R* zU0t&VTCrlq$jAt)$-Kct5Cn>h6DLmGyLS%_m6Vk1+O_NA#fxKOW2me?fByXF(W4B* zq~0cGY|u7s+B7*i3FrHKz9UDDNTt%WG;+DTt*s4hE0IWq0$D1Re)#Z#%`7KRo)iiM z05BSj9*stC-MZD$(V@|3 z)~;QA(oFN91cTTp*b{R^w{Q^KNg00;m8002ov JPDHLkV1knPSBU@s literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/features/custom_link@3x.png b/Telegram/Resources/icons/settings/premium/features/custom_link@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..72bb62cf9ba7cfc140a87ea031df4866a9cfb6c5 GIT binary patch literal 2455 zcmV;I3263-P)tsZpgq;B}0WN6Cwx}3YL^ugb7%rE(F2i z!Xmg31Q!8|1)-2dARm@21}stp!G(}w!I02Jz>;E1z+j6ZB>{s0L&OlllAsxjGGfAr zZ!x@i^G%GI8EyM`FTa(4X3jn5o^#K?dm!i*x46YEZt;JBfBdP1Q53~6Yz9UL4~ zDwW^Ko=g~x#&9^C&*vG2>D`2UJ|B%nO(qin;7>DtJ*-x1EEX%5%Qwm+z{$x;JRY~( z?SEQ=ez01t*=+VY))|JOD2k$}0czac-F3U&QrG>3XADJAzu)h6yR}-a;IF;Cz5V_D zVzK!1=g(%d$v&)5DDL0CKQlA)=+PsA1y(ARm6er9Br+=3A|Ege2ZO<8vnkNe#>Pe< z5U^M*8jS`)5EzC50000Oh7kl&tJP+++2`|p`0zoX!%n9Yi^UKG`IA!NI3A0|D2fvJ z1H0Xh3zwwoE3&r%=jPo`E^wkwfk_v@F9zg^_0)YUZS~i=t*=(a_`(`F0k%+*jMWa!X=64-13=`;W zX=zE4@`nO~Akk=4AXPXV9?6lwFpPiR%H^`fVi}&SDA?_Gfd$6naSX#oMc-nv@crcS z^73!;kWQzQzi=oN8m+Y;2ojISIr=+0J65Z8g!He4Mx)7Qvz<mL5+ z@8oPq)a&)*<74hCo0MJm@R*DR001_dO{rAoa=B8eB!@@2XfzrZ7Zm?cIXO)f*=Tk!650JSgqDtt;U*StyUYEV-!T;PNyTU3WQ-e5C~*4 znRGfWDL=AWtz5LM)oKI6v;d|ativY+eqI$O*2g;>GZWYp{R^26@h+S>Q;-$hd3;P?A|J|A~H?%usSK0Yq; zT@*z*(`~ogtyW9w>VE@X&tkFgi6jyU`O#Uh&8bvs_;bbbgrcYRM^m@IWPG@;}xvyW*>2!X--|O`b)5Pwhv1YT$Z8iWvYF;M>8jS{q zVZC0DVc69(Tr3ug#iG>1DL|jTV!Peu4_Hi1O^xtw0RW)W>7G4%20;*pVOFd4s#?0; z?vPSJ5Y)#Px7%%kAZBN0*{@?`V_&{}snu#jt^`34f*=lu!{_roefkuFpgVW&+`D%V zhGB}L#QWZ%;B-2<7(&zZ@W%`Qu)4ZhE|&$@?QFQKR;wEu8+|L0`T6Xp!!bNrwOUP*B)`|d z=1Ml3t*?txtJUmd)oOKmdU|*UAP9mi7E85S z_toWcc|4xsZ+^So?&0Af1VP1O@w&l11VQwAJy$6M0L*5y*=!!!^{>n25;PSPiGFJ^Fkk}$ZP~>N` zS(C{mG9y6{gdm7aCd20gK@gQnCD{I}n>YZwySoO1LB3!R1i>&I3WWp(5?jxDJRYOb zh~qdn>%{@bag)j9@pux61ltdso0}WF(89ukp#3-iola+POGngLACBWMU%qs?Tvz*w z+uPf@T<-AjkiBbUHv)#?nVA`b!7w{J%Ngz0uV0@$c`{%XjYcy!H)k*yR4Ucf)Kp)K zI6FH#J3Bi%I{NnQ+ow;TL|#7K0FTErAjr}*O;J>>RvR!NysR3A*`WP%f8Ak`(Vz5d<+Bjr?ib&CShWdmcB!>2xNONq(Pr0FI81 z5{ZP<>6Eb$zfmQr1qjI-odp0)PEO9u%shPfP^;ByG#YmBmGyhAR;$%&H5!fM#djN)=2?hYD)oPVW1pr`^BUY-*%gaioGJI9v z>-8WADi({6A3q*hk3cF|M?YGcsZ^>~tNH!@|B>k;4l0$3Ac#>8s@&ohx46Y1{0qwV V;fE&mh&ccN002ovPDHLkV1k~hsdfMW literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/features/custom_reactions.png b/Telegram/Resources/icons/settings/premium/features/custom_reactions.png new file mode 100644 index 0000000000000000000000000000000000000000..b551377459a76f8ba679c0107f20e76d3752b5d2 GIT binary patch literal 668 zcmV;N0%QG&P)Tl{;%{K@^2Yi6Ry%iim}e1S~Wl$N?1#CD?h2kis-U zAwi3n!b(BJe;^@ZttdVUv5ep!urQ|yL@WdiC}}K&7(@%nx`kdj=lIB#+||uqdp`Ew z!^{YDI^A?SCBKtQCi^9UCAnOFRK7qU*a;D`*B2KTtyXKfTrQW(*VosZo12YAQB=KN zpUr09-`^h}AF)_$Z$+t83IKrT=jTSFF`LZ*FbrcdnUcxm%4)S*)oOJzne=)+K4b;D zySoEWEEYu~(Z;^Ly~SVUayg|^$=*y+)cyTE2PBb50KC1uZ8vYRSO7deK5kouLID5= zbbWmdz~ypnXA?s7dOa_q)9E^$&Z^S+d>#x2*TZ%=9E1>tVRnLs!yzy7_4Sp_X5Zi6 z2_czGrrYhVt4gQS0K{VPPS8Gu!{K(j&1o$V2mr8Jtw({_T7#5IC4fq$a@1y(N_Ba8 zDHI9``}phiIsmiT{O_P{w+rCppYIojGo6QDbI2^KF4k(w)fu(-GZ!{Wt z6pEq%OePbRO2v+IKn8=s@Ar>JBLMMu{PgscM{zox06srIH5v`i+A*ViKEJv_=jZ3q zXmk_zdc6R~P@00005Qd)LJzY6AdDfU|nREd6E6S z@WPM+V<@yHtzvZ3U0qugB?$@zEl5-{CNWoxv|1v%{=lqFN?WYNTxW>P?djs}_qyNN zzoTovy!d^u&Y$Ob-p_f@`#$gUo+Hs}wKFp_uspV z$^2~wq5cO-r!*tFqN3v9!GoJOZ)RDRVHlq0{eHj0;pp%0Pcb*QZrys|z=5)|GPPQ* zP$;6&XfPObyWKrKJ#M!<4H3t239naHR(5rD&CbqZoFb9P=;)})WXj9S6L^)Cm0iDn zeR6U#-U|_@rl!uHKQEC;Qo$qyYHDiw`SWLNES~2>p^%_~p`oGOyLVGBqtWR1`(q8l z;qZ?iKVqM1Vq$_}l8zIO;}X2Gt5>gDEEaM+IXU_0(W9ZEA+OiVFwB-MTeffCzH8U6 z^73*3*tv73!{Io0?p#Ml$E{np>gwu+2gC8F9H>Q&Uq)rLw4~Xz$*=I-SmH zwML`SWI+G)Qj81+1AUs#&d$QZ!gv?CTz=}*sX!n=E#JL+N004xdqqV>!nQOT4LQ(i zwRLrMD^{#X022#TTwF}wOG`^j>Li|@pWoizE_jI+i$yAxrs@Cy0JwblG9n&1awHXy zL?UTzZ6$GSHk(4BNE;Ub+S=MEO+!P27#9HO>FGhlD_5?h0xB&n4F-dVI6FJLZQC}H zp#i|*a3JEvix)-O7ZenH{rVLVold7prAi89Hk-+Vwzs#7rvU)1R(s~mnY3nW*RD00 zOn2_w`TY4a?bPAn;cM5f)z{aP;qfn^uC6XboSU1gsi|2MkVu_AeL7)sA}TE{1;Mn> z&(8;dKp^1tdb0ua^y$+J7cP{Pl+@JJsMTt6(dYB^_4SR8j*gFy|F$DNB$vzIzkg5q zkWS7lNw3#``}PeHM@B{p3JPLxaUAzMX+|QEa5xMA^YinFm{p*Gfq}unK>+CO?fv-i zqu}lW(A?Y{0H{=|HEY&n6$k)cy?O-zFJ8QezqK%i{C+Ki_SGv@@TrNRU|AQ(nE{;Z{i0Jit1rtaJv~uN2 zkH=0)~yp0 z6aX|D&66ijC{1Hyqe#c}K)JcOWRw5!;ltSLDRQ?)qp{oVi|re+KmhRU*)v4Ebmi5(yyRHQYDs*u#00000NkvXXu0mjf39J5w literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/features/custom_reactions@3x.png b/Telegram/Resources/icons/settings/premium/features/custom_reactions@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..bd30a9274868e001a59e5acc25219166554fbba0 GIT binary patch literal 2280 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 FV1hQfP4xf( literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/features/emoji_status@2x.png b/Telegram/Resources/icons/settings/premium/features/emoji_status@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7fc36e7390742c7391bfca10e5a68809bfd41fd9 GIT binary patch literal 1786 zcmVm&6)o3N=XQQC4&2ss zx=s7#d9{7-x#xcFzjN>NJRvbLF*cixEDvKChOk(ye~t0mSS(g(czF1~#`taF;o+hG zn!(!^HD5d)PaqIXPfuGcmZbtB48sIh@%ZuMCX>l(wVKW5=H}-3`1qxP@e^qG?%nzM z`Fr>7#lL6Io`pYcbaYfAk^CP(B9Ta|)lN-K0f5u#tgo*xE-wD{>lbq9bUK5q)z{YpfWzU~x^*idBq}P(Xf$HmlarG>ckZN~PoF+TJuffs zF9O}Ydlvv~Hk(i=L`5c(IUEjbyP=_hdd9`Yxm+#)Fc=I1fnd&P3!VxK165U3VcV6J zl~gP$Dnilaa;2oCP`$ai8TFGVPkIL7a5y3A|iTwd%bppPN!SDc5MJa0)e2b ztII3O*x1;rRjbf}$K&B{cez|UcI==PYierHxum27m6nzk8ewvBlKyULYMMQRK7q>0 z%IH>VYiq-P13+zUE%lMfWZ%Ah1AzYiekw|(QcO`JBO^kgu(-GwD}Ma=F*P+cK0ZD@ zJ$+zc007)>cVc3qUqEa&`_-#g0AR6LcJ10l2vH~$R;v|5t5hoLnVXwCdp6Z-HHwcP zKQ^1q0ARPPXA z^XJczk&&px#>S#2wbIg3>d)nJ^?E%33=a>lUcK5cps=v8=g*(x2*t+6Qe7^WU>=^0=1qHL)of}B0RK9=z zo_4XTtIKn2v$C?Vi#0Vhw2O6hb=}?F6p>*VTs=;w)9YH&)YJq34u``t%g+atnVAW* ztiQkC)9uKSBbb!0T)8qkC?TYG_=W@B2*m`<;Xa<=NC^R$_(~sNje)QFMcSK_eq0ae$ppr%WdEEJ{g9al73BpwVdN?1?wf zx^?StiDX1`Sa&ZCKDdIa}G~kU7c4^ettd{9Xxo@FCd{% z`1R{oPaw3sygbZ}TDHhWMnK7NF);Bj?wG&!2l6Lq*5up)lW=Jc-;eo0Q&Lc z2LN<*bOZ@R2;uYjckbMwDf_~O3qb=(Boe3734dNP0|p|5uvn~1mo8BzwOY;Pa)SU; zC=?i>y1IH%Kxn5=pQcQ0ZEexf(SZV;J9iGN&-0uV01zSMz<~q!K#g0^SGM(KcnAOT z<%>upS{fii$d)ZzFxvuv#bU|K%=EM3#fulQ*6rK3=Wz=dh!B#PnCO`fva+%ktU?cY z0PsAXmj(!{X|-Cqq^hf{=R7OW5)u;V143C@*@BUSe_^H3XeiU`*RP9;iaZZKG?hw4 zA2pvnd$wRqhG9Y&h6(z$uu7$>sHmV%^6%cg>+I|_nM^Y?Gm(*zX=!Qn1y^fp>!Cx3 zCMG5p1PXqH(6(*c_Ta$-%y_=+#*G_u-kkml5L!k?Mnglxr%#_eIqY_OdwY9sZm$1v z7CU8LwsGS|nM@WF6T@b+zkmO3G#Yz*d);n#KtM|~LQ7=~!z{ZO=gSUg*?oLrMMp<3 ctIt#a0Xd8YIh)Qy;{X5v07*qoM6N<$f{k81?EnA( literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/features/emoji_status@3x.png b/Telegram/Resources/icons/settings/premium/features/emoji_status@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..5e473fd0277d1c14e45bfa9a5ec836a9ae527473 GIT binary patch literal 2551 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 N002ovPDHLkV1ka8&qV+L literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/features/link.png b/Telegram/Resources/icons/settings/premium/features/link.png new file mode 100644 index 0000000000000000000000000000000000000000..a0c74beac1c99b1735d58cbd59a2f0611d0c7b86 GIT binary patch literal 639 zcmV-_0)YLAP)TmCuWDVHC%o>m5HfTp~htBb0@xStyAj#>j&F3Cf0@ zg@vq?va+1%Zf0dAWvAH50x2`0X%=Hv7G^Olq~!Z9ZjI}@!#mCU-Q9D}^SS4o=iGBC zlgYGNt;p}BP$+&$IOq>e)7$O#;tTKY?vlx*-ELp6*UROS7eLcAp=tU&rBbQjSlw>d zY&QP@Bo>SN{XT$3qY(%MtXAvI%}t?DU~z7@`=3BcrE)wT1Bk_9JeOLnUMv>7-A*o- zUj~gvBLH5nSJ121>jB)~-(Lo$QmJS(`d!t8kWQxqfTAd2kXEbB<#K{^A(cwGkC{vc zfYE4VK_aeCB9RP-!*aPSlgYStu~_`_^78oj$Tf;YM`w>RV!P}2`+1bfWC9=_k8|zq zc3Zf#dc6+7=kxK(nNFtw0)YV6uG8rNFbs3Zh6Ons4gjT6i5q=&bv2vKPAL>c&FAy| zelKwS4-XFjxMdp*hPSsj0Ks68OHn8kgTVlR$KyHb4-0yFdU}6<=N^beBAd-75{Zyw z^?JQi`VnY8pY!UHNF?M$>2x}gNbrmY5W_HES0E^rN|nuKl}e?c_W*LaTmXv2qF|gz zBzk>){Tjb>AVNs9*#vNVdwZG-I|1Qv_`7`hp9s4&YPFir=exeXb~>H;e4bqzyzX8A z5kjifDsPSTdOeH9a)!c!D4M1}KR>xvjYbm+g={w4$Hzyj)p~w@K2IU!+;;r2sQ>jl Z`U{kz7#%2|Yrg;h002ovPDHLkV1lT@=R$ML|(VMIrcX)yBjsX+=Ph)|d*ZX;8sJri<>{YD`>c2&s=)Df6CML#+WI)TqmSn!gO>Qm1 zodNk$&kp9CGryU8=A8fB;Z#*s1p)!=Y8Z~=7?;ca*BF0{%jISW1cHB!@y7%LLB_vk zh_(L(C?g{yD=RCt*t8W;W@e^LCTneNRVtMdi6k#CkD@4#$742|*VfjYPAA($IF4VQ z=Fy`^Mx*iP&!2QWJ2*Ia_wJoqt!4#tNuZ{truq5#xEwJS4u{9b$N79d8i<4Ac*=dK zxw(02YO1ED2K@Z-58xUd92|^|jU`GYl}g{dc>{0NmoHzkv$N9-)YaAH^ZCFDc6WDg-n_{eGB`LG z3WY$(gM3Pka z)2B~Ctl4bl@px$fdiLxY$hf+?T2fMyR4lNsU%!G31VLN`%H;F;XJ=>Z)1920w70iA zolb%v5+9$%#xSh4we|G$6!@D=rt**g;;td>Pj#7KqR1I~)!mH_^A}?%lgyuNUee#+8!G z<n%ATq(x7X=rGGYR+o4LIIu#=&xA@^^MQxLxj!D%#b8$Fc<~~20R`Q8i*hW zaLpErMW@q&v5Keva*t;2$9KT9*@UnvsG4BGCJcp{@0r;yfKVY zaDRWF4Go52o12@rZ{LnYA}mGAUrXk8yMcPFudhcGHKTDjobx~Zet!}Y>im-Nc)ai5 zztc1w3WXF3MQSt}jb?j$`@@G1LZL9(*f@=Ga&i)s(evleQ=m~Qm4}CiAcIb)O9PNh zCIh1*91h2*Cr0b+?1cTsY&NrhUqb<5820w9|dyWMUu7_3$+MNz+h|K{;{VzF4IQt5O$*tCpBz$pQW%Gu_5{T6fT6T8! zojZ5bYW1yKw?raQQBjfC>)qSi+t}DxSy}n^?OR%Cu+(-xcsyQiZf?rEzKlRgZwn{2 rRg!{Txt;tg_wj{WR#tYUK2QAz1l7iN=vl%b00000NkvXXu0mjfRuI)G literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/features/link@3x.png b/Telegram/Resources/icons/settings/premium/features/link@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..8a01eeeae2c5ab73a7da127ac7d112d49f1f7d69 GIT binary patch literal 1986 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/features/name@3x.png b/Telegram/Resources/icons/settings/premium/features/name@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b5d88b1faf622bb54ac578f0230cd4eeab02ade1 GIT binary patch literal 2481 zcmV;i2~PHjP)5uMoK$U z{2s!>{n94=W7IwPd&-}in{#qc&OPVc3qiNsa?35Z+;Yo5$A7we42I#pzCMB=P!vTF z1cqUy1gh8T5Cqj~wPLaO>(?)aVY=(58^w%9qfVzA92~@P9K$d{F$6(4j^iam5QLYn zqhtPY7=|mAN}*6VIXOutle@dShlht(s2GZ(X0zFBHV+OCK6vmz!BLW-TrMY*$sa#{ zL?V&h-CgBhfaAE^?apK}7dJ#W95$QH3TrhmFtED1%ChWDX~mOHr(G@=Z?r9GZHhRK z`~7~0!vS6_6bhT0o2gW)TrO8C75*Y`ocur5>9KIiA0P;#R;vdG2Zx4+K%39ya<5;% z{`BcnJG#k%qG&J}s!GYawziiibyS-Q} z3Y})N*|D)P48xQVyIr(e?ZUzWsN3@LGD(u%_o&zFL!pq+9m}!?gF!igI{-nDxw$#e zYR1RMyYFsnYz#C)kH@2&s2xL5R6HIRgo#F@y}i9%_5}`CG#bTmTv1UwW@KbUkSCwd z+iW(O#{ZSNK~WTF$4g5~<#Jg`F*_%h%WZCM^2Y>0+`D&Arm>`A1VQxo_w&bRXJ@HY zNL?Q%+b-2)Zf^aVjRacy?%6b^y0+}=x<`*9en4!qmpuQJTy(4&1St`-`CgI)6-M0 z*9(Qh{{H^guV0hNq?CqYK<5#SM&)P2YrtqU?(FO|^*8Z&yo2Pr9j|z8I2?|2IxXW% zPft%R7E4=w{X2^3_4<51-*TSF=ks8gF6kBdG8lg>^^aWxG)*roED!`CTuG%;PoF-0 z`0(NL=g&d6Oc2D}++6D(!5rZR|FONjJ#bhek%(5S6?~P!UcSZJv|M!WLcJ`>85h3)#_|E+o)LgAr%Bcg+k#nk4vTGMx)W|^$Mp9!@PX? zQYt@?G;BZY$ zOf;1cMNy~I3C?fvcwD$E={)Y-xg*#~tyXIq?CkFDK6&y)@Wo9XhLG2ZLZ{>7<6JH$ z>QJZC1p)!EZaF(UD;4QG91gG73l3N73UP05ug~WbzCyoMqvP19h3?c(BMVPTvp?c6bfgvS+CdIRvq8zbb>~>v$G>LfhYp66&T}YGMUDS zn&5{*V9k;wY`I%pl$YIS;gTJ)g7 zU|3vS6loO-g*vb!9LGVE2#3RsVN`eU3tS>YYUJa`kD@46tJR7o0G4F~fk4xsQSSAi z5jvetv~8pY7D14f$uG~(pFgcuEBNgA__$~-pJiE>%hl$L`hT_FTCK)gtwy7<*=#gT z*XwmKO zvrQ-Kb{QTX7X7B}!?LW~?FM^WSy=%a#N%;`#e(BFZ@LJAXti38$0G`POQn*i=U6N@ zFfh=)Ry+=eqdUb)r4qQrXt&!zj~9(brQSF)G9t5sBoqpDr-(SZ|MKNaDwVQYt@rQW z@9XP>niVvKeNV#mVzIckwzjmiB=jSs>ktGn4D;&MD=7&!Ha6zx=Nlb81VL}#zJ2rN zO?Qf26_H3p`09Z`K)$hFuNNibrBcacGF^|T9f0FF=!c9(qkMZ5MZphoaBy&Wtu9p> zkV36igD$>h1))-@uq-Q_e)#ZVZEfw6GF*vbj~_o45(0kdK)$_bH5puJ?wU(2BY_|Y zLJ$N+QI8%y8XX-KGWJ+3c6N3q|13$8V48Tz8WE2&icu6bIyy>GRDXXz7@k%tm2cm^ zwS0VNXh<00a=F}C3%MD3dwZn{jKN^AWqzR3>A)>OZKcE4L(_Wj`T2P$6ly18aJgJy z@F7)fy8(_tg0N}1$P|rB3Jr`00000NkvXXu0mjf4_2*& literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/features/stories.png b/Telegram/Resources/icons/settings/premium/features/stories.png new file mode 100644 index 0000000000000000000000000000000000000000..bac1e2e1456f0ba267b54e09a6606dee8035e830 GIT binary patch literal 806 zcmV+>1KIqEP)Tl|M*&Q546|^NEQ=CW0>tA>vgKX=2&~Gm2<*ik1i( zG=%<8i%SGHG!#gK(GUcML=6Sy+#=K{L}Ucz@?0c}2H#R5_5BT3{ONno8h*d;cJDd& z!@1vg?s=Tk=~NVj{!Oi|tz5I1#bS{pslUJ9X0xT!>4%4hUtm_NRkhRA)pc-ifI7|2 z&JxkZ#l_3ZOC%C87z{cP6=-#Jl^wpkyquYt>FevW*=#HnjYdnQ5`c}3jbA{?WD>yD z)s-lU&2A75hl9c3PoT}sO#oY4TR&UDG&MDKe}CWE*{KE%4-W%4Jv~(&@caD^heHeU z`FsE#A0LfIV*^N*<hoMK7l7^U z?UR!e=Do#YQL)Cy#~Uiz+1UYLGMVa=Mn*;exZQ3dT3J~E@bU36Iy$OrSrwGaV^20Q0}5U@!>4i)DT)Fh91d&G@9yq~LLsVe$YQZrDwR}u^YinHqGYq#?(S|a zWpQy4Kr|X{0F8}}0odQ)*R5PDyWI|;P$<-{#+%LNa=Bb66x!O_mY0_+mCDV{&95My z=UZA@VzJoU+Zz#?&E|$Na(sLY;Oy*75QJukg@uJgBB9#U8Eo-*oITXT!^6qR$@cbk zp66M}<#Nfg3?QG+*Y}q`h=|;7cRHQcj@pTd30aoc*Vk1P25LI|9S%nz5EvXB6a?Yu k=qQ`bHp^t<{@3s54=Qb2NVcx~^#A|>07*qoM6N<$f`l-J`2YX_ literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/features/stories@2x.png b/Telegram/Resources/icons/settings/premium/features/stories@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d077b13485321efddee18415730ef9e409120d66 GIT binary patch literal 1789 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/features/transcribe@2x.png b/Telegram/Resources/icons/settings/premium/features/transcribe@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..75bbedc2497eda699c81f6494dd4b8eae557a53c GIT binary patch literal 1403 zcmV->1%&#EP)MhX6b0=4B$2;oRV z6j7!LK?M;5jp2llm7rdX)R12gqYHx|a4-|QHbSzSCevXMv=lQF@f=&uHhg{;@6Xd| zC(q{DL@$2dtFz~Qp6C7WzR!98oTX{C+8;lD!0}LacJ@&tNX0PBQ6u~o!!XoQGsNnD zpm?H_30A387K`P|l`95=0RTRI`ZO{!5(oqmiM@OGuGwsEYirxy-u|OOaZ$Imwaw4Z zS{#%^5x6a)D$9mJf5V0 zMn*;uadL7}+T?P%#Pt*ohdGWDej1HN;x;icfr!_xT>}7~=Od8_c_%=@!bsD!#bN<~ zp`jsZ>+bHZOl&k71pvKXPcmG(bjfD3g+d{krf=N1@!Rh}BV;fb5HS*oRE zXU?1vrmV8Ek~sAC_M${q*TZg-e#|yZiI! zPuN?25?34`old75N+O!3_uKyk$pM`|e?Axtj*gC|3TSwEI2a6GxNt!sPCT+0pR4xlj3gvsuL$p zWMpIjKqwRvjHIeKj#CJt=} zpr8N%*4EbKB4yU0yu3WJhKhGCx7&?~Uawak=;h0oi1_5m6Tza8PMfB*h{XJ=<^ZEbCBt=(?-`FzCw{P}aS zKRLG`qPQZJ0Kr~0ym|8`#@^lC&GWqUwDs-VH|fZ|d-o0z$HvCw`$`BXKR=)Jzi0JeA>g(&}of{e&W@l&j zo9om70l?L(SC^KSNH>8%;K73jb#-;Qxw#C(Fbq>rP*7J_=X5$378Zm8Z)j*pJin5Q zBFnOUeSPHeAc*Jrm^Y5+`TqX?L@p=E0ug0qW?HRQx7+>k<3};a;^Ly)?QUslQI=LY zkf5}*G^5c-XiO$kGO1Dn1OOC85g>B=OcE#sXKJ-t9rKWkj@>uL6aWb`mHd=JN`Q8D zcF05Q=SxLO!9|hdxXYI>QxvtewUvCfWB1p>Q6or{cHI7+`WMHXBoU1~#1a4i002ov JPDHLkV1fgKrbYk& literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/features/transcribe@3x.png b/Telegram/Resources/icons/settings/premium/features/transcribe@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b2c516641f2fdccbaf4dd070c43fc0e933642285 GIT binary patch literal 2400 zcmV-m37__fP) z^)}TCAPxe6@-R{CMPEg1OgWq7XW}-tsWj8Zfa`M>2x;R zjEIORE-vox@4s>5#)3+0HrwV37Dr-Y;?t*3l}aT_Ky!2RQY<$%HbOhQcI~pLz-F`U zLM$jK=|oTyScgj)Ht8d*J`zke;_uSP5n?zN=j;MYzzzx z#B#d3yZie3AQ=va!{u^oYHG}jI5|1h*4Cz{r+0UE=j7y!jEpQ||KP!cSZAcAr3r3Fcs!!cg9i^#6g3)+?d|PYCl?kL;?&q|wga2Z zUW(_%5EK+7lgZ#&;nJl`=g*&CNHaAxH7zZTm_IW!bNKLKE|&{`e){xj$BrHE-@nHc z;^X77>BQslva_?VT)6@Oc>VfyQc{w+DJpxcsHg~jKbcIn$O!cE@){o>U&veH@aWMa z8tvaLL_9VpiT-l6_jPmkwnN0R?79~S5IyxGTiZ5Tj zgolUQW@HiP!DKSuym_R|=)k}L+>TO7Oehp;G#V5|KYsie92`uxIETYoe1X1q?;e!4wzlF#At50~ zqY+AX@7@hFmkTjxXXlod7T8y-SFgrN1p>kJ^fZd12!co?5@PY{>S{==t*s5_EEi(1 zDPpmB)v8rQ(Z!1wv4zCJ!GWl-VZ#P&pe7_F01Dmx(xKDooeVZl#+cjvplLk<0s?{C4uh+9! zEJ|!H3t|X@%+JpQ08Azmf*_RGTo%Oa0dmB6Jf6k#pS=+t9!_?rMuM17C>$CZ8X6kf zym>RphAj!Hsi`9)Bk$h5TeohV^`%GbuMy1GV0M8Ndu=&1E(N$eGUe0<=J4nYvHSd5c~goME80E(jL&YiQq0VhtJz)n+q zJ|8FDx^*j@zzT%|i}U;xq&LCXS=HhR0*eIC&(Ei%q*!AxB_#!8)zHvDRH(17htj5| zChOf2X=1s#xv-k?@$r=_SK_1|9v*{(gHS=I(_sT_A>`-h>vTG(FO^C?Jw0&>&d$!m z!^2P^Cnv}Hc9JIM@9#f3ISFezcI+5YK_Zcuhs4Uu%OfKraZ3}8M&tAOH8nNnnihlJ zM~)nUQk6;-6cl7fVgP`;x;pF|TXYgRIXUJxN%Qmbt*xzvg@pwL1qB5KB_$>I@8374 zG(A1NZ{I$m9d~#4{{DWbQ(aw6s*$!3i;j+lF(VX37rJ>!NJ!}D=s>N&%a6BR-z z6wb}fLFLPrFOzMdjn_yV4yV7r-_Oqv03esklarI-3216tgZQ8UcDk_S@;Q#=p zr>A>*dY(Od*45QDH#cXoRA6A>ix)3KLqh=oGMQ}s`t{$xeSxZ{N<#%ZrVT_44v!v)ODm+sDU8BogK3=2lfz_4W0ce-RW#+uPgY;^LOx z9x5-_>2&(3Q>O+71}v^xI-O3d)oQg`yh(@Cs8yg!K z80hHe=;`UfPN)>ZUa#NG;qLD4=jVqVtLp0N0s;bv2XJa(m)CDNXfzs)MuWv+rlzJW zUV>4MUlhB?4mhO3AxpvEONsv){t}}IO9}Cl!Y?9*os|DH=P@=m1`|@L^w-q*i{5!u zRaGGf;^^pDTU+~UYP9>#> PeerColors::suggestedValue() const { auto PeerColors::indicesValue() const -> rpl::producer { - return rpl::single(_colorIndicesCurrent - ? *_colorIndicesCurrent - : Ui::ColorIndicesCompressed() + return rpl::single( + indicesCurrent() ) | rpl::then(_colorIndicesChanged.events() | rpl::map([=] { - return *_colorIndicesCurrent; + return indicesCurrent(); })); } -int PeerColors::requiredLevelFor(PeerId channel, uint8 index) const { +Ui::ColorIndicesCompressed PeerColors::indicesCurrent() const { + return _colorIndicesCurrent + ? *_colorIndicesCurrent + : Ui::ColorIndicesCompressed(); +} + +const base::flat_map &PeerColors::requiredLevelsGroup() const { + return _requiredLevelsGroup; +} + +const base::flat_map &PeerColors::requiredLevelsChannel() const { + return _requiredLevelsChannel; +} + +int PeerColors::requiredGroupLevelFor(PeerId channel, uint8 index) const { if (Data::DecideColorIndex(channel) == index) { return 0; - } else if (const auto i = _requiredLevels.find(index) - ; i != end(_requiredLevels)) { + } else if (const auto i = _requiredLevelsGroup.find(index) + ; i != end(_requiredLevelsGroup)) { + return i->second; + } + return 1; +} + +int PeerColors::requiredChannelLevelFor(PeerId channel, uint8 index) const { + if (Data::DecideColorIndex(channel) == index) { + return 0; + } else if (const auto i = _requiredLevelsChannel.find(index) + ; i != end(_requiredLevelsChannel)) { return i->second; } return 1; @@ -100,7 +123,8 @@ void PeerColors::apply(const MTPDhelp_peerColors &data) { }; const auto &list = data.vcolors().v; - _requiredLevels.clear(); + _requiredLevelsGroup.clear(); + _requiredLevelsChannel.clear(); suggested.reserve(list.size()); for (const auto &color : list) { const auto &data = color.data(); @@ -110,8 +134,11 @@ void PeerColors::apply(const MTPDhelp_peerColors &data) { continue; } const auto colorIndex = uint8(colorIndexBare); + if (const auto min = data.vgroup_min_level()) { + _requiredLevelsGroup[colorIndex] = min->v; + } if (const auto min = data.vchannel_min_level()) { - _requiredLevels[colorIndex] = min->v; + _requiredLevelsChannel[colorIndex] = min->v; } if (!data.is_hidden()) { suggested.push_back(colorIndex); diff --git a/Telegram/SourceFiles/api/api_peer_colors.h b/Telegram/SourceFiles/api/api_peer_colors.h index 0ad1a63c7..f8d379020 100644 --- a/Telegram/SourceFiles/api/api_peer_colors.h +++ b/Telegram/SourceFiles/api/api_peer_colors.h @@ -25,10 +25,19 @@ public: [[nodiscard]] std::vector suggested() const; [[nodiscard]] rpl::producer> suggestedValue() const; + [[nodiscard]] Ui::ColorIndicesCompressed indicesCurrent() const; [[nodiscard]] auto indicesValue() const -> rpl::producer; - [[nodiscard]] int requiredLevelFor( + [[nodiscard]] auto requiredLevelsGroup() const + -> const base::flat_map &; + [[nodiscard]] auto requiredLevelsChannel() const + -> const base::flat_map &; + + [[nodiscard]] int requiredGroupLevelFor( + PeerId channel, + uint8 index) const; + [[nodiscard]] int requiredChannelLevelFor( PeerId channel, uint8 index) const; @@ -42,7 +51,8 @@ private: mtpRequestId _requestId = 0; base::Timer _timer; rpl::variable> _suggested; - base::flat_map _requiredLevels; + base::flat_map _requiredLevelsGroup; + base::flat_map _requiredLevelsChannel; rpl::event_stream<> _colorIndicesChanged; std::unique_ptr _colorIndicesCurrent; diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_color_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_color_box.cpp index 38f064cb2..15e30cba2 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_color_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_color_box.cpp @@ -527,9 +527,13 @@ void Apply( } else { CheckBoostLevel(show, peer, [=](int level) { const auto peerColors = &peer->session().api().peerColors(); - const auto colorRequired = peerColors->requiredLevelFor( - peer->id, - values.colorIndex); + const auto colorRequired = peer->isMegagroup() + ? peerColors->requiredGroupLevelFor( + peer->id, + values.colorIndex) + : peerColors->requiredChannelLevelFor( + peer->id, + values.colorIndex); const auto iconRequired = values.backgroundEmojiId ? session->account().appConfig().get( "channel_bg_icon_level_min", diff --git a/Telegram/SourceFiles/boxes/peers/replace_boost_box.cpp b/Telegram/SourceFiles/boxes/peers/replace_boost_box.cpp index 178945d32..494996dbb 100644 --- a/Telegram/SourceFiles/boxes/peers/replace_boost_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/replace_boost_box.cpp @@ -7,10 +7,13 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "boxes/peers/replace_boost_box.h" +#include "api/api_peer_colors.h" +#include "apiwrap.h" #include "base/event_filter.h" #include "base/unixtime.h" #include "boxes/peer_list_box.h" #include "data/data_channel.h" +#include "data/data_cloud_themes.h" #include "data/data_session.h" #include "lang/lang_keys.h" #include "main/main_account.h" @@ -419,6 +422,47 @@ Ui::BoostCounters ParseBoostCounters( }; } +Ui::BoostFeatures LookupBoostFeatures(not_null channel) { + const auto group = channel->isMegagroup(); + const auto appConfig = &channel->session().account().appConfig(); + const auto get = [&](const QString &key, int fallback, bool ok = true) { + return ok ? appConfig->get(key, fallback) : 0; + }; + + auto nameColorsByLevel = base::flat_map(); + auto linkStylesByLevel = base::flat_map(); + const auto peerColors = &channel->session().api().peerColors(); + const auto &list = group + ? peerColors->requiredLevelsGroup() + : peerColors->requiredLevelsChannel(); + const auto indices = peerColors->indicesCurrent(); + for (const auto &[index, level] : list) { + if (!Ui::ColorPatternIndex(indices, index, false)) { + ++nameColorsByLevel[level]; + } + ++linkStylesByLevel[level]; + } + + return Ui::BoostFeatures{ + .nameColorsByLevel = std::move(nameColorsByLevel), + .linkStylesByLevel = std::move(linkStylesByLevel), + .linkLogoLevel = get(u"channel_bg_icon_level_min"_q, 4, !group), + .transcribeLevel = get(u"group_transcribe_level_min"_q, 6, group), + .emojiPackLevel = get(u"group_emoji_stickers_level_min"_q, 4, group), + .emojiStatusLevel = get(group + ? u"group_emoji_status_level_min"_q + : u"channel_emoji_status_level_min"_q, 8), + .wallpaperLevel = get(group + ? u"group_wallpaper_level_min"_q + : u"channel_wallpaper_level_min"_q, 9), + .wallpapersCount = int( + channel->owner().cloudThemes().chatThemes().size()), + .customWallpaperLevel = get(group + ? u"channel_custom_wallpaper_level_min"_q + : u"group_custom_wallpaper_level_min"_q, 10), + }; +} + int BoostsForGift(not_null session) { const auto key = u"boosts_per_sent_gift"_q; return session->account().appConfig().get(key, 0); diff --git a/Telegram/SourceFiles/boxes/peers/replace_boost_box.h b/Telegram/SourceFiles/boxes/peers/replace_boost_box.h index f15cf0b14..74ab7e093 100644 --- a/Telegram/SourceFiles/boxes/peers/replace_boost_box.h +++ b/Telegram/SourceFiles/boxes/peers/replace_boost_box.h @@ -9,12 +9,15 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/object_ptr.h" +class ChannelData; + namespace Main { class Session; } // namespace Main namespace Ui { struct BoostCounters; +struct BoostFeatures; class BoxContent; class RpWidget; } // namespace Ui @@ -39,6 +42,9 @@ struct ForChannelBoostSlots { [[nodiscard]] Ui::BoostCounters ParseBoostCounters( const MTPpremium_BoostsStatus &status); +[[nodiscard]] Ui::BoostFeatures LookupBoostFeatures( + not_null channel); + [[nodiscard]] int BoostsForGift(not_null session); object_ptr ReassignBoostsBox( diff --git a/Telegram/SourceFiles/ui/boxes/boost_box.cpp b/Telegram/SourceFiles/ui/boxes/boost_box.cpp index dc47020a2..fc374dc30 100644 --- a/Telegram/SourceFiles/ui/boxes/boost_box.cpp +++ b/Telegram/SourceFiles/ui/boxes/boost_box.cpp @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "ui/boxes/boost_box.h" +#include "info/profile/info_profile_icon.h" #include "lang/lang_keys.h" #include "ui/boxes/confirm_box.h" #include "ui/effects/fireworks_animation.h" @@ -14,6 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/layers/generic_box.h" #include "ui/text/text_utilities.h" #include "ui/widgets/buttons.h" +#include "ui/wrap/fade_wrap.h" #include "ui/painter.h" #include "styles/style_giveaway.h" #include "styles/style_layers.h" @@ -45,10 +47,11 @@ namespace { } [[nodiscard]] object_ptr MakeTitle( - not_null box, + not_null parent, rpl::producer title, - rpl::producer repeated) { - auto result = object_ptr(box); + rpl::producer repeated, + bool centered = true) { + auto result = object_ptr(parent); struct State { not_null title; @@ -57,7 +60,7 @@ namespace { const auto notEmpty = [](const QString &text) { return !text.isEmpty(); }; - const auto state = box->lifetime().make_state(State{ + const auto state = parent->lifetime().make_state(State{ .title = Ui::CreateChild( result.data(), rpl::duplicate(title), @@ -83,7 +86,9 @@ namespace { const auto available = outer - repeated - skip; const auto use = std::min(state->title->textMaxWidth(), available); state->title->resizeToWidth(use); - const auto left = (outer - use - skip - repeated) / 2; + const auto left = centered + ? (outer - use - skip - repeated) / 2 + : 0; state->title->moveToLeft(left, 0); const auto mleft = st::boostTitleBadge.margin.left(); const auto mtop = st::boostTitleBadge.margin.top(); @@ -103,6 +108,171 @@ namespace { return result; } +[[nodiscard]] object_ptr MakeFeaturesBadge( + not_null parent, + rpl::producer text) { + auto result = object_ptr( + parent, + std::move(text), + st::boostLevelBadge); + const auto label = result.data(); + + label->show(); + label->paintRequest() | rpl::start_with_next([=] { + const auto size = label->textMaxWidth(); + const auto rect = QRect( + (label->width() - size) / 2, + st::boostLevelBadge.margin.top(), + size, + st::boostLevelBadge.style.font->height + ).marginsAdded(st::boostLevelBadge.margin); + auto p = QPainter(label); + auto gradient = QLinearGradient( + rect.topLeft(), + rect.topRight()); + gradient.setStops(Ui::Premium::GiftGradientStops()); + p.setBrush(gradient); + p.setPen(Qt::NoPen); + p.drawRoundedRect(rect, rect.height() / 2., rect.height() / 2.); + + const auto &lineFg = st::windowBgRipple; + const auto line = st::boostLevelBadgeLine; + const auto top = st::boostLevelBadge.margin.top() + + ((st::boostLevelBadge.style.font->height - line) / 2); + const auto left = 0; + const auto skip = st::boostLevelBadgeSkip; + if (const auto right = rect.x() - skip; right > left) { + p.fillRect(left, top, right - left, line, lineFg); + } + const auto right = label->width(); + if (const auto left = rect.x() + rect.width() + skip + ; left < right) { + p.fillRect(left, top, right - left, line, lineFg); + } + }, label->lifetime()); + + return result; +} + +void AddFeaturesList( + not_null container, + const Ui::BoostFeatures &features, + int startFromLevel, + bool group) { + const auto add = [&]( + rpl::producer text, + const style::icon &st) { + const auto label = container->add( + object_ptr( + container, + std::move(text), + st::boostFeatureLabel), + st::boostFeaturePadding); + object_ptr( + label, + st, + st::boostFeatureIconPosition); + }; + const auto proj = &Ui::Text::RichLangValue; + const auto max = std::max({ + features.linkLogoLevel, + features.transcribeLevel, + features.emojiPackLevel, + features.emojiStatusLevel, + features.wallpaperLevel, + features.customWallpaperLevel, + (features.nameColorsByLevel.empty() + ? 0 + : features.nameColorsByLevel.back().first), + (features.linkStylesByLevel.empty() + ? 0 + : features.linkStylesByLevel.back().first), + }); + auto nameColors = 0; + auto linkStyles = 0; + for (auto i = std::max(startFromLevel, 1); i <= max; ++i) { + const auto unlocks = (i == startFromLevel); + container->add( + MakeFeaturesBadge( + container, + (unlocks + ? tr::lng_boost_level_unlocks + : tr::lng_boost_level)( + lt_count, + rpl::single(float64(i)))), + st::boostLevelBadgePadding); + add( + tr::lng_feature_stories(lt_count, rpl::single(float64(i)), proj), + st::boostFeatureStories); + if (!group) { + add(tr::lng_feature_reactions( + lt_count, + rpl::single(float64(i)), + proj + ), st::boostFeatureCustomReactions); + if (const auto j = features.nameColorsByLevel.find(i) + ; j != end(features.nameColorsByLevel)) { + nameColors += j->second; + } + if (nameColors > 0) { + add(tr::lng_feature_name_color_channel( + lt_count, + rpl::single(float64(nameColors)), + proj + ), st::boostFeatureName); + } + if (const auto j = features.linkStylesByLevel.find(i) + ; j != end(features.linkStylesByLevel)) { + linkStyles += j->second; + } + if (linkStyles > 0) { + add(tr::lng_feature_link_style_channel( + lt_count, + rpl::single(float64(linkStyles)), + proj + ), st::boostFeatureLink); + } + if (i >= features.linkLogoLevel) { + add( + tr::lng_feature_link_emoji(proj), + st::boostFeatureCustomLink); + } + } + if (group && i >= features.emojiPackLevel) { + add( + tr::lng_feature_custom_emoji_pack(proj), + st::boostFeatureCustomEmoji); + } + if (group && i >= features.transcribeLevel) { + add( + tr::lng_feature_transcribe(proj), + st::boostFeatureTranscribe); + } + if (i >= features.emojiStatusLevel) { + add( + tr::lng_feature_emoji_status(proj), + st::boostFeatureEmojiStatus); + } + if (i >= features.wallpaperLevel) { + add( + (group + ? tr::lng_feature_backgrounds_group + : tr::lng_feature_backgrounds_channel)( + lt_count, + rpl::single(float64(features.wallpapersCount)), + proj), + st::boostFeatureBackground); + } + if (i >= features.customWallpaperLevel) { + add( + (group + ? tr::lng_feature_custom_background_group + : tr::lng_feature_custom_background_channel)(proj), + st::boostFeatureCustomBackground); + } + } +} + } // namespace void StartFireworks(not_null parent) { @@ -153,7 +323,10 @@ void BoostBox( state->data.value(), st::boxRowPadding); - box->addTopButton(st::boxTitleClose, [=] { box->closeBox(); }); + box->setMaxHeight(st::boostBoxMaxHeight); + const auto close = box->addTopButton( + st::boxTitleClose, + [=] { box->closeBox(); }); const auto name = data.name; @@ -192,21 +365,12 @@ void BoostBox( Ui::Text::RichLangValue); return (counters.mine || full) ? (left - ? (!counters.level - ? (data.group - ? tr::lng_boost_channel_you_first_group - : tr::lng_boost_channel_you_first)( - lt_count, - rpl::single(float64(left)), - Ui::Text::RichLangValue) - : (data.group - ? tr::lng_boost_channel_you_more_group - : tr::lng_boost_channel_you_more)( - lt_count, - rpl::single(float64(left)), - lt_post, - std::move(post), - Ui::Text::RichLangValue)) + ? tr::lng_boost_channel_needs_unlock( + lt_count, + rpl::single(float64(left)), + lt_channel, + rpl::single(bold), + Ui::Text::RichLangValue) : (!counters.level ? (data.group ? tr::lng_boost_channel_reached_first_group @@ -220,23 +384,38 @@ void BoostBox( lt_post, std::move(post), Ui::Text::RichLangValue))) - : !counters.level - ? tr::lng_boost_channel_needs_first( + : tr::lng_boost_channel_needs_unlock( lt_count, rpl::single(float64(left)), lt_channel, rpl::single(bold), - Ui::Text::RichLangValue) - : tr::lng_boost_channel_needs_more( - lt_count, - rpl::single(float64(left)), - lt_channel, - rpl::single(bold), - lt_post, - std::move(post), Ui::Text::RichLangValue); }) | rpl::flatten_latest(); + auto faded = object_ptr>( + close->parentWidget(), + MakeTitle( + box, + rpl::duplicate(title), + rpl::duplicate(repeated), + false)); + const auto titleInner = faded.data(); + titleInner->move(st::boxTitlePosition); + titleInner->resizeToWidth(st::boxWideWidth + - st::boxTitleClose.width + - st::boxTitlePosition.x()); + titleInner->hide(anim::type::instant); + crl::on_main(titleInner, [=] { + titleInner->raise(); + titleInner->toggleOn(rpl::single( + rpl::empty + ) | rpl::then( + box->scrolls() + ) | rpl::map([=] { + return box->scrollTop() > 0; + })); + }); + box->addRow( MakeTitle(box, std::move(title), std::move(repeated)), st::boxRowPadding + QMargins(0, st::boostTitleSkip, 0, 0)); @@ -249,6 +428,14 @@ void BoostBox( (st::boxRowPadding + QMargins(0, st::boostTextSkip, 0, st::boostBottomSkip))); + const auto current = state->data.current(); + box->setTitle(rpl::single(QString())); + AddFeaturesList( + box->verticalLayout(), + data.features, + current.level + (current.nextLevelBoosts ? 1 : 0), + data.group); + const auto allowMulti = data.allowMulti; auto submit = state->data.value( ) | rpl::map([=](BoostCounters counters) { @@ -579,7 +766,7 @@ void FillBoostLimit( container->add(object_ptr(container, skip)); }; - addSkip(st::boostSkipTop); + //addSkip(st::boostSkipTop); const auto ratio = [=](BoostCounters counters) { const auto min = counters.thisLevelBoosts; diff --git a/Telegram/SourceFiles/ui/boxes/boost_box.h b/Telegram/SourceFiles/ui/boxes/boost_box.h index 9acc046f7..064e697ef 100644 --- a/Telegram/SourceFiles/ui/boxes/boost_box.h +++ b/Telegram/SourceFiles/ui/boxes/boost_box.h @@ -30,9 +30,22 @@ struct BoostCounters { BoostCounters) = default; }; +struct BoostFeatures { + base::flat_map nameColorsByLevel; + base::flat_map linkStylesByLevel; + int linkLogoLevel = 0; + int transcribeLevel = 0; + int emojiPackLevel = 0; + int emojiStatusLevel = 0; + int wallpaperLevel = 0; + int wallpapersCount = 0; + int customWallpaperLevel = 0; +}; + struct BoostBoxData { QString name; BoostCounters boost; + BoostFeatures features; bool allowMulti = false; bool group = false; }; diff --git a/Telegram/SourceFiles/ui/effects/premium.style b/Telegram/SourceFiles/ui/effects/premium.style index 4134c5be9..5cce045bd 100644 --- a/Telegram/SourceFiles/ui/effects/premium.style +++ b/Telegram/SourceFiles/ui/effects/premium.style @@ -290,7 +290,7 @@ boostReassignText: FlatLabel(defaultFlatLabel) { } boostBottomSkip: 6px; boostBox: Box(premiumPreviewDoubledLimitsBox) { - buttonPadding: margins(22px, 22px, 22px, 22px); + buttonPadding: margins(16px, 12px, 16px, 12px); buttonHeight: 42px; button: RoundButton(defaultActiveButton) { height: 42px; @@ -337,3 +337,30 @@ showOrBox: Box(boostBox) { buttonPadding: margins(28px, 16px, 28px, 27px); button: showOrShowButton; } + +boostBoxMaxHeight: 512px; +boostLevelBadge: FlatLabel(defaultFlatLabel) { + margin: margins(12px, 4px, 12px, 4px); + style: semiboldTextStyle; + textFg: premiumButtonFg; + align: align(top); +} +boostLevelBadgePadding: margins(30px, 12px, 32px, 12px); +boostLevelBadgeSkip: 8px; +boostLevelBadgeLine: 1px; + +boostFeatureLabel: FlatLabel(defaultFlatLabel) { + margin: margins(36px, 4px, 0px, 4px); +} +boostFeaturePadding: margins(64px, 6px, 24px, 6px); +boostFeatureIconPosition: point(0px, 0px); +boostFeatureBackground: icon{{ "settings/premium/features/background", windowBgActive }}; +boostFeatureCustomBackground: icon{{ "settings/premium/features/custom_background", windowBgActive }}; +boostFeatureCustomEmoji: icon{{ "settings/premium/features/custom_emoji", windowBgActive }}; +boostFeatureCustomLink: icon{{ "settings/premium/features/custom_link", windowBgActive }}; +boostFeatureCustomReactions: icon{{ "settings/premium/features/custom_reactions", windowBgActive }}; +boostFeatureEmojiStatus: icon{{ "settings/premium/features/emoji_status", windowBgActive }}; +boostFeatureLink: icon{{ "settings/premium/features/link", windowBgActive }}; +boostFeatureName: icon{{ "settings/premium/features/name", windowBgActive }}; +boostFeatureStories: icon{{ "settings/premium/features/stories", windowBgActive }}; +boostFeatureTranscribe: icon{{ "settings/premium/features/transcribe", windowBgActive }}; diff --git a/Telegram/SourceFiles/window/window_session_controller.cpp b/Telegram/SourceFiles/window/window_session_controller.cpp index 258da20c6..8b099aa15 100644 --- a/Telegram/SourceFiles/window/window_session_controller.cpp +++ b/Telegram/SourceFiles/window/window_session_controller.cpp @@ -630,6 +630,7 @@ void SessionNavigation::resolveBoostState(not_null channel) { uiShow()->show(Box(Ui::BoostBox, Ui::BoostBoxData{ .name = channel->name(), .boost = ParseBoostCounters(result), + .features = LookupBoostFeatures(channel), .allowMulti = (BoostsForGift(_session) > 0), .group = channel->isMegagroup(), }, submit));