From 0c991466f5b1918178d0d878af6b86050b997b7b Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 19 Feb 2024 11:35:53 +0400 Subject: [PATCH] Update API scheme to layer 175. Business promo. --- Telegram/CMakeLists.txt | 2 + Telegram/Resources/art/business_logo.png | Bin 0 -> 48042 bytes Telegram/Resources/icons/menu/shop.png | Bin 0 -> 687 bytes Telegram/Resources/icons/menu/shop@2x.png | Bin 0 -> 1239 bytes Telegram/Resources/icons/menu/shop@3x.png | Bin 0 -> 1770 bytes .../premium/business/business_away.png | Bin 0 -> 662 bytes .../premium/business/business_away@2x.png | Bin 0 -> 1190 bytes .../premium/business/business_away@3x.png | Bin 0 -> 1806 bytes .../premium/business/business_chatbots.png | Bin 0 -> 499 bytes .../premium/business/business_chatbots@2x.png | Bin 0 -> 928 bytes .../premium/business/business_chatbots@3x.png | Bin 0 -> 1405 bytes .../premium/business/business_hours.png | Bin 0 -> 426 bytes .../premium/business/business_hours@2x.png | Bin 0 -> 765 bytes .../premium/business/business_hours@3x.png | Bin 0 -> 1130 bytes .../premium/business/business_location.png | Bin 0 -> 454 bytes .../premium/business/business_location@2x.png | Bin 0 -> 845 bytes .../premium/business/business_location@3x.png | Bin 0 -> 1226 bytes .../premium/business/business_quick.png | Bin 0 -> 615 bytes .../premium/business/business_quick@2x.png | Bin 0 -> 1083 bytes .../premium/business/business_quick@3x.png | Bin 0 -> 1520 bytes .../icons/settings/premium/status.png | Bin 497 -> 568 bytes .../icons/settings/premium/status@2x.png | Bin 787 -> 1093 bytes .../icons/settings/premium/status@3x.png | Bin 1166 -> 1616 bytes Telegram/Resources/langs/lang.strings | 18 + Telegram/Resources/qrc/telegram/telegram.qrc | 1 + .../SourceFiles/boxes/premium_preview_box.cpp | 12 + .../SourceFiles/boxes/premium_preview_box.h | 1 + Telegram/SourceFiles/mtproto/scheme/api.tl | 17 +- Telegram/SourceFiles/settings/settings.style | 8 + .../settings/settings_business.cpp | 568 ++++++++++++++++++ .../SourceFiles/settings/settings_business.h | 37 ++ .../SourceFiles/settings/settings_main.cpp | 14 + .../SourceFiles/settings/settings_premium.cpp | 15 +- .../ui/effects/premium_top_bar.cpp | 60 +- .../SourceFiles/ui/effects/premium_top_bar.h | 15 + Telegram/SourceFiles/ui/menu_icons.style | 1 + 36 files changed, 756 insertions(+), 13 deletions(-) create mode 100644 Telegram/Resources/art/business_logo.png create mode 100644 Telegram/Resources/icons/menu/shop.png create mode 100644 Telegram/Resources/icons/menu/shop@2x.png create mode 100644 Telegram/Resources/icons/menu/shop@3x.png create mode 100644 Telegram/Resources/icons/settings/premium/business/business_away.png create mode 100644 Telegram/Resources/icons/settings/premium/business/business_away@2x.png create mode 100644 Telegram/Resources/icons/settings/premium/business/business_away@3x.png create mode 100644 Telegram/Resources/icons/settings/premium/business/business_chatbots.png create mode 100644 Telegram/Resources/icons/settings/premium/business/business_chatbots@2x.png create mode 100644 Telegram/Resources/icons/settings/premium/business/business_chatbots@3x.png create mode 100644 Telegram/Resources/icons/settings/premium/business/business_hours.png create mode 100644 Telegram/Resources/icons/settings/premium/business/business_hours@2x.png create mode 100644 Telegram/Resources/icons/settings/premium/business/business_hours@3x.png create mode 100644 Telegram/Resources/icons/settings/premium/business/business_location.png create mode 100644 Telegram/Resources/icons/settings/premium/business/business_location@2x.png create mode 100644 Telegram/Resources/icons/settings/premium/business/business_location@3x.png create mode 100644 Telegram/Resources/icons/settings/premium/business/business_quick.png create mode 100644 Telegram/Resources/icons/settings/premium/business/business_quick@2x.png create mode 100644 Telegram/Resources/icons/settings/premium/business/business_quick@3x.png create mode 100644 Telegram/SourceFiles/settings/settings_business.cpp create mode 100644 Telegram/SourceFiles/settings/settings_business.h diff --git a/Telegram/CMakeLists.txt b/Telegram/CMakeLists.txt index 64409ea88..fbfbb55f2 100644 --- a/Telegram/CMakeLists.txt +++ b/Telegram/CMakeLists.txt @@ -1295,6 +1295,8 @@ PRIVATE settings/settings_advanced.h settings/settings_blocked_peers.cpp settings/settings_blocked_peers.h + settings/settings_business.cpp + settings/settings_business.h settings/settings_chat.cpp settings/settings_chat.h settings/settings_calls.cpp diff --git a/Telegram/Resources/art/business_logo.png b/Telegram/Resources/art/business_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..25c357e50b1bbc32bf61df5498738adeba3a4a12 GIT binary patch literal 48042 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 J);T3K0RTJ270Lhr literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/menu/shop@2x.png b/Telegram/Resources/icons/menu/shop@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..38625e754df56e214a38f600e25a66b63f7b8930 GIT binary patch literal 1239 zcmV;|1StE7P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NGK}keGR9Fe^SXnD>VH7^!F-3+l zXPzZ98A_tKFb_!*<-$L3L$2Jo^atdE3tUJp3~@n*BtxbQQOHz6gfer^Q>*iy)&BP0 z-#(jjI%V&RujhT%de{4WYrlK#wcl^wjLXP?k%2Fk0h9XwEh;K1DJcmJ4YjtmR`;}M zJwHF6pPz4UZ@<00wdgG4U}tAHG&J<%voFX>N=lMh?-!+*p^lD@`ucjf?d|O?EiJvh zy#a@WgrujZ1N8Ovy}Z0o5LZ{%yu3W%(b3VXt1BXNa&o-9yiQL~r>3Te@$vD=%E~gC zOqZ9JVPRo6H#fv<`V9;W#Cph1XJ@CCm6e#&*475{@bFMD0LjV8lt%!;x3;!|ggz(` zWK~radA78)2vQShXlTI9*Vk7M4-YMAE?@$Bp@-DTV+?$FiMg<()oP)0@u=LMD# z8^H@8BdD;j5N13e>+9>n4}b*WukY{g zb6yEgPENw)?(QBP9nF2ZySp)Tb919-lbe8L1YtkIAh};)ND$J4T`7qoJDi@Let&<5 zDLXrxJIu_?9335jsjaQ$JYlII{2O0iU)Yoct*oq=N0DVvX~++2rw3Dti;H

k-^*B`}p`6 zZ!XkRUI3k(oFXD3;Ip;0_3-e(qc}J?L`6k`+1}p1zrW`u7Z(>4WiXqYn~#r=!W14J z?(FP*c6NsHZFvJUHa5cPZ(n%a%F4=wL;<83A_MBs*w`3Sy12Ngebb1bDgaMLN=gcH zjQWm@s(4CGxMfIEb91xQ@UbxhA}oR{g^_M*CBJ{h|965u)Cb~S8y_E!R!-#a>FH^0 zZB665Ma<$rry#tBdV6~-Dk^v^f&2UWtE;O;2Pb$fK<6!MYHCtagH>UIgO=sZeRK*c zEiFZ?iHQl+H&kJ9VF(f?axh=dBBN6fDl9_dHFh zCC$i??hMgKjCn_ADWC;A1*G7zu8OyedV|>5SlMa1NeZaacqj_OmmXF{&Bf`5?&T#D z5sKF002ovPDHLkV1n!K BF#P}k literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/menu/shop@3x.png b/Telegram/Resources/icons/menu/shop@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..0da0b229c58d68318ac6e55a9db8291a10671d22 GIT binary patch literal 1770 zcmVPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91NT34%1ONa40RR91NB{r;0FW_8?*IS>R7pfZRA>e5TH8w%YZT8cGbuGM zsihAgD&~cXQc+AplTt)f1VstO2cOgzAzz|@z?bw%h(JOj346(sG$^$)FK9-lQQ<8y z6D%#wNl{ zyVs!8+G0LFKF^;&cTO;hR)&U#0s{lJowS?k<>fUnFraA9naJ_+@qmB;o!;x}u^TsT zR8>`x#*K}Q2M-<~f2*sjYy(3yE-ns_i1YgO>%V{hW)cCFm6gYj9|!#T^XGPbIsZ*!s=jVyx@87?Xk&z;gh_T&~ zSFT*)39z=d_Qi`AGA(H9n3xzsj*N`RsPqW86!C=Y>FFULA|gT@Y{SFD)z#I+;OgqC zvtqUb%goFqrN4gtYHDgCSo$9p7KY(OnAfjgOG!Fm%(TpT{``4{8E9!~nVXxV$D*Pl zJu{?@zz!cioSd9Y8lOIWiZRK?7{E|r7};f5KhV|H#mp%wDGW2PzP^6v&K-I@cI?=N z3m2HA2G|Jf;>C;m_wOg+hYuerYB_!SG~nb8|CW!Lr7%LEz@i zo7A=V4-E}f)Y9JGPCVbfeWS@uWaHIBaqm=xfOVI0D+l%yZVI45SLMzPI6<)V3ddS+*5Yb)0Z49$Z9 zP4aDRZHkJ(aP;U=A{lEil705<8S76?O=VaLa9}{%9F1CmWo2ctUOf$lRh#+k1wMTE zFf%hlQfh%=k$m~`CGlV=9XWDD!-`g5JkkI7@k2UsN!9T<1adopL7Ycpbab>@n{my3|(C+;Uto`}07B5`0iVvLTC%Cy_{$bq5F)aJ&!ckg2JL264% zN;LGV28IsCGEb6f4F)O)_U6qSHmPAxgT#S>M{P7NEG#^J{Fsy^B_&}qsisghuoEXv zune|>3`+rTZ*OMX<~W2}%(}dqX)M9q6xe^Tb*WbbZ|#~zf^<83_3G97`g*Y-XV0Ex zLFDqxnKS$-19;B`K!XkIdq_wKWKW(vnU^%nZ7<%weT!yO<1`hIBYad;6ij^i@&$eP=g%Jpn46lKqM|)|^vD6~45@%= z@&V51QJ^~A>k;0~JXT=4xjIU|{bwtty7N%Vf_*r=s7pvl2oDbzkJXq4aB{^?O?>BN zpAB_xQv$=Q$i~J-ETHOkwdYh9QbOJ}~Uc$qde>85tQkT%d-sACMsN;gv;1{|sXs9~iC? z$Q!(`@95}I9AiL&1P0<{5yN4Kf{qUiZzISI7eurwV_*?AP6K$y2WG$tGeoSw%*d*l zI<1PCnO!qMR?ZW@oeobyW;sBajyUIzU^g8B{jS&S+cF z6&P>oaL~%n&)3#y1{FqOnl!UB4lsn11-7m9!=X^^j)yGa!yw|6-kvBr0S4lPh#~_a zVGc&O%x`Y;R}2~=AlZIlO7eKEcj?k4f?=bxv$Maye`#q+)Lv6lL)Uh=0>|Bw$iNtk zE_|hhM_g#s)zvYc0o*m8J9jQUJsqbWLgFId!EfF1!OZ03B&Tgh05~9ix5HU54g?1W zqe?px5{$w$95C*^wj@rzrKP2~;m4fooCskE=3o@2wSALO_4b%d4By$|nnLj_5?r5h zOUR_u9+4wl3yD;Gy@knL=fWk5TNo;M1& literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/business/business_away.png b/Telegram/Resources/icons/settings/premium/business/business_away.png new file mode 100644 index 0000000000000000000000000000000000000000..b6fe3bedefc44399c2ce6273a838cf37d10fb26e GIT binary patch literal 662 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDq2jfr-J>#WBP} z@NJ0giH(UO-#-8HRr`6?-zR0_rogbJI&7y>%x28gknVirl@!9peM(`84_C8OP>`A8 z$9>c1ZGXOZ|MS`v`G0@CdpYNI%yX;fme2Re^F5z$d*^%nvWpo$YLk7`tY!GRk3Oog z+yC5nu~4UqT)+SF%l?lXmfpaoBqDcI_2*Ba-S5l*?Ti}r=Q*{;URvKa@4(wK zYSZVu!@OJOha%NgKab*-G{H9e&lgE+2anKm>!G@O6_xxz+aVL-<+Qz_nMTs6Dz`WaizW?zgEdwzHm|y2+K_J-Jx6`)-?t zo15~Ki9TwPR!l7n&0ahC+L;6Q#`QlJ>UGl;h+e$BPh}ZOCMe|0^;;gc zI@e5k*|U!o2EGkPlLS{M7}VeKP&srPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NG5J^NqR9Fe^SW75vQ5bd(dFD}v zJZ}g&3?vju3KVZ`!26l!z$10ZJ3{2%&s|y8 zU3;(nGPr}g*TDJLzrO#m|NTGK=Hz59GXiD={<8>JzVp06K|!ghsrZZK@9%$iclYzp zT3=s3I5_x@W__|TF)>X|O)D!a@9*!w1ncndu)V!KJw08YYQ1Q_olhDvmRl7n!Pfw3w+akfGr6p%)XOT&z zK9rW0Ha|a)bf&`3&(AY6GcPYMl;h>)m6@68=H^B@T8OHus?N?%Eyyp7)oR6~a8H?( zl=Ox8q~H(-Q{7%&UD<55PX*e3v$C={y{P$+kPxY~i;D{)$AMM1wY9ZURZ5($t}dz4 zjg1X-qq@4fii!#WB5%O2uC699Utizd-Ccq#FE1Bq@9yrF)mBhYAQIvE zm_D*9!0heqC1_;*#KZ)Jq52{sB2aE*v4uT8K2BjQQBzaH8y4-0ii%iCN}~(7y1Ejn z=H_O~=ZO3JdpafXazzucrKLsW0M9QeDdB8j3%z)i6dD#5hJ=ZZj&5sfW5KwSPf+gz>(*y2^UM(K=q4-EQZE$+oq% zH8?o+g*z@yqSuG08ot+){N5X@?r+_3!QBhGe z%<4p6U!ST*7Jv&idJ@r_o0}_2WGb?}ye#X4RhA3p$jFH3NS0q;U%$7vM~*P6;1lW# ztGKwB@>#**;bC^GiIxsm`g~GC;o@9cTFT*XZf*hs0yH_ng7Wh6I7JHE(a}-a0gfx) z;NT!9=x{h#LoEGu*I~JoM%S;btfX6I0y7SuWgG@KU~g}4mWi*nl#~=C8Ozj4dw6(2 zo_oIUY|qZl*zPLzLzvVA`t!z>I(yfqxu<-?g5BnfE563;+NC07*qoM6N<$ Eg1NaTLjV8( literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/business/business_away@3x.png b/Telegram/Resources/icons/settings/premium/business/business_away@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..59afa2748fc356339d4b1ae9a59cfd4f33ff00f7 GIT binary patch literal 1806 zcmV+p2l4ocP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91NT34%1ONa40RR91NB{r;0FW_8?*IS>cu7P-RA>e5T3bj}T@cP&c}24f zNl`%)F;EmGG}8w!%xhZx|5xX4wc3}p*V$(u?P2eiGkexIvu0-RHEY)FvuBTf=@HN)phrNDfF1!o z0(u1W2$&cF3lrrT;s*{Kh>wpC4i5J9_4V@da&mHVbaedw{rl?b>hkjP^z`(bH*cOi zdGhe#!}axbhMvD-$il)RJUqOttgOGk|J%23|8iU#8yg)R9YsY&{{H@dg%1KF;8J>e z`t#?{Ied|Yz{7}$2!ZBZyM;>`85t(JMEly=*%=ubxoiFyCie97?CtHP&C-gludjD- zaM&I9PMtdS;ll^5JQ3@8`SN98VBn7WW@TknQBi>uC$>gg&f3~qUS8hL`Bqm~r>z5Q zZH0w}JK@{4YuDIzXg-Ra11Z(|CwqbyIX~7&JIC$_NRunE&B=ix>($ezQty_2@!1HY_ZR#-sQ;cI=pe^YP=y$B!RlQ=$QcM&b<( z4dn>|Od1#%AcATLTU%R%pK~Pu3Crkdva_>^?9|kho0}UwDyESbYHMqWh#Y~Vw^-IV z4h)skF6IlCVn|2`UQq(W$(m>Gef#!(`t*rNNfKLITkPDZoIH4PgTdU&%F2d@24Xr^ zLThWQy}do*VEGZ6L0~_`vtaRkq;oQ7j+HmkL5J*Dwa~3Eew~2{~w3N~G&6_ugE;(XsY|Po&nO0p>QzHi!@L#-m z0ViqM`}gk)Fp{@fSy{A{fL6|m^t&VwHr%2j!DfJt8X3g~fXDLS!2@uRdyXGJj-8N< z(gczu3NAb!!n}0pQf6i*xn&T7a4?Y4L*?b=k^v*k8#iu9Oa9^_6QYYq@PzpK^(zX$ zU#K6y=r!=49*}QoSpoffRR{*iEy_GXOA_dNO7aO4eUW?j?vYzUT)upnE@%Dx{E&O- zg-Vc;#OKeSCHV%XvSah}^9*?mojiGx4Z!H(!-oZ!#>PghUcy9^7%9}KL%__;3=vmD zptDO}9yy|_stQePI?)jtjc!zA$cMD-vuDrfrHk4H2Q3<)NN;a%v-dG&SFNqB6}L-8 zJ7~b-;-Zg_4?XdfD_3X$4?R3QOlwd{H#If!OvZyj!ibHHrR_*gPUcS-WQyz8uhU9Y z(r3<`AsS62a15u7z=sHRuLHIaT926K`iz89U~X;>rMFn#C=PO9LP7#95)%`Hk4!WN zg(8wZr2tZ8d&V@y|ET+EO)ZU{XOe8^%<#xsOh znsZhh{^b--OibXZa_ZrN;S?-487F^eXo%A$M!AS&!(%Sj8Z#)uO2htxN5`XA4)gTs zQ}q2&i^u`6l9Q5>a&vPf0XRdjkMojJ%FGidPGD!`d_J1PR#sL}b}3t_4sr3~Ma?bd zQHa__kWtmyFDr%e2gh3;Q#8b&?Irhe${K3y0IF~P-i}tj@$_Vkbwr5Aw^Oam<X}aAE4fxAQTwI)a-4JV6>^x%|z+ZGwu%mN|rW(TmdI%>p z_=B@1+Q#BZRdaYtDl`aC>B&tqIy!p$_U$`&?$94K@ofPIkf5L-lnZDapsRt4{QK?g z+qZ^)zjbwW;YcQ@+3bAut9yES-oJlOf{jKZ{*i|-DN#{TW}kisCO`ue-A_SNdI#p! wr_dvyM?jB&9sxZ9dIaE(pj8C^1Geu?%eAi(tN;K207*qoM6N<$f(2+yzyJUM literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/business/business_chatbots.png b/Telegram/Resources/icons/settings/premium/business/business_chatbots.png new file mode 100644 index 0000000000000000000000000000000000000000..aaa60e6a4eed7197178cb12965176fcb66249618 GIT binary patch literal 499 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/business/business_hours.png b/Telegram/Resources/icons/settings/premium/business/business_hours.png new file mode 100644 index 0000000000000000000000000000000000000000..c6f0d03e3f6ad18cfe6f5563bcc97722fa6c70c9 GIT binary patch literal 426 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgfOvKa0F~maf zZHOVCi-U+L>)g1-6Eg}pdMEE_;NHR1x_d>5RiIUa-@@Aqgnnsy~35ENLk zcY|X1miM{0%VO0hOo*)&iBgz<;`1H@9#-WOEp;!iSa=G>K9@+Do;vgS%u@}D%`+y& zM9LgDDeq-9On+i=uGH`>SJJtTR}$NFvL)I~d=343LKuAJUI@{dy{s@+eCoE`@X(_y z0`qT)x*jYMS@U{U>deepfg*--&2?EKER8jP*A&Sd&z#k_wC3-kl{OR3bTA!tIP`U! vdQnB<;q~b(ol|}-yjXnigY?2OemC}eyzi&<1@t6!fx^kt)z4*}Q$iB}wRxH$ literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/business/business_hours@2x.png b/Telegram/Resources/icons/settings/premium/business/business_hours@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ce098492028837a3ab6cd4d9b7fb8cd214094184 GIT binary patch literal 765 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/business/business_location@2x.png b/Telegram/Resources/icons/settings/premium/business/business_location@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..49b7ee3c819868aa70dcb36b4827bb6650a46f42 GIT binary patch literal 845 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1SD@Hi2dnN)q+R+HK=tb&);b124;b$15gb`x+D!Z%O7}IrM-(tf_aw zU0+p>sF)T9miK=zC`cclX=}XXbe?JPx$ni#)>N07&g?n;qTym={58hSpDN$KdzZBF z#^cAyDngtrOcx^croVsxey-p0n>pv67pJCXCYea(ZomD%MVz6*)BCj0ny~DZA-CRt zKa{j@QUfDT*BWlo_eDE*-PKzvqRS>Cuu`sM&e5dItx-|xzoc9)yo^&xSs1V&{D9Ku zpEf7kICkybd-rYG8eUr_E0>P4UmK#fBzqHEL}ILzc~4zt4QV(i2an1e^-w=FVX?7Y_;vXY?!BU$j%k+hsyI z!=u<_)BUb$lTW%fpFe;8_3PL97Y?&IF3}58IQrFQNJH2G4~SME<$d!r6z>dx4|XUg%%mKU#z&p!Js>Ho(oEX|H#;s?7cSQL*wTB_WA zv?={UhDn4aOJ#+}#)_97d*hxK8-9IW@bZwt z(O2H?@7}*Jo!i0S;dwh=#b6$TdWr)|B zHS^wnt%_1VB_&d7ADgBj61D#N6stao2LIxi@EAdX{^KuMRfRZRr8T2AMl8AV<;xcp z)zy5*wtqf-x_gJ(9(Vuyw_f>`JiB@|bpQS5S50L2a?PY;-=;{`|bW zx?|2^tohB`x0~nsHXm&G{#Q$TUB~v@Z?9&3egCkkuCB~Nrpt-#EI3u&Zv5}P>DU3z SuX4{oN!ioY&t;ucLK6V5zj>+v literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/business/business_location@3x.png b/Telegram/Resources/icons/settings/premium/business/business_location@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a442c069d4bf06da0b2e4019908ac8c19309962f GIT binary patch literal 1226 zcmV;*1U37KP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91NT34%1ONa40RR91NB{r;0FW_8?*ISe5TFWbKQ5bi)%4?z& z*CVd-8X%^|%4=XMCWbOK6aES%k32f^2gp@sG7yR6Ro+T2MP^9i{yO`1TCpGB_pP)VgB_u4xp#cs9&wgR>SwgR>SwgR>SiK;*(RHH~FQdwD9SXlTow!!O9 zY`eL+IX*uA`1lCb-Mn~KR#shnyKWc)05E{fCoryZUR zPJlrH(RdhRg1x=H*Voss=>t1K1l?E^Q$ncs+}vDX`al3gzR|8LDk|FC+zbp&1V9Rc zrYbJi$;->TxVRvOCc+>HS$QUXW_o)1>gp;nE(-=(i0da5DojjFu;Q}75EsVMq_wrR zv4RS~u+R+2rl+Q+?(Xgiva%?!fDt>K4xy)~hZRu_?(Xi^$;sxPo}P-cvWPHZhl>#; zH^B`J4cpt>bicj5y@iE^qoX5GYHDh_y1Hs>Yw7gH#>SnU9Xei)92y!TR{iz$b#QPn zEiFwo!%uW#h$sR(l^$YyV`GDuskOD$D+h*%BCzukG1;G+oBRI$PRTSmIq7c<07VCO zF!h%*FpATIk_JawU>X332PEs9bSBCEmnbMGpp<8Qef{zA(H{u_VE!0qlxV6-g*CCO zt1H#Ut4)M`qlsl^W_nFV?I*$#F)^HAYBH~OU0t2mklJ5gU$6f3Y75{1h5 zYGZM#sj10p)aeJHqN2hdCpzg0u!AW#rv$&UvOKHRitq354>6pk z^yuiQnw8!j8ynNK4wsHMDT|AX^!Yf*rKP1$Z)CzvDO1nR&fePEqR$Pl+H!JoWL}A8 zVd0ke@duW;@oik9^Xd5EHZpMC=JN6~Y4`6sb1Nw+IXOA;Iwo=7R9af9qn}JJKEHHb zLc~{?#l^+ROs4ORXZufIgzWF{W5W8%{tAg$Va27qrKJU{Xjst2zFJ;h#?!HXEIVo| oU@KrNU@KrNU@KrN@IO`HFH9dX^3*z>CIA2c07*qoM6N<$f?j<f}oBS0#jY|g*x4p1p_rywY1i=bb4e2 zREf&%p1jwn@8PYr=GCkI|4Dyl{(N3>k-go&H;?Ys&pep0AwtJ%Y0>7JJ;xtE{`h0x zyfjfRR|^?AzV`WNn7sDJeg9drB}(U8h0W)ma})z2HAE8nlir%&fBjXCkNws!k?m2s zGkw%f1+BjN`s=KcQY+cXCqs0^I_IBFb9G!9(iP&oBSNRdYHo;@>YC3#bGF}(-(b-f ztvCI=LIGQI;{mOyUOA3BV$K5nUhA(*_qr*zWcIoxZ@-;rCc>pU`DB8D#zYUM#)b#G z@8;?3;GTZE_42H<&ul-g$T5?iw)J+d&%JV%<2~!{zh8ef>-S%|xpC{Kd#F^*Yp-3n zGiq&seaFd^rppl*-+$j4r5m6%mFxB4#kDVvD+qONC~azsX6CvRwKFDd^M?x`eI^zN z7wxREn!D-hg57u5-ON!F`LOt+#@qDd<(DgW#&Ep0WYLR}zwNR0@WYC{pUXO@geCyA@A|<2 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/business/business_quick@2x.png b/Telegram/Resources/icons/settings/premium/business/business_quick@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3f4c1852e08c328ed31c591c3e5e0e49d2d886d0 GIT binary patch literal 1083 zcmV-B1jPG^P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NFrAb6VR9Fe^SW759Q5<%;ByYv_ z2n+Jwpj&KgT-{QV^3FzBTHY*#4P_$>3n?pEcx-Gf=qknaDEAf$kvu{qkCM0lS5v3c zoHOUl%>8fv{byFc`Of$Ie&3v#^O}$l>#};l>Vf~P2W-JSZ(3Sfd3kwiYHCVKN>WnN z)6>(<&CTuYZ6FXhIywqQ*;sBtLBYt#h~Mx3)xJ(oPbVfODl03ENgHJs6&20S&VGM? zYdcZ5tgfzBRaF@+BBuqn^a&!wfMqGHmvn3$OD?QK@tG=gE6lanK@t4Wxfo6}Q!YilbzJ3Bu= ze`8}q%HQAL4-XI5EGcMkxm;3ph0xK_q3FcM#;&igOS5`=dj)m*O?JEe;NUDh=s#bVv zZEYpeQcrt(dxR_x@XIQ8Q;Fc;UHvrFgiM_RhWyzO;b}7(G|Oa z!t(MmA?pg9PA9i87sTVzlZtryQ54J!*u}*~Zh01@7gs%QPEJlDBO`Tn3{A?-&Bd5v z%d<#lXQz@VT`rW|+S*#Wkb&6a@v!AtWOsKrFE0;g62U@2vKAH=3^-t^m_>+I@WI;J znwghH+lq*Yczt~h-U<|Ow#4Y8#m&UU#l?Tc&CJY9bab>C2dbQ&o}M5LJv=;gb#F-*t9!^8M0D=I4RzX7L!pPwI^pu}fq zXOokY_4V~8-jV2cOjJ}9W-$D1f!XWpYwWTy;;_ci-m%#Q0Y?ZdOxTX$Ukr|d2xyL> zSY!zM7%WdX{~jJ5s(cu#VUevKuzJAifq$w8{s03|0&}BmY7GDY002ovPDHLkV1mSA B?neLs literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/business/business_quick@3x.png b/Telegram/Resources/icons/settings/premium/business/business_quick@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..d927c704fc527ccf91ba70feaa026bb247ed6bac GIT binary patch literal 1520 zcmVPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91NT34%1ONa40RR91NB{r;0FW_8?*IS=T1iAfRA>e5T3IMIZ5aOWTl;?$ zMfP3xED5EQP$Fdsr5reRfCHq&ffFeXwagR=YH;)U%#|Vi+~mZEdp8uvhT`Z0N-+b7FFGGCn^3$M`UgJv}`a78Yb8mn7cN(P3p}^)vJ`Gc&OaNP^wa^eaR+{l<4H-gaQzw z5)u-^#@p4^b#HHv!W4FJ)`)72+S*zQD2&SW^)(L%xFKDnFqoa4%`>H_>*we9`ua+N zgH=Hu%tPSj=0?Ho`1lz24$l;Qx3ja8g-F*x7H?)|#zO#Z2L}go4XU>KJ32aIQIhLk zC_gkbB;@Aq?k<-bqgr+++HAP25r`Ev0 zfRLMqhli{^prN6Gh6z{4($Z3u`;berzrSB0x3#r3E=ZboOiT^W6b8`ZpzX)^8R6sz0s0<^3(#6}`n?zw$5L#MV^7HcnkyY8**}(~VVq(I{$%!4* z*}&p~9cXcJQRl3r!K$h%(GV^zEum;5$(#fs6n`!+FGZcEq@)mxi7%RX#t8b%R8CIL z^768%m_z|ouTa|&6(*mr#fb@@a-PeZn;R57c!LVNb8~Z|7RbQFiJ=Tg_F-*pjoY0p zBX>3`DoRx4{{EgIBTfu|2tl8jYHMo?3kx$aP^bLr>+4%rS10OJ3NVrpRBS|_V@3e= z2`r4#uh!O9lU1xC}1V=$cG0+g&Ra} zk}68FySp28E*>jyZ*PgLU>{X+o;pnziJ2%?=>k1HJqlUDS8;JM4HKSDY;3G_++@k# z-d-Uq?8rDik`=kLcx8j6nFo@li~Qy6?2K!guHDzyr<@gB4-XI1(9o%aRDg~Qt2H`0 zD%?_~XT7W)G?J2%bb_QAM5K}FaIMR2J3Bk`9MiGFa>}!#w40HUA(sp*FWgM!o-7$t zC@tc+t(1vS9|ai}tK3F-csOg2jukxOsKFXhvtegvN4=-voltUevc0{1dV0F_{fZmD znVA`3El4$bK|w)xcXwQW-_ync0_AblXy`PAz^h&bAx8(h94f~;!KgWiZSCsniVQ`? zS)8T=0|V70pwCulXsC*~$)@n4-NC^@9}<pZri1UN*b^~cUY3@Y;@yhqe~Ws3b8|DcY;rA)0;-Ji3vQ3; z>FLPGNUj@f)+p%K*Vm&o%^hdj2tQsyp*Vxze|}%Quiq{%E`(aDjL0B{YzPUyg@wiW z`T6GNCcenS&4Z&6YB;Ju`AH*4)xI!W`$=Y+Z!H2^1hfcf5zr!_ML>&y7J>g!1pWib W|Bg(kR?{;80000Ky} literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/status.png b/Telegram/Resources/icons/settings/premium/status.png index fe154114576f3216e631ab8122122ec0f0bcce3f..712c91ba07f48f5492bc55bf502687f4cb8ae3d6 100644 GIT binary patch delta 449 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 IM6N<$f|eEhF8}}l delta 1053 zcmV+&1mgS942}tqfPVw{NklFKfd*? zv;Ot(?dL~7Qh*d71xNu>fD|AFNC8rS6d(mi0aAbz_>UE^nSZ!;o6VM%mKGTqsmFMcvdwXAUzxVg|{{H@efB>to*WfWbJ1e&+w^dtPn?^vZOx@nz zx+%+zu*34~?eeDHwcOa)Fd8sCJlv>@3HFB0m}^IehKA&c8m@|AVPUzsxzW+lGC4r# z`1p8tcNeFhw|`fwiWwOhqobq#{{BjrlamwVy}7wjf?gXJ6%}1wUCEsYx7Fq4Wkp4W zB#GGA*rTH(xAX7O{r!DrW~O8W!)A87{p{?FNh$gG`T1E~T&$ZiC@5%gagm9M-7YID z)AjY-0H=aUY3OllYfCrx`1m*<)8TOFI{uLXiW0=*6Msu0@WuJmV9?sy%7+>l7|?L> z+Eiy}C!bpq!NNj9Le!{KR#xKg%7mJknen*WFkBU@tE z2kh?dW`8KU9-Eq)goJSFHa9mJmzS3p+$%zRbHIj%28N>Rv9GUBNC?|IH8sV%)YjGt z?acvk@PsvUa&i(Eppa8fPY=JUuC6Yju~E=)@en4+$;rX#=bO}(l@;8}&(F`iS4~X~ zZY>5sJUnb}ZpLaE{QCMD*WlaR8-x4yF*!N;;(y|T*B-CE=#PZCBO)SD9(WfGWM^k5 zAt6B+%_m?~RMhtNHcto|qf=2!Sy))eyXYdr!^3I;y^IG22F}gR@r0h9p45uFi$QjF zHt(g2EH5v6c>!wS#>U2YHfSKKs;bmnzVW4{CEiyX>Fw?PcK6|+qoYH}qot)qCTo0r z{D1WHw6Ku!VR65sx@xzYOi~Z4VqIO`$jAs23y6QBudlDXuGj(QwO2{b>f@}eEHtM4s@B)nnJ(7qD^c>pSKHImQ+`$Wun`v*r?fPE zZ0y@=dwY9QQW8%ZuOy9)jXVwnZ3kxO=YQvgvsMB3_xJhjl0gOs2d%OOArE~0l39k( zCND2f7}H0fxbId=wzjsWHl>TB+t9T!%>b>sA+7IuTVU6nR>mME-c;4E`&z~_* zIuCS1B_$=Psi|sjkV>`wj;g3+Ok+}j6d(mi0aAbzAO%PPQh*d71xNu>fE4%#6c+de XLRu#M4xOR800000NkvXXu0mjfJ3JUC diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index ea6c5f2e8..8bded7e02 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -2056,6 +2056,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_premium_summary_about_animated_userpics" = "Video avatars animated in chat lists and chats to allow for additional self-expression."; "lng_premium_summary_subtitle_translation" = "Real-Time Translation"; "lng_premium_summary_about_translation" = "Real-time translation of channels and chats into other languages."; +"lng_premium_summary_subtitle_business" = "Telegram Business"; +"lng_premium_summary_about_business" = "Upgrade your account with business features such as location, opening hours and quick replies."; "lng_premium_summary_bottom_subtitle" = "About Telegram Premium"; "lng_premium_summary_bottom_about" = "While the free version of Telegram already gives its users more than any other messaging application, **Telegram Premium** pushes its capabilities even further.\n\n**Telegram Premium** is a paid option, because most Premium Features require additional expenses from Telegram to third parties such as data center providers and server manufacturers. Contributions from **Telegram Premium** users allow us to cover such costs and also help Telegram stay free for everyone."; "lng_premium_summary_button" = "Subscribe for {cost} per month"; @@ -2154,6 +2156,22 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_premium_gifts_terms" = "By gifting Telegram Premium, you agree to the Telegram {link} and {policy}."; "lng_premium_gifts_terms_policy" = "Privacy Policy"; +"lng_business_title" = "Telegram Business"; +"lng_business_about" = "Turn your account to a business page with these additional features."; +"lng_business_unlocked" = "You have now unlocked these additional business features."; +"lng_business_subtitle_location" = "Location"; +"lng_business_about_location" = "Display the location of your business on your account."; +"lng_business_subtitle_opening_hours" = "Opening Hours"; +"lng_business_about_opening_hours" = "Show to your customers when you are open for business."; +"lng_business_subtitle_quick_replies" = "Quick Replies"; +"lng_business_about_quick_replies" = "Set up shortcuts up to 20 messages each to respond to customers faster."; +"lng_business_subtitle_greeting_messages" = "Greeting Messages"; +"lng_business_about_greeting_messages" = "Create greetings that will be automatically sent to new customers."; +"lng_business_subtitle_away_messages" = "Away Messages"; +"lng_business_about_away_messages" = "Define messages that are automatically sent when you are off."; +"lng_business_subtitle_chatbots" = "Chatbots"; +"lng_business_about_chatbots" = "Add any third party chatbots that will process customer interactions."; + "lng_boost_channel_button" = "Boost Channel"; "lng_boost_group_button" = "Boost Group"; "lng_boost_again_button" = "Boost Again"; diff --git a/Telegram/Resources/qrc/telegram/telegram.qrc b/Telegram/Resources/qrc/telegram/telegram.qrc index ccf1a1d7a..ae6edc957 100644 --- a/Telegram/Resources/qrc/telegram/telegram.qrc +++ b/Telegram/Resources/qrc/telegram/telegram.qrc @@ -3,6 +3,7 @@ ../../art/background.tgv ../../art/bg_thumbnail.png ../../art/bg_initial.jpg + ../../art/business_logo.png ../../art/logo_256.png ../../art/logo_256_no_margin.png ../../art/themeimage.jpg diff --git a/Telegram/SourceFiles/boxes/premium_preview_box.cpp b/Telegram/SourceFiles/boxes/premium_preview_box.cpp index 93df20cfa..c3ce95189 100644 --- a/Telegram/SourceFiles/boxes/premium_preview_box.cpp +++ b/Telegram/SourceFiles/boxes/premium_preview_box.cpp @@ -33,6 +33,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/boxes/confirm_box.h" #include "ui/painter.h" #include "ui/vertical_list.h" +#include "settings/settings_business.h" #include "settings/settings_premium.h" #include "lottie/lottie_single_player.h" #include "history/view/media/history_view_sticker.h" @@ -128,6 +129,8 @@ void PreloadSticker(const std::shared_ptr &media) { return tr::lng_premium_summary_subtitle_animated_userpics(); case PremiumPreview::RealTimeTranslation: return tr::lng_premium_summary_subtitle_translation(); + case PremiumPreview::Business: + return tr::lng_premium_summary_subtitle_business(); } Unexpected("PremiumPreview in SectionTitle."); } @@ -170,6 +173,8 @@ void PreloadSticker(const std::shared_ptr &media) { return tr::lng_premium_summary_about_animated_userpics(); case PremiumPreview::RealTimeTranslation: return tr::lng_premium_summary_about_translation(); + case PremiumPreview::Business: + return tr::lng_premium_summary_about_business(); } Unexpected("PremiumPreview in SectionTitle."); } @@ -1219,6 +1224,13 @@ void Show( DecorateListPromoBox(box, show, descriptor); })); return; + } else if (descriptor.section == PremiumPreview::Business) { + const auto window = show->resolveWindow( + ChatHelpers::WindowUsage::PremiumPromo); + if (window) { + Settings::ShowBusiness(window); + } + return; } auto &list = Preloads(); for (auto i = begin(list); i != end(list);) { diff --git a/Telegram/SourceFiles/boxes/premium_preview_box.h b/Telegram/SourceFiles/boxes/premium_preview_box.h index b7fb7a40e..9fc4da279 100644 --- a/Telegram/SourceFiles/boxes/premium_preview_box.h +++ b/Telegram/SourceFiles/boxes/premium_preview_box.h @@ -64,6 +64,7 @@ enum class PremiumPreview { TagsForMessages, LastSeen, MessagePrivacy, + Business, kCount, }; diff --git a/Telegram/SourceFiles/mtproto/scheme/api.tl b/Telegram/SourceFiles/mtproto/scheme/api.tl index 1f17c1a7d..4b453c9b8 100644 --- a/Telegram/SourceFiles/mtproto/scheme/api.tl +++ b/Telegram/SourceFiles/mtproto/scheme/api.tl @@ -402,6 +402,7 @@ updateBotMessageReactions#9cb7759 peer:Peer msg_id:int date:int reactions:Vector updateSavedDialogPinned#aeaf9e74 flags:# pinned:flags.0?true peer:DialogPeer = Update; updatePinnedSavedDialogs#686c85a6 flags:# order:flags.0?Vector = Update; updateSavedReactionTags#39c67432 = Update; +updateSmsJob#f16269d4 job_id:string = Update; updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State; @@ -1653,6 +1654,12 @@ messages.savedReactionTags#3259950a tags:Vector hash:long = me outboxReadDate#3bb842ac date:int = OutboxReadDate; +smsjobs.eligibleToJoin#dc8b44cf terms_url:string monthly_sent_sms:int = smsjobs.EligibilityToJoin; + +smsjobs.status#2aee9191 flags:# allow_international:flags.0?true recent_sent:int recent_since:int recent_remains:int total_sent:int total_since:int last_gift_slug:flags.1?string terms_url:string = smsjobs.Status; + +smsJob#e6a1eeb8 job_id:string phone_number:string text:string = SmsJob; + ---functions--- invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X; @@ -2252,4 +2259,12 @@ premium.applyBoost#6b7da746 flags:# slots:flags.0?Vector peer:InputPeer = p premium.getBoostsStatus#42f1f61 peer:InputPeer = premium.BoostsStatus; premium.getUserBoosts#39854d1f peer:InputPeer user_id:InputUser = premium.BoostsList; -// LAYER 174 +smsjobs.isEligibleToJoin#edc39d0 = smsjobs.EligibilityToJoin; +smsjobs.join#a74ece2d = Bool; +smsjobs.leave#9898ad73 = Bool; +smsjobs.updateSettings#93fa0bf flags:# allow_international:flags.0?true = Bool; +smsjobs.getStatus#10a698e8 = smsjobs.Status; +smsjobs.getSmsJob#778d902f job_id:string = SmsJob; +smsjobs.finishJob#4f1ebf24 flags:# job_id:string error:flags.0?string = Bool; + +// LAYER 175 diff --git a/Telegram/SourceFiles/settings/settings.style b/Telegram/SourceFiles/settings/settings.style index 9716a383e..eb6bcb360 100644 --- a/Telegram/SourceFiles/settings/settings.style +++ b/Telegram/SourceFiles/settings/settings.style @@ -94,6 +94,7 @@ settingsPremiumIconTranslations: icon {{ "settings/premium/translations", settin settingsPremiumIconTags: icon {{ "settings/premium/tags", settingsIconFg }}; settingsPremiumIconLastSeen: icon {{ "settings/premium/lastseen", settingsIconFg }}; settingsPremiumIconPrivacy: icon {{ "settings/premium/privacy", settingsIconFg }}; +settingsPremiumIconBusiness: icon {{ "settings/premium/privacy", settingsIconFg }}; settingsStoriesIconOrder: icon {{ "settings/premium/stories_order", premiumButtonBg1 }}; settingsStoriesIconStealth: icon {{ "menu/stealth", premiumButtonBg1 }}; @@ -103,6 +104,13 @@ settingsStoriesIconDownload: icon {{ "menu/download", premiumButtonBg1 }}; settingsStoriesIconCaption: icon {{ "settings/premium/stories_caption", premiumButtonBg1 }}; settingsStoriesIconLinks: icon {{ "menu/links_profile", premiumButtonBg1 }}; +settingsBusinessIconLocation: icon {{ "settings/premium/business/business_location", settingsIconFg }}; +settingsBusinessIconHours: icon {{ "settings/premium/business/business_hours", settingsIconFg }}; +settingsBusinessIconReplies: icon {{ "settings/premium/business/business_quick", settingsIconFg }}; +settingsBusinessIconGreeting: icon {{ "settings/premium/status", settingsIconFg }}; +settingsBusinessIconAway: icon {{ "settings/premium/business/business_away", settingsIconFg }}; +settingsBusinessIconChatbots: icon {{ "settings/premium/business/business_chatbots", settingsIconFg }}; + settingsPremiumNewBadge: FlatLabel(defaultFlatLabel) { style: TextStyle(semiboldTextStyle) { font: font(10px semibold); diff --git a/Telegram/SourceFiles/settings/settings_business.cpp b/Telegram/SourceFiles/settings/settings_business.cpp new file mode 100644 index 000000000..23a4d8914 --- /dev/null +++ b/Telegram/SourceFiles/settings/settings_business.cpp @@ -0,0 +1,568 @@ +/* +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 "settings/settings_business.h" + +#include "boxes/premium_preview_box.h" +#include "core/click_handler_types.h" +#include "data/data_peer_values.h" // AmPremiumValue. +#include "info/info_wrap_widget.h" // Info::Wrap. +#include "info/settings/info_settings_widget.h" // SectionCustomTopBarData. +#include "lang/lang_keys.h" +#include "main/main_session.h" +#include "settings/settings_common_session.h" +#include "settings/settings_premium.h" +#include "ui/effects/gradient.h" +#include "ui/effects/premium_graphics.h" +#include "ui/effects/premium_top_bar.h" +#include "ui/layers/generic_box.h" +#include "ui/text/text_utilities.h" +#include "ui/widgets/checkbox.h" // Ui::RadiobuttonGroup. +#include "ui/widgets/gradient_round_button.h" +#include "ui/wrap/fade_wrap.h" +#include "ui/wrap/slide_wrap.h" +#include "ui/wrap/vertical_layout.h" +#include "ui/vertical_list.h" +#include "window/window_session_controller.h" +#include "apiwrap.h" +#include "api/api_premium.h" +#include "styles/style_premium.h" +#include "styles/style_info.h" +#include "styles/style_layers.h" +#include "styles/style_settings.h" + +namespace Settings { +namespace { + +struct Entry { + const style::icon *icon; + rpl::producer title; + rpl::producer description; + BusinessFeature feature = BusinessFeature::Location; +}; + +using Order = std::vector; + +[[nodiscard]] Order FallbackOrder() { + return Order{ + u"location"_q, + u"opening_hours"_q, + u"quick_replies"_q, + u"greeting_messages"_q, + u"away_messages"_q, + u"chatbots"_q, + }; +} + +[[nodiscard]] base::flat_map EntryMap() { + return base::flat_map{ + { + u"location"_q, + Entry{ + &st::settingsBusinessIconLocation, + tr::lng_business_subtitle_location(), + tr::lng_business_about_location(), + BusinessFeature::Location, + }, + }, + { + u"opening_hours"_q, + Entry{ + &st::settingsBusinessIconHours, + tr::lng_business_subtitle_opening_hours(), + tr::lng_business_about_opening_hours(), + BusinessFeature::OpeningHours, + }, + }, + { + u"quick_replies"_q, + Entry{ + &st::settingsBusinessIconReplies, + tr::lng_business_subtitle_quick_replies(), + tr::lng_business_about_quick_replies(), + BusinessFeature::QuickReplies, + }, + }, + { + u"greeting_messages"_q, + Entry{ + &st::settingsBusinessIconGreeting, + tr::lng_business_subtitle_greeting_messages(), + tr::lng_business_about_greeting_messages(), + BusinessFeature::GreetingMessages, + }, + }, + { + u"away_messages"_q, + Entry{ + &st::settingsBusinessIconAway, + tr::lng_business_subtitle_away_messages(), + tr::lng_business_about_away_messages(), + BusinessFeature::AwayMessages, + }, + }, + { + u"chatbots"_q, + Entry{ + &st::settingsBusinessIconChatbots, + tr::lng_business_subtitle_chatbots(), + tr::lng_business_about_chatbots(), + BusinessFeature::Chatbots, + }, + }, + }; +} + +void AddBusinessSummary( + not_null content, + not_null controller, + Fn buttonCallback) { + const auto &stDefault = st::settingsButton; + const auto &stLabel = st::defaultFlatLabel; + const auto iconSize = st::settingsPremiumIconDouble.size(); + const auto &titlePadding = st::settingsPremiumRowTitlePadding; + const auto &descriptionPadding = st::settingsPremiumRowAboutPadding; + + auto entryMap = EntryMap(); + auto iconContainers = std::vector(); + iconContainers.reserve(int(entryMap.size())); + + const auto addRow = [&](Entry &entry) { + const auto labelAscent = stLabel.style.font->ascent; + const auto button = Ui::CreateChild( + content.get(), + rpl::single(QString())); + + const auto label = content->add( + object_ptr( + content, + std::move(entry.title) | rpl::map(Ui::Text::Bold), + stLabel), + titlePadding); + label->setAttribute(Qt::WA_TransparentForMouseEvents); + const auto description = content->add( + object_ptr( + content, + std::move(entry.description), + st::boxDividerLabel), + descriptionPadding); + description->setAttribute(Qt::WA_TransparentForMouseEvents); + + const auto dummy = Ui::CreateChild(content.get()); + dummy->setAttribute(Qt::WA_TransparentForMouseEvents); + + content->sizeValue( + ) | rpl::start_with_next([=](const QSize &s) { + dummy->resize(s.width(), iconSize.height()); + }, dummy->lifetime()); + + label->geometryValue( + ) | rpl::start_with_next([=](const QRect &r) { + dummy->moveToLeft(0, r.y() + (r.height() - labelAscent)); + }, dummy->lifetime()); + + rpl::combine( + content->widthValue(), + label->heightValue(), + description->heightValue() + ) | rpl::start_with_next([=, + topPadding = titlePadding, + bottomPadding = descriptionPadding]( + int width, + int topHeight, + int bottomHeight) { + button->resize( + width, + topPadding.top() + + topHeight + + topPadding.bottom() + + bottomPadding.top() + + bottomHeight + + bottomPadding.bottom()); + }, button->lifetime()); + label->topValue( + ) | rpl::start_with_next([=, padding = titlePadding.top()](int top) { + button->moveToLeft(0, top - padding); + }, button->lifetime()); + const auto arrow = Ui::CreateChild( + button, + st::backButton); + arrow->setIconOverride( + &st::settingsPremiumArrow, + &st::settingsPremiumArrowOver); + arrow->setAttribute(Qt::WA_TransparentForMouseEvents); + button->sizeValue( + ) | rpl::start_with_next([=](const QSize &s) { + const auto &point = st::settingsPremiumArrowShift; + arrow->moveToRight( + -point.x(), + point.y() + (s.height() - arrow->height()) / 2); + }, arrow->lifetime()); + + const auto feature = entry.feature; + button->setClickedCallback([=] { buttonCallback(feature); }); + + iconContainers.push_back(dummy); + }; + + auto icons = std::vector(); + icons.reserve(int(entryMap.size())); + { + const auto &account = controller->session().account(); + const auto mtpOrder = FallbackOrder();/* session->account().appConfig().get( + "premium_promo_order", + FallbackOrder());*/ AssertIsDebug() + const auto processEntry = [&](Entry &entry) { + icons.push_back(entry.icon); + addRow(entry); + }; + + for (const auto &key : mtpOrder) { + auto it = entryMap.find(key); + if (it == end(entryMap)) { + continue; + } + processEntry(it->second); + } + } + + content->resizeToWidth(content->height()); + + // Icons. + Assert(iconContainers.size() > 2); + const auto from = iconContainers.front()->y(); + const auto to = iconContainers.back()->y() + iconSize.height(); + auto gradient = QLinearGradient(0, 0, 0, to - from); + gradient.setStops(Ui::Premium::FullHeightGradientStops()); + for (auto i = 0; i < int(icons.size()); i++) { + const auto &iconContainer = iconContainers[i]; + + const auto pointTop = iconContainer->y() - from; + const auto pointBottom = pointTop + iconContainer->height(); + const auto ratioTop = pointTop / float64(to - from); + const auto ratioBottom = pointBottom / float64(to - from); + + auto resultGradient = QLinearGradient( + QPointF(), + QPointF(0, pointBottom - pointTop)); + + resultGradient.setColorAt( + .0, + anim::gradient_color_at(gradient, ratioTop)); + resultGradient.setColorAt( + .1, + anim::gradient_color_at(gradient, ratioBottom)); + + const auto brush = QBrush(resultGradient); + AddButtonIcon( + iconContainer, + stDefault, + { .icon = icons[i], .backgroundBrush = brush }); + } + + Ui::AddSkip(content, descriptionPadding.bottom()); +} + +class Business : public Section { +public: + Business( + QWidget *parent, + not_null controller); + + [[nodiscard]] rpl::producer title() override; + + [[nodiscard]] QPointer createPinnedToTop( + not_null parent) override; + [[nodiscard]] QPointer createPinnedToBottom( + not_null parent) override; + + void showFinished() override; + + [[nodiscard]] bool hasFlexibleTopBar() const override; + + void setStepDataReference(std::any &data) override; + + [[nodiscard]] rpl::producer<> sectionShowBack() override final; + +private: + void setupContent(); + + const not_null _controller; + + QPointer _subscribe; + base::unique_qptr> _back; + base::unique_qptr _close; + rpl::variable _backToggles; + rpl::variable _wrap; + Fn _setPaused; + + std::shared_ptr _radioGroup; + + rpl::event_stream<> _showBack; + rpl::event_stream<> _showFinished; + rpl::variable _buttonText; + +}; + +Business::Business( + QWidget *parent, + not_null controller) +: Section(parent) +, _controller(controller) +, _radioGroup(std::make_shared()) { + setupContent(); + _controller->session().api().premium().reload(); +} + +rpl::producer Business::title() { + return tr::lng_premium_summary_title(); +} + +bool Business::hasFlexibleTopBar() const { + return true; +} + +rpl::producer<> Business::sectionShowBack() { + return _showBack.events(); +} + +void Business::setStepDataReference(std::any &data) { + using namespace Info::Settings; + const auto my = std::any_cast(&data); + if (my) { + _backToggles = std::move( + my->backButtonEnables + ) | rpl::map_to(true); + _wrap = std::move(my->wrapValue); + } +} + +void Business::setupContent() { + const auto content = Ui::CreateChild(this); + + Ui::AddSkip(content, st::settingsFromFileTop); + + AddBusinessSummary(content, _controller, [=](BusinessFeature feature) { + }); + + Ui::ResizeFitChild(this, content); +} + +QPointer Business::createPinnedToTop( + not_null parent) { + auto title = tr::lng_business_title(); + auto about = [&]() -> rpl::producer { + return rpl::conditional( + Data::AmPremiumValue(&_controller->session()), + tr::lng_business_unlocked(), + tr::lng_business_about() + ) | Ui::Text::ToWithEntities(); + }(); + + const auto content = [&]() -> Ui::Premium::TopBarAbstract* { + const auto weak = base::make_weak(_controller); + const auto clickContextOther = [=] { + return QVariant::fromValue(ClickHandlerContext{ + .sessionWindow = weak, + .botStartAutoSubmit = true, + }); + }; + return Ui::CreateChild( + parent.get(), + st::defaultPremiumCover, + Ui::Premium::TopBarDescriptor{ + .clickContextOther = clickContextOther, + .logo = u"dollar"_q, + .title = std::move(title), + .about = std::move(about), + }); + }(); + _setPaused = [=](bool paused) { + content->setPaused(paused); + if (_subscribe) { + _subscribe->setGlarePaused(paused); + } + }; + + _wrap.value( + ) | rpl::start_with_next([=](Info::Wrap wrap) { + content->setRoundEdges(wrap == Info::Wrap::Layer); + }, content->lifetime()); + + const auto calculateMaximumHeight = [=] { + return st::settingsPremiumTopHeight; + }; + + content->setMaximumHeight(calculateMaximumHeight()); + content->setMinimumHeight(st::settingsPremiumTopHeight);// st::infoLayerTopBarHeight); + + content->resize(content->width(), content->maximumHeight()); + //content->additionalHeight( + //) | rpl::start_with_next([=](int additionalHeight) { + // const auto wasMax = (content->height() == content->maximumHeight()); + // content->setMaximumHeight(calculateMaximumHeight() + // + additionalHeight); + // if (wasMax) { + // content->resize(content->width(), content->maximumHeight()); + // } + //}, content->lifetime()); + + _wrap.value( + ) | rpl::start_with_next([=](Info::Wrap wrap) { + const auto isLayer = (wrap == Info::Wrap::Layer); + _back = base::make_unique_q>( + content, + object_ptr( + content, + (isLayer + ? st::settingsPremiumLayerTopBarBack + : st::settingsPremiumTopBarBack)), + st::infoTopBarScale); + _back->setDuration(0); + _back->toggleOn(isLayer + ? _backToggles.value() | rpl::type_erased() + : rpl::single(true)); + _back->entity()->addClickHandler([=] { + _showBack.fire({}); + }); + _back->toggledValue( + ) | rpl::start_with_next([=](bool toggled) { + const auto &st = isLayer ? st::infoLayerTopBar : st::infoTopBar; + content->setTextPosition( + toggled ? st.back.width : st.titlePosition.x(), + st.titlePosition.y()); + }, _back->lifetime()); + + if (!isLayer) { + _close = nullptr; + } else { + _close = base::make_unique_q( + content, + st::settingsPremiumTopBarClose); + _close->addClickHandler([=] { + _controller->parentController()->hideLayer(); + _controller->parentController()->hideSpecialLayer(); + }); + content->widthValue( + ) | rpl::start_with_next([=] { + _close->moveToRight(0, 0); + }, _close->lifetime()); + } + }, content->lifetime()); + + return Ui::MakeWeak(not_null{ content }); +} + +void Business::showFinished() { + _showFinished.fire({}); +} + +QPointer Business::createPinnedToBottom( + not_null parent) { + const auto content = Ui::CreateChild(parent.get()); + + const auto session = &_controller->session(); + + auto buttonText = _buttonText.value(); + + _subscribe = CreateSubscribeButton({ + _controller, + content, + [] { return u"business"_q; }, + std::move(buttonText), + std::nullopt, + [=, options = session->api().premium().subscriptionOptions()] { + const auto value = _radioGroup->value(); + return (value < options.size() && value >= 0) + ? options[value].botUrl + : QString(); + }, + }); + { + const auto callback = [=](int value) { + const auto options = + _controller->session().api().premium().subscriptionOptions(); + if (options.empty()) { + return; + } + Assert(value < options.size() && value >= 0); + auto text = tr::lng_premium_subscribe_button( + tr::now, + lt_cost, + options[value].costPerMonth); + _buttonText = std::move(text); + }; + _radioGroup->setChangedCallback(callback); + callback(0); + } + + _showFinished.events( + ) | rpl::take(1) | rpl::start_with_next([=] { + _subscribe->startGlareAnimation(); + }, _subscribe->lifetime()); + + content->widthValue( + ) | rpl::start_with_next([=](int width) { + const auto padding = st::settingsPremiumButtonPadding; + _subscribe->resizeToWidth(width - padding.left() - padding.right()); + }, _subscribe->lifetime()); + + rpl::combine( + _subscribe->heightValue(), + Data::AmPremiumValue(session), + session->premiumPossibleValue() + ) | rpl::start_with_next([=]( + int buttonHeight, + bool premium, + bool premiumPossible) { + const auto padding = st::settingsPremiumButtonPadding; + const auto finalHeight = !premiumPossible + ? 0 + : !premium + ? (padding.top() + buttonHeight + padding.bottom()) + : 0; + content->resize(content->width(), finalHeight); + _subscribe->moveToLeft(padding.left(), padding.top()); + _subscribe->setVisible(!premium && premiumPossible); + }, _subscribe->lifetime()); + + return Ui::MakeWeak(not_null{ content }); +} + +} // namespace + +template <> +struct SectionFactory : AbstractSectionFactory { + object_ptr create( + not_null parent, + not_null controller + ) const final override { + return object_ptr(parent, controller); + } + bool hasCustomTopBar() const final override { + return true; + } + + [[nodiscard]] static const std::shared_ptr &Instance() { + static const auto result = std::make_shared(); + return result; + } +}; + +Type BusinessId() { + return Business::Id(); +} + +void ShowBusiness(not_null controller) { + if (!controller->session().premiumPossible()) { + controller->show(Box(PremiumUnavailableBox)); + return; + } + controller->showSettings(Settings::BusinessId()); +} + +} // namespace Settings diff --git a/Telegram/SourceFiles/settings/settings_business.h b/Telegram/SourceFiles/settings/settings_business.h new file mode 100644 index 000000000..e255fd715 --- /dev/null +++ b/Telegram/SourceFiles/settings/settings_business.h @@ -0,0 +1,37 @@ +/* +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 + +#include "settings/settings_type.h" + +namespace Main { +class Session; +} // namespace Main + +namespace Window { +class SessionController; +} // namespace Window + +namespace Settings { + +enum class BusinessFeature { + Location, + OpeningHours, + QuickReplies, + GreetingMessages, + AwayMessages, + Chatbots, + + kCount, +}; + +[[nodiscard]] Type BusinessId(); + +void ShowBusiness(not_null controller); + +} // namespace Settings diff --git a/Telegram/SourceFiles/settings/settings_main.cpp b/Telegram/SourceFiles/settings/settings_main.cpp index 1b5f8304b..854c94b05 100644 --- a/Telegram/SourceFiles/settings/settings_main.cpp +++ b/Telegram/SourceFiles/settings/settings_main.cpp @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "settings/settings_main.h" +#include "settings/settings_business.h" #include "settings/settings_codes.h" #include "settings/settings_chat.h" #include "settings/settings_information.h" @@ -419,6 +420,19 @@ void SetupPremium( controller->setPremiumRef("settings"); showOther(PremiumId()); }); + const auto button = AddButtonWithIcon( + container, + tr::lng_business_title(), + st::settingsButton, + { .icon = &st::menuIconShop }); + button->addClickHandler([=] { + showOther(BusinessId()); + }); + constexpr auto kNewExpiresAt = int(1711958400); + if (base::unixtime::now() < kNewExpiresAt) { + Ui::NewBadge::AddToRight(button); + } + if (controller->session().premiumCanBuy()) { const auto button = AddButtonWithIcon( container, diff --git a/Telegram/SourceFiles/settings/settings_premium.cpp b/Telegram/SourceFiles/settings/settings_premium.cpp index cde74eb5a..f9d627d3b 100644 --- a/Telegram/SourceFiles/settings/settings_premium.cpp +++ b/Telegram/SourceFiles/settings/settings_premium.cpp @@ -180,6 +180,7 @@ using Order = std::vector; u"stories"_q, u"more_upload"_q, u"double_limits"_q, + u"business"_q, u"last_seen"_q, u"voice_to_text"_q, u"faster_download"_q, @@ -367,6 +368,16 @@ using Order = std::vector; PremiumPreview::RealTimeTranslation, }, }, + { + u"business"_q, + Entry{ + &st::settingsPremiumIconPlay, AssertIsDebug() + tr::lng_premium_summary_subtitle_business(), + tr::lng_premium_summary_about_business(), + PremiumPreview::Business, + true, + }, + }, }; } @@ -1671,9 +1682,9 @@ void AddSummaryPremium( icons.reserve(int(entryMap.size())); { const auto &account = controller->session().account(); - const auto mtpOrder = account.appConfig().get( + const auto mtpOrder = FallbackOrder();/* session->account().appConfig().get( "premium_promo_order", - FallbackOrder()); + FallbackOrder());*/ AssertIsDebug() const auto processEntry = [&](Entry &entry) { icons.push_back(entry.icon); addRow(entry); diff --git a/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp b/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp index 4094b584d..5ef11ba50 100644 --- a/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp +++ b/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp @@ -25,6 +25,21 @@ constexpr auto kBodyAnimationPart = 0.90; constexpr auto kTitleAdditionalScale = 0.15; constexpr auto kMinAcceptableContrast = 4.5; // 1.14; +[[nodiscard]] QImage ScaleTo(QImage image) { + using namespace style; + const auto size = image.size(); + const auto scale = DevicePixelRatio() * Scale() / 300.; + const auto scaled = QSize( + int(base::SafeRound(size.width() * scale)), + int(base::SafeRound(size.height() * scale))); + image = image.scaled( + scaled, + Qt::IgnoreAspectRatio, + Qt::SmoothTransformation); + image.setDevicePixelRatio(DevicePixelRatio()); + return image; +} + } // namespace QString Svg() { @@ -157,27 +172,41 @@ TopBar::TopBar( rpl::producer about, bool light, bool optimizeMinistars) +: TopBar(parent, st, { + .clickContextOther = std::move(clickContextOther), + .title = std::move(title), + .about = std::move(about), + .light = light, + .optimizeMinistars = optimizeMinistars, +}) { +} + +TopBar::TopBar( + not_null parent, + const style::PremiumCover &st, + TopBarDescriptor &&descriptor) : TopBarAbstract(parent, st) -, _light(light) +, _light(descriptor.light) +, _logo(descriptor.logo) , _titleFont(st.titleFont) , _titlePadding(st.titlePadding) -, _about(this, std::move(about), st.about) -, _ministars(this, optimizeMinistars) { +, _about(this, std::move(descriptor.about), st.about) +, _ministars(this, descriptor.optimizeMinistars) { std::move( - title + descriptor.title ) | rpl::start_with_next([=](QString text) { _titlePath = QPainterPath(); _titlePath.addText(0, _titleFont->ascent, _titleFont, text); update(); }, lifetime()); - if (clickContextOther) { + if (const auto other = descriptor.clickContextOther) { _about->setClickHandlerFilter([=]( const ClickHandlerPtr &handler, Qt::MouseButton button) { ActivateClickHandler(_about, handler, { button, - clickContextOther() + other() }); return false; }); @@ -188,7 +217,10 @@ TopBar::TopBar( ) | rpl::start_with_next([=] { TopBarAbstract::computeIsDark(); - if (!_light && !TopBarAbstract::isDark()) { + if (_logo == u"dollar"_q) { + _dollar = ScaleTo(QImage(u":/gui/art/business_logo.png"_q)); + _ministars.setColorOverride(st::premiumButtonFg->c); + } else if (!_light && !TopBarAbstract::isDark()) { _star.load(Svg()); _ministars.setColorOverride(st::premiumButtonFg->c); } else { @@ -232,8 +264,11 @@ rpl::producer TopBar::additionalHeight() const { } void TopBar::resizeEvent(QResizeEvent *e) { - const auto progress = (e->size().height() - minimumHeight()) - / float64(maximumHeight() - minimumHeight()); + const auto max = maximumHeight(); + const auto min = minimumHeight(); + const auto progress = (max > min) + ? ((e->size().height() - min) / float64(max - min)) + : 1.; _progress.top = 1. - std::clamp( (1. - progress) / kBodyAnimationPart, @@ -291,7 +326,12 @@ void TopBar::paintEvent(QPaintEvent *e) { } p.resetTransform(); - _star.render(&p, _starRect); + if (!_dollar.isNull()) { + auto hq = PainterHighQualityEnabler(p); + p.drawImage(_starRect, _dollar); + } else { + _star.render(&p, _starRect); + } const auto color = _light ? st::settingsPremiumUserTitle.textFg diff --git a/Telegram/SourceFiles/ui/effects/premium_top_bar.h b/Telegram/SourceFiles/ui/effects/premium_top_bar.h index 9ccc4fa30..4ac3cc8be 100644 --- a/Telegram/SourceFiles/ui/effects/premium_top_bar.h +++ b/Telegram/SourceFiles/ui/effects/premium_top_bar.h @@ -64,6 +64,15 @@ private: }; +struct TopBarDescriptor { + Fn clickContextOther; + QString logo; + rpl::producer title; + rpl::producer about; + bool light = false; + bool optimizeMinistars = true; +}; + class TopBar final : public TopBarAbstract { public: TopBar( @@ -74,6 +83,10 @@ public: rpl::producer about, bool light = false, bool optimizeMinistars = true); + TopBar( + not_null parent, + const style::PremiumCover &st, + TopBarDescriptor &&descriptor); ~TopBar(); void setPaused(bool paused) override; @@ -87,11 +100,13 @@ protected: private: const bool _light = false; + const QString _logo; const style::font &_titleFont; const style::margins &_titlePadding; object_ptr _about; ColoredMiniStars _ministars; QSvgRenderer _star; + QImage _dollar; struct { float64 top = 0.; diff --git a/Telegram/SourceFiles/ui/menu_icons.style b/Telegram/SourceFiles/ui/menu_icons.style index b0e0dda13..60fa215bf 100644 --- a/Telegram/SourceFiles/ui/menu_icons.style +++ b/Telegram/SourceFiles/ui/menu_icons.style @@ -137,6 +137,7 @@ menuIconAntispam: icon {{ "menu/antispam", menuIconColor }}; menuIconChatDiscuss: icon {{ "menu/chat_discuss", menuIconColor }}; menuIconBotCommands: icon {{ "menu/bot_commands", menuIconColor }}; menuIconPremium: icon {{ "menu/premium", menuIconColor }}; +menuIconShop: icon {{ "menu/shop", menuIconColor }}; menuIconIpAddress: icon {{ "menu/ip_address", menuIconColor }}; menuIconAddress: icon {{ "menu/payment_address", menuIconColor }}; menuIconShowAll: icon {{ "menu/all_media", menuIconColor }};