From 72501f9860ebbcdc0580dea373c58b9b23112aca Mon Sep 17 00:00:00 2001 From: RadRussianRus Date: Fri, 9 Sep 2022 17:54:26 +0300 Subject: [PATCH] [Option][GUI] Default folders and local folders --- .../icons/folders/folders_local_book.png | Bin 0 -> 2171 bytes .../icons/folders/folders_local_book@2x.png | Bin 0 -> 2396 bytes .../icons/folders/folders_local_book@3x.png | Bin 0 -> 2186 bytes .../folders/folders_local_book_active.png | Bin 0 -> 2251 bytes .../folders/folders_local_book_active@2x.png | Bin 0 -> 2455 bytes .../folders/folders_local_book_active@3x.png | Bin 0 -> 2294 bytes .../icons/folders/folders_local_brackets.png | Bin 0 -> 2249 bytes .../folders/folders_local_brackets@2x.png | Bin 0 -> 2590 bytes .../folders/folders_local_brackets@3x.png | Bin 0 -> 2796 bytes .../icons/folders/folders_local_candle.png | Bin 0 -> 2424 bytes .../icons/folders/folders_local_candle@2x.png | Bin 0 -> 2857 bytes .../icons/folders/folders_local_candle@3x.png | Bin 0 -> 3074 bytes .../folders/folders_local_candle_active.png | Bin 0 -> 2327 bytes .../folders_local_candle_active@2x.png | Bin 0 -> 2694 bytes .../folders_local_candle_active@3x.png | Bin 0 -> 2888 bytes .../icons/folders/folders_local_city.png | Bin 0 -> 2691 bytes .../icons/folders/folders_local_city@2x.png | Bin 0 -> 3260 bytes .../icons/folders/folders_local_city@3x.png | Bin 0 -> 3012 bytes .../folders/folders_local_city_active.png | Bin 0 -> 2590 bytes .../folders/folders_local_city_active@2x.png | Bin 0 -> 3140 bytes .../folders/folders_local_city_active@3x.png | Bin 0 -> 2881 bytes .../icons/folders/folders_local_desktop.png | Bin 0 -> 2271 bytes .../folders/folders_local_desktop@2x.png | Bin 0 -> 2453 bytes .../folders/folders_local_desktop@3x.png | Bin 0 -> 2432 bytes .../folders/folders_local_desktop_active.png | Bin 0 -> 2547 bytes .../folders_local_desktop_active@2x.png | Bin 0 -> 2596 bytes .../folders_local_desktop_active@3x.png | Bin 0 -> 2452 bytes .../icons/folders/folders_local_earth.png | Bin 0 -> 2541 bytes .../icons/folders/folders_local_earth@2x.png | Bin 0 -> 3251 bytes .../icons/folders/folders_local_earth@3x.png | Bin 0 -> 3677 bytes .../icons/folders/folders_local_music.png | Bin 0 -> 2643 bytes .../icons/folders/folders_local_music@2x.png | Bin 0 -> 3325 bytes .../icons/folders/folders_local_music@3x.png | Bin 0 -> 4895 bytes .../folders/folders_local_music_active.png | Bin 0 -> 2521 bytes .../folders/folders_local_music_active@2x.png | Bin 0 -> 3076 bytes .../folders/folders_local_music_active@3x.png | Bin 0 -> 4407 bytes .../icons/folders/folders_local_news.png | Bin 0 -> 2414 bytes .../icons/folders/folders_local_news@2x.png | Bin 0 -> 2627 bytes .../icons/folders/folders_local_news@3x.png | Bin 0 -> 2423 bytes .../folders/folders_local_news_active.png | Bin 0 -> 2345 bytes .../folders/folders_local_news_active@2x.png | Bin 0 -> 2535 bytes .../folders/folders_local_news_active@3x.png | Bin 0 -> 2364 bytes .../icons/folders/folders_local_phone.png | Bin 0 -> 2172 bytes .../icons/folders/folders_local_phone@2x.png | Bin 0 -> 2299 bytes .../icons/folders/folders_local_phone@3x.png | Bin 0 -> 2179 bytes .../folders/folders_local_phone_active.png | Bin 0 -> 2302 bytes .../folders/folders_local_phone_active@2x.png | Bin 0 -> 2449 bytes .../folders/folders_local_phone_active@3x.png | Bin 0 -> 2326 bytes .../icons/folders/folders_local_smile.png | Bin 0 -> 2604 bytes .../icons/folders/folders_local_smile@2x.png | Bin 0 -> 3477 bytes .../icons/folders/folders_local_smile@3x.png | Bin 0 -> 4608 bytes .../folders/folders_local_smile_active.png | Bin 0 -> 2419 bytes .../folders/folders_local_smile_active@2x.png | Bin 0 -> 3087 bytes .../folders/folders_local_smile_active@3x.png | Bin 0 -> 3787 bytes .../icons/folders/folders_local_sun.png | Bin 0 -> 2470 bytes .../icons/folders/folders_local_sun@2x.png | Bin 0 -> 3229 bytes .../icons/folders/folders_local_sun@3x.png | Bin 0 -> 3822 bytes .../folders/folders_local_sun_active.png | Bin 0 -> 2429 bytes .../folders/folders_local_sun_active@2x.png | Bin 0 -> 3078 bytes .../folders/folders_local_sun_active@3x.png | Bin 0 -> 3619 bytes .../icons/folders/folders_local_video.png | Bin 0 -> 2373 bytes .../icons/folders/folders_local_video@2x.png | Bin 0 -> 2796 bytes .../icons/folders/folders_local_video@3x.png | Bin 0 -> 3182 bytes .../folders/folders_local_video_active.png | Bin 0 -> 2459 bytes .../folders/folders_local_video_active@2x.png | Bin 0 -> 2968 bytes .../folders/folders_local_video_active@3x.png | Bin 0 -> 3452 bytes .../icons/folders/folders_type_admin.png | Bin 0 -> 2786 bytes .../icons/folders/folders_type_admin@2x.png | Bin 0 -> 3128 bytes .../icons/folders/folders_type_admin@3x.png | Bin 0 -> 3313 bytes .../icons/folders/folders_type_filtered.png | Bin 0 -> 3005 bytes .../folders/folders_type_filtered@2x.png | Bin 0 -> 3150 bytes .../folders/folders_type_filtered@3x.png | Bin 0 -> 2998 bytes .../icons/folders/folders_type_not_admin.png | Bin 0 -> 3200 bytes .../folders/folders_type_not_admin@2x.png | Bin 0 -> 3641 bytes .../folders/folders_type_not_admin@3x.png | Bin 0 -> 3753 bytes .../icons/folders/folders_type_not_owner.png | Bin 0 -> 2258 bytes .../folders/folders_type_not_owner@2x.png | Bin 0 -> 2777 bytes .../folders/folders_type_not_owner@3x.png | Bin 0 -> 3163 bytes .../icons/folders/folders_type_owner.png | Bin 0 -> 2147 bytes .../icons/folders/folders_type_owner@2x.png | Bin 0 -> 2595 bytes .../icons/folders/folders_type_owner@3x.png | Bin 0 -> 3046 bytes .../icons/folders/folders_type_recent.png | Bin 0 -> 3156 bytes .../icons/folders/folders_type_recent@2x.png | Bin 0 -> 3528 bytes .../icons/folders/folders_type_recent@3x.png | Bin 0 -> 3714 bytes Telegram/Resources/icons/settings/cloud.png | Bin 0 -> 698 bytes .../Resources/icons/settings/cloud@2x.png | Bin 0 -> 1003 bytes .../Resources/icons/settings/cloud@3x.png | Bin 0 -> 1102 bytes Telegram/Resources/langs/rewrites/en.json | 19 + Telegram/SourceFiles/api/api_chat_filters.cpp | 16 +- .../boxes/filters/edit_filter_box.cpp | 113 +++- .../boxes/filters/edit_filter_chats_list.cpp | 43 +- .../boxes/filters/edit_filter_chats_list.h | 4 +- .../SourceFiles/data/data_chat_filters.cpp | 494 +++++++++++++++++- Telegram/SourceFiles/data/data_chat_filters.h | 51 +- Telegram/SourceFiles/data/data_session.cpp | 4 +- .../SourceFiles/dialogs/dialogs_widget.cpp | 7 +- .../SourceFiles/history/history_widget.cpp | 3 + .../SourceFiles/kotato/kotato_settings.cpp | 8 + Telegram/SourceFiles/main/main_account.cpp | 37 ++ Telegram/SourceFiles/main/main_account.h | 13 + Telegram/SourceFiles/settings/settings.style | 1 + .../SourceFiles/settings/settings_folders.cpp | 170 +++++- Telegram/SourceFiles/ui/filter_icon_panel.cpp | 57 +- Telegram/SourceFiles/ui/filter_icon_panel.h | 3 +- Telegram/SourceFiles/ui/filter_icons.cpp | 60 +++ Telegram/SourceFiles/ui/filter_icons.h | 13 + Telegram/SourceFiles/ui/filter_icons.style | 25 + Telegram/SourceFiles/window/window.style | 6 + .../SourceFiles/window/window_controller.cpp | 2 + .../window/window_filters_menu.cpp | 44 +- .../SourceFiles/window/window_filters_menu.h | 3 + .../window/window_session_controller.cpp | 44 +- .../window/window_session_controller.h | 3 +- 113 files changed, 1154 insertions(+), 89 deletions(-) create mode 100644 Telegram/Resources/icons/folders/folders_local_book.png create mode 100644 Telegram/Resources/icons/folders/folders_local_book@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_book@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_book_active.png create mode 100644 Telegram/Resources/icons/folders/folders_local_book_active@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_book_active@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_brackets.png create mode 100644 Telegram/Resources/icons/folders/folders_local_brackets@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_brackets@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_candle.png create mode 100644 Telegram/Resources/icons/folders/folders_local_candle@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_candle@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_candle_active.png create mode 100644 Telegram/Resources/icons/folders/folders_local_candle_active@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_candle_active@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_city.png create mode 100644 Telegram/Resources/icons/folders/folders_local_city@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_city@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_city_active.png create mode 100644 Telegram/Resources/icons/folders/folders_local_city_active@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_city_active@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_desktop.png create mode 100644 Telegram/Resources/icons/folders/folders_local_desktop@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_desktop@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_desktop_active.png create mode 100644 Telegram/Resources/icons/folders/folders_local_desktop_active@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_desktop_active@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_earth.png create mode 100644 Telegram/Resources/icons/folders/folders_local_earth@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_earth@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_music.png create mode 100644 Telegram/Resources/icons/folders/folders_local_music@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_music@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_music_active.png create mode 100644 Telegram/Resources/icons/folders/folders_local_music_active@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_music_active@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_news.png create mode 100644 Telegram/Resources/icons/folders/folders_local_news@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_news@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_news_active.png create mode 100644 Telegram/Resources/icons/folders/folders_local_news_active@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_news_active@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_phone.png create mode 100644 Telegram/Resources/icons/folders/folders_local_phone@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_phone@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_phone_active.png create mode 100644 Telegram/Resources/icons/folders/folders_local_phone_active@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_phone_active@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_smile.png create mode 100644 Telegram/Resources/icons/folders/folders_local_smile@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_smile@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_smile_active.png create mode 100644 Telegram/Resources/icons/folders/folders_local_smile_active@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_smile_active@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_sun.png create mode 100644 Telegram/Resources/icons/folders/folders_local_sun@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_sun@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_sun_active.png create mode 100644 Telegram/Resources/icons/folders/folders_local_sun_active@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_sun_active@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_video.png create mode 100644 Telegram/Resources/icons/folders/folders_local_video@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_video@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_video_active.png create mode 100644 Telegram/Resources/icons/folders/folders_local_video_active@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_local_video_active@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_type_admin.png create mode 100644 Telegram/Resources/icons/folders/folders_type_admin@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_type_admin@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_type_filtered.png create mode 100644 Telegram/Resources/icons/folders/folders_type_filtered@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_type_filtered@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_type_not_admin.png create mode 100644 Telegram/Resources/icons/folders/folders_type_not_admin@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_type_not_admin@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_type_not_owner.png create mode 100644 Telegram/Resources/icons/folders/folders_type_not_owner@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_type_not_owner@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_type_owner.png create mode 100644 Telegram/Resources/icons/folders/folders_type_owner@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_type_owner@3x.png create mode 100644 Telegram/Resources/icons/folders/folders_type_recent.png create mode 100644 Telegram/Resources/icons/folders/folders_type_recent@2x.png create mode 100644 Telegram/Resources/icons/folders/folders_type_recent@3x.png create mode 100644 Telegram/Resources/icons/settings/cloud.png create mode 100644 Telegram/Resources/icons/settings/cloud@2x.png create mode 100644 Telegram/Resources/icons/settings/cloud@3x.png diff --git a/Telegram/Resources/icons/folders/folders_local_book.png b/Telegram/Resources/icons/folders/folders_local_book.png new file mode 100644 index 0000000000000000000000000000000000000000..7a0fddc995dab3a6fd6b191f84dc017d50830cae GIT binary patch literal 2171 zcmb_ee{9rL94}0WVirJ9$iS?W3!LzTR%sp=u>^1cHUsVX6=DG+00 zW;IHwkxmOO>#S{*J6Fr1LRBsz7iJ|)pdkm6SuL&GQZ_{8c_n=94l@*)hd8T4RFxZ$ zY>w5F)rN)0fS0Fb;17^N(F=H=UlbRR918@76&T>70WbMkiQ~w^kHXO`B_TD0Uns=F zcOfd}IHtrfnM}r;@p%m^$pBFl8J1%>j>ZVu&gl-!(z-o&lp&04*-}kMHFVNtgmI(Y z2~k+-ND7)+q}A<0nQ+0FEHoM5W!;qWKt(R%%yuiC53a}zN+S*Fj*YRPh&5A&W7sL< z9@NFhw*|nZjm3&F?y5!8iXm*LrUR!@D9ByWc4N*&Oarowc1uPz9a!dEHycx`wh(j- ztI;shqm8N`l}uJwyNwaa`Aw>>7#aK7F>_EDIw(YOEXUGpfChm^AV>j0VnGG#lUQ~H z8Z#6%ksAvYTqws%0U&X{+o0Gr3UuIqf)!ax7?uWc&Z-8Jh%xmfMHVY5RU2u;!hx|m zUtUElCPj7Ifx3*M;Shz>_NuBP`49{M89+L&1cNje^ap5BR74sC;}8HL$aC?;==`uD zx4X@C=a2YYF=Wi~Z`2?XlpshTnw3GEW})9lLs3>}k@Euu0v`F4qMABO#jhGnk7adL zDVQ+`07}FWPqUl|Xc_rAT8JlDIuL*yKye|#2a#*&yho&nYUA$Z3a`jAw5D*CR>{0A zBq+Of4^gt)XQWVtVf8Ncc%aCI`I!{Lr1xq5NOapsI2mZ6swA%6gZPWNmwp>|++RHp zAtxZ-M=JslaLN3D7K122v;G9{Lr4yA3ijlPtg-6zegvZA_er4W$A?s3pqEonPa?d6 zGStK8^I-10M?QDHU;k@9jJtM@SdF>Uh52V=)>+)n{19He-OJ*xfp3cY4$^U{EWE26 zCiPteF|I2bu4;^w%55_zZ118-kLRoEM}9efe%kcup0j1^*Wdc6>Em^`Zr-?Y{cq#v zFLJL<>Y^_99^5dweE-_(pJ``!RaN`6hNVld)jc)1FT;GZxh5Q5?Emrf=_5yucvtS9 z{q2dKS;2W8&xePI-Y+}(!Gx>O?_^yve@4ZFqQiv7XC`{YcZaRO_Wnm%7evDzBV3lr)cBxpJlJr-1>^f2?)+ z^6&Q&B`=>Es8U)WoYRZdUf#L$xwe}V24d9RT zO6IL?<2M`|zIN@0Q>W_Ba*;)ICvI%zR}JkMIDYV8SA@RM1iHJskG}H^AevXc)sj2( z?u4G6o{JYRw!BL0>0fbRU8w%X*PF_te{JdOdm>l*{?pHQ^qzd%&SWYxzt7&Yas40X z4%GjsG`)%sr@CDC!bIqEm<@>g`O>Zk9=FHr^Ys#(G+3x2-w5B$^ Jdr8|X{{V($-)8^- literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_book@2x.png b/Telegram/Resources/icons/folders/folders_local_book@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2a03b1365fd31e95cc3811adc60888505381fc47 GIT binary patch literal 2396 zcmb_d4R8!+7(QubG(`|iGe+CBQBB(H?e5*~-QJF)e(aE%va4M<5 zBc+w8Ag3(TC6vt)Y$7^(6f&}eg#mm(}V)13-9$|97RG9ZI&G!qZ1;z z&MYKVRsljAEto)3G-9MU!MdqDSO- zxlpsCP-#~RJ|z;?9|)HT77Q=p6r3~?dP*UnC`52dq3R8hivkY3zz6(V0Ak4qR`JN1 z9Pr3b2pxI-5CJT$(;4A-tQMayLJ`o$6~Q#Z1$itw;3`!Bo(%$Wp(=oJMNnp~!hrvW=^B1{BE&=^U(NQR{umLT6D z%q&54L7lQFxl4OO869dOSQ;M8Lr~}%k<+;U1d9UemQ^1IbC!Hu9>5iU9*RUN$)?I) zS%t(15OW0gdwuAl+d{VcJGX5?KoHgw;xj7;T|B%x$6o#*je77|vp$M4n^> zx3zn|Llz44=IZmid@jlYjPZb#GchE=2oz?vQUWGY6oD~T&W*VNPrEH{lDAo@?r0NL z34Usvw`Wvcl?WqRNfNkuV8IBJjl={%nJ|WT6Btc%CKB+B+hPT}p+g>F)1(0GUTOFf z$pHo7JFkR=zRtv8XlG&Q;%n24$m+402uTs&F^9l$ZoBeQ^A-#Si5KO z7ycyu0j}uj>Mb1X0I--bks%paGK$1(RzPC}<+hjs5NMMKJ=rCzr}~f|NgGR9? z$LCZZ4lj5(e;$ATfdF$ z8t@^q?*Kn6l?rziuxfv_!4SozJI1&?r?0JSZY~&;@NMjl51Q94JdxabA}u+2`D^#f z%gZ;>@6WDpY#0cF-$x}c>7>suJ2ig7mK)AG_VTsPLst^28!t9ik%!HD+J8J+WnO@U zHaf#c*2DpQh7Stnro^`#OguaLi@wpRBVVu1T;J5@-`e_N%fX_i>2=3fWbD77at&Kr zy%%rYsVvV*`s6@N+wAs^zbgkewN<93B=kMqv84Hevan{|pH&TKu0zy>b=fKL8;@PN zpw@hK;abrwYDoFmnwzm%Rb{*9?4D7bqcBy=E8ZLwyclGM_TN(R-ONAA?D?cC;aAmG z7&EGR^s1kJ7`FG^fQDVuQsOJ@6Mt^+_-y*6ot5Jg^Xu=;smtC_o3lpUGtGEl*d@MT z$FyJg8Fhc{*qkvUF2BCLqxSgK4LM264j#+z%_Gqdjx%epH%_j)Z>cY8+B9inOXap{ z#<{x^?kH_u%Yo^;TyJB`CM>?a_uP$A9{t=is(S5yucfn{j;q)=VZ_qfs~RgcoQ#dj zNg7<+yRGC>@K&9WvtjT*^IAN2337Gjt3gNYTLb$qaE>^-AV{vrn3{dJnAdteU=J%9 zzxK<+7duz;nd_I{9vn4qW_|A2_|AguzZW$HuM34c-)#|1t?laulx{!N-l5zVwzhsf zX(N64g>jI-@zkP>mTN_=-rLRlqUITXi_JZ9nVQ$DChLU1vEb7wDe+OU?yaRwZRhK6 zcHVn2lN#crhWHw$dKN9Z9KCO7-{=G4k^F{1a<5I2YvmnnK7T%GewPajugo=kb7#Z0 TW?yH8K9W8z)3JH%%#Z&CTdY+( literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_book@3x.png b/Telegram/Resources/icons/folders/folders_local_book@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..08888a0c6fd76b560220f57d19360484c0ce22e7 GIT binary patch literal 2186 zcmbVO4NMbP9Ir}^iZVCnM;zO3r<>c>)k6oY42+93dQIa zn2Q}IGT9a#YSfv`h?xwd8v&h~u`$CEHHIJtqR|*4$_#S~^CRwEDHRPmvzOevclUnp z|NH$v?w|WSFK5xD2{R|?bh=5|S+;z5_h{F+(QwwqoT`EIcwg3XMW>6MqFtkOHM?f$ zbo%q6qd+aNf5`H(*T4y~6BvSCpLR%>oEr3Td@)cFCnypnD|)->B#MZF6NB0vdTOju4NRVvd|IbpvSh1<4;|S7eu3%K1Th5scl- z)EE9d{R&s|V)ZYV%|Thi)sI+@|5JS=IJ}#aiU91OII8)BYrSSLHTbhx3-1lypOjO%KUg03*_M^Xe=?VS zk01B6{_^FXj<1$ghn|eA>RmZS)Hm@H#~y0y*{s91x2~!?kWlH38B=~rpgLkZ+@{8c zhRKEJ3f7%ibz7g)9;j=dfA~sAM~9E;j9uN-m6Dn|{dIEMmR@gleeK>*m(*?u<>uyA zplfSf)0;ay?@N=5~*&wazzkmPI25Nij^0dUSKbZDoV^fo{iuy?Zs%>(5%!pI-$%=+9DgEKB z=I-w9G~}Gyly)@4#K(0>{SV4NO+8;eFy47=#iQ$gJbGjeEkaU~ljGxeoDtFJ_ZgWE@WlwH< zV4J?>T7B#F>X@^)`}-ekB=rk+Z*94@?N)VSYgJWM&37B8@4ca}IMlXq-xszg9#E0Lf5dR(k8U!LC%~xyPdFeac0`x zR*{w$?SsZ>)I@wRAu)*2L;_l)kq{GOgCZpcBoss9r9_MZat%CqW^WWMmk>9ZnKLv0 z`M&S}&-d?{k@mK=b8D8=5Ckzd)tcOZuXW)udj>w+`n(_TWsck0?Gwa9kA_Etc<0^4 z1Tm}0?Cc7<((5$nSW#d&I*Jx77e^CBLsP*8a0?1Z9c4{BPW}DGeu^}WIJHqqvuU>( z^_s1N9_kou>x6?_plVP}jbuYX!vGcv09mkdwyzc9R1sIh1 zEu~<&Rao0EmkAe)DFBz@qHLH_G0=e3IJeKs70C_Apd7N09r!qwtH!#$PT=^x&TXKp zuWus2rA?=+9MfvCtSW^cwDjXN$_1G=+V3225wijLPM-%+OFx#mEX>B$nmq&p$Ln;Q zTxFr!E0W3P=5S$D@`;V6Z8&-V$tiPC5(Fqt@hs2MtVDBCC#PtVqOsgcR?t|s6q1$RftIvlLmaq}J@@91jy?bwW`^ zI<2K_KL9pFsbrkOX-7@d(2$}^I;TL|fDoTDVun@)pwj}&XJ9NAlVc*P%uhP7FI?Pk ze#z&C12M)8R-IM&3a zK%ye>G%Eu{i%0~t0(3wlT~I_eCITpMp`mXuS5Oi-KOe89Uv8MyAX^^g%*N?OORS^{ zNS0`sGbCE#Fqtl?Figsvfdv zS`EOk8RHZTU5E^-{MejkweG1d<@xzughB6M%@VusWP&{KP$G+0_Fml2+)lp_`tPD% z79<1=mF9SrqZJjqLl<}npCFP%krVWcT*-c_`eL_mswT!XL9TSmeX1`P2lfIxi}3$D zL*0Kq_trZlq5sL}*6#mb^C`NuWHshi7Z%@5*##<=##>7`tnO*}rn)O48<)z%d)_wc z!g7L$@Tp{?vvn@qym;o$A&RW4tE;d7ZftC1`Jn>`A`2&nBaMxXiA3W3N9QhI-amNp zkGGj;zuJ23=#eAamv8Fnsad#f<^#^pUq*IMd}{63yH^~OKiIYF`q~+9tXRLMi?Kh?FSVe!7)k9(du`0|6p!^6LJU%GM*zP@t(-c01&sjpv} zS9fh)DmBt@u>Y@#R9nZPlP4eR`W>frY0iRESO1w@^=7S{o4;t$iv1U7=eBx}L`FwP j3j+gdPh8kJgg;HZn%A06Je=$fKQ~e>ZOM;UZ{Gedif8lB literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_book_active@2x.png b/Telegram/Resources/icons/folders/folders_local_book_active@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b5d858f62594ce09c7b75234270ae61495178aea GIT binary patch literal 2455 zcmb_e4R8!+7(Qwgsa8wNXvJC?6J&4yFS|QAspL|Lx*$?wl-k?bHur>H^lVKM2tlOGaimC`!e^KwQA11nlVL&2=cE$aZuT>m;1PY~WRL z%QY~fJikyXFP3;2%^ZMagasJD4-63r`+Wgj2;0#}TmjC_uW=NKK#XELI?yCUik!oc zY*hmYYqen#$*@Q|ZzXLs!}DnfMUWg$a5zb0q)lK5fufMu2Zd~!>=p_fZ^gLalO6RM zMo_@hQg+TSq zs_Khx)Udc@Bs<&O7#>L-r37R(r1x#M1~^0m*ink02#jDck}V`Tf#n2(>`%}FK}4ZW zRaV?(&7qtLr3itg;5I)5g|3lBLwqV&mISw|`9+ws;uk#t4+cCalBlGRt@>0A5<_)# zM1|8Sm908 zVs5UvKI(H>m0*kqtTZVB(#6{_z}h5?r5OU_Tq1#y=@P|LZkA)+>G5boH3hbs=xZL; zR3)3LXc;gZO<{yh1Q-Jt5#vOchyfSPF+@5eN;GL2`T=u1%0QT(4);=zHB6T1iOqb< zfR;tG1k2OF#$q;7W-*q8WG)t#fCG%gy9k+=hUSiO!;7@h9^~94zE2rk=8x ziV~PlEhH~6=>lzwcgw$2 zA1jXJ6$2gsf8TNRKjiaFy%QDsk9;2O{{JZzQfctaa}V|HvRGQ(%X17Y^!|LQY5(57!!3x%t`sLN0&wjf(_QF1X`L#WtwysB} zb;@eDxNGD3ReOKcgoQ6oufI+&IkaNy&hbR$t-z*}SGF{Myrx$UTIJqQTa;G1d130z zlb1^CPA5%$vteV`+mp6^P`4)aryFH+Qv9~+z^3Z`?v*uj_ME#lY1{p(nwm4gqW4!f zo~;76?j3li->ZZBX?6S0U&CLT$i0!Z_~3iuw?}@zm$~$?(tWK~`_~_BgdOEulRI`R z`#!aP+2NH+GtTVQb zOZupF?Kwj@cJX@k4taE+&bw!YHlNzIpz^@^J#Dmu=@sp#4qH7EpZiHe-{OrYyi7Sg zucju{quf4Zx#hVRi0#dWJKlK>Utbh~5Dr$`L1-w{K>? z_kG{*cr#m_lf7VE;&X`xgJE1&rZW%z`t)b$S8w0r|HoI*z_Ra zG$rU(6yHFhat16T>FIi57$l`ol0~IleQD4d;N&!5M@@u@zz8!&n%$(0HQQK%oI_A7 zK}4Z0MU*@hgQ2zvlwoNrOIhxN!mbfHje9Iu6j+ZE^m8y~$Fp-r0!GeZH38MBb088eemj5jk@%m!$I;R%rvc*|T|-z$&;iO!<5_@nhB9n5A* zx}S=ei+r#;?gxo9Ez1e|X0)S%-i1I!W4EQDs`Vs!iLEd90!aFZ){LsFibpHwg1}J% zEBhqfk3Y=6%9TCF{S)2dfr&Ht4N6 z0Ee$)eH#A;z>D}-1jvv&2)_}Bk2tp&48yT3r^6lkvHMbU!|K(^r+PboKy$xYd2M9> zR3A^A+51UC@r7-Ni=W+=oY8W~vH6R%gqpYW*%^Bm+#YGYdum;F`!C;jry8$b|8>pP z>+8?eW!LpI^i-bQ>Kt@z6^~q;Sbf?{v%9kKy7OIqFZBCT>t3(e-`RVi=Wn6$J#NIE z^>_Kk(1|6VFIo5V+1iD__pNF5P<7{K9ouuVr)mt6y!kW%1&~3&HjCdW~cD`+Q>w{;rztOxdjCuBC=(wW5P3=HsmJt6*z7m z4d1$RIVJqh$4J#EG(7asUzpTg_DcAtw6O^rn%a%E3#fzEW$$dA86N)h!)!h1x1+i1 z#;j$#FE0vxyK!fK%i@N2a+BUY`_Z28oAbX+3HMbl%Q+pe`6fHp6=YpF)_$bKxU z(NtY?r8h*oCKU%#>sH*9UfXtjdCy8BDgU!}xoN5KOv=Wz7mK$S6x^BdYFFQ}yaOYK h533Hxk1NeR);(jUzfq`mm+AjZvNE!r2h&zo{RiyRDi#0$ literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_brackets.png b/Telegram/Resources/icons/folders/folders_local_brackets.png new file mode 100644 index 0000000000000000000000000000000000000000..43196adfa8cfa9c655f77d4580cc78783a1ff31c GIT binary patch literal 2249 zcmb_eeQeZZ94_J_0`p@MMF>*LhoaZ(cdu=Bz;-v>B^+#U3&Ugy@4bERR=8_R+wE=> zjSymh#Dx()g2JDohGa2|(J+iGF*r9#$RtV|W|$g3b($g#Jxpzs;%wZG zpmw9N+d&(;*Ct^1R;cRK$`xd7Uc&@gnOcX62^id^Uzwr5x-=`(_))!~IH zthAUy)~?W+ZmCSTU`!s^3>RemlnOu{R&aKQlPLt(A%ij~i%ieOSgwM#+bz#>+pW7$ zS3chn0GBo%uf&*AOEy~x;d%|7IE_+4rbN4mE*mlHk!y805H)mSnT!2wY%Ss-;8{+> zvNGj`YAQ=6BN2aLRPu$5hN)XQclo3_C<;6jrg)ZTX;z{+DZwe4q-ZSn5-VsdTZG0f z-AHv!hAKXkXEjOCB3YC~C>9ML8`1~onzou1DVOJzA7Cv zB36PSR^VwN1Vgl(6cMc;1<;BtCplS!P?31w(6=L(S?X|pE?!Hw)G+lRT^ePK6;q3r zSVU+xx>*F?G8Ef1)^R2{% z?^z>XIC;Hi`1&Q~((kX|TySJ~sH@hz)V)yc+0fE5Dz=?pzPJAHhgT<_d$&KZO!C5`)K$@A>&dPqytOH$&o$>dyz! zxsU0AUEu5&1TlU4j!knKGP4Iy9r>!`wQpy$hcEO8#%hMR`O}Hnzm6PRGrDB@0rc!U z!#9uadlP*6(vd=|jHF1Z1Vo3i5opaIKTb@9zR z+iV>#*lo7a#UbAUbAh))QuK&JR&_scBqC85ZL<{>C!(^l448-?)P^)CI`I0NC=ybg z=zP{oc%v>543#&;KutrXPia`Dh$>n<8!1Xi5Fi3f8A(LKnjs~eXcAX~W9u=FBFPYQ znG-Fs2$2QeD#WG70Kz&rOd%N-;YA0@(Tph0LMVb1a6-UI8Y4N0AtZ`IQXdqu#ngaQ z?Vg+Bf_F|dXqr(8$K&z1BThT?SS?P9qKFd|PEi<)z>Ip$loOa{OiLrUfuY1gQ8T1# zh=nNo^%bTQg-Qogh(t56nvp6KEEt}Uqd4gxtdx?0s*;I|u84(`5 ziH!zzQ#XS84?t&L-#`FM>-A$QG&8o3*hfNj{f+3Zmo9)g$|d`4c-5L%_r&BL95~4cVY6~kX;~c zX}Gmm!_1xrZ!)_g&|s-zaL@a1&FYyp+lUsAyTlj#u)m|{ohwxnTRm@mu&U|dJo=N> z_it}=p%pLu<+sE`Tk0+mcfIz6yIJU*QII>osc_^SeaG-?=tEzB^VLQDlda&)}BY~Q5A#J=L!&i0!Uw)>b$Rn_fzGpF!LbWG__es?@T zA6?GhJ8$Q+2kH(k&KcL87rt1r_0+$9-*d4)>&42lMIZLpEeYMVHfw#)oyYs@`WBB| zxwfbA;KtufJ`Qr`?V2}7IveIby82J;=ja~aFaD6Vp>kXMu0ua9-&$SZxfB!EKRBXk z)qx`W_|m&4HjjGZjU3_miVL2t?=L-i{)%$n)b_F`yLvCLG)EezcYhFM8p6}_+sc=( zox7!7JAAIHuzM3-sO?=azF8*5w{{cj^P4ARH=oS9{Ka)hbn@fQ9B#vj3m!l{U%Bnn z$E&Bbmu-1(rt8&2(L0UztXcAseMbJ+ja_d&{_iEPo(@0P)6%=9Z{WF)#_qgrkDy0RFWoo0acb`9#N{<5#rZQPj@vuy;aPXeSN8V}Wc9XO zdvx)a544n)ygNC&rK_u{;b88GH!yoqwYE7rxt6fMbo;0oduC5qIr8NC{aMYAKNwwi z`Li=&Zc6UaMm=xaDTsY&QS{x|pVoCh*1yZ1yXI$4&3(o9bo}b7>`hO_E2r*w@srNI zXZx2nKCttvXMcGD@80q2KW?w@YU?W^?AeDOvHyq9u6g^fogMp^cJjT?ysdH@rhA^= zy!{@&x65{Hlf3}(9lP}BOWV%po$a5uX!k$P=k0JF+I(hO*`$3_^RKreV>({GyH#HJ z`C}EgcU<3~tb_&_eed78-GxWLOj+f#t69_Aj=VB@U1F2<56&~E(!IO%k=5SVhpaKfj!J=GTP_bo`&0~}7N|Z-bP=W}dqMp^w?h>LT8?qrJ7NsgD z^%xIP&{jl6xe@G$s09mFXhn{DVdtQu0@nj%I0qP@s1)$1ci-|zZ3jK)c6PsfyZirs zzu*70Uyejat#@;M$Cbz9xkZGlV!&?_cR9}lBX9Osr@`oA3g61|cyD=e*9_k2Gu}L& z6QkF}TjJG`ILR0U1jT4+fz4pz7V(1C*h~buhqmywv`%kSLIbyIAikbbLR(NZqBe!m ziTd!pW;%9nl!n~9hr}po&1!y-4F>=Q+CuPch9o14+mz5aE)M40V zKVBWp4`a+U9~H=8QY1zBa!eqSNu(GS$QL6bg%D8)MG{yf!=(r=7V{?$2(X!{1UyEy zZjuY!DWOD*#e@rmsi~=gREdBw>x3cF!O0%q+-3t@wetlt!Zie^c(-el1; zMm~o~Xqgm?5&}vmTrij%uts(=Odw!F8(|WP1PJHSxFJP4>`W= zT7gVI&KnaRW~K=XW7aTC(o~|NrzG>k!nnj>{D3WbBgLe$D_>ees|X9Ngv5v#fe{oI zp&F3_M-@0CdJmD{2r^-+W+;7v{bf@HXDUW;sTh~aer5`)h9WG)|1_pZJb^JA2;j5c zK7T!mVVM;KWPVI=7Yl@bDO3-o#lmlGmPlz>TKlqN+m zf=NkOfq@x8NfnfgBota&JhfiMkSSbpx%CruPBA3F_=y#jh@=S;i55oX7y^8hVz8D* zX;^|GT5v}z6bkJW+9tCev>K80GAgHv0*Ew%l5#{Mh9z=R4$HJs8dlH>0#?XmT9Hgj zk_uGJ74%QcQz#+8KNjSYootv;LN_@}(yxAnXavP1v4fT9{Z$e&MV1vxN2a>ffx^CS<*=e%fyNKh;kL zhfE}lIvRZ6g%Ib@cy=dJBm8C7#^1g4)toX1pJHz6*aN_gV;7-~0NM=ph{ev`Rg*Vf zcbF@k=FC~Ke0gYLv|_RQpFdVX2ZF!aU4A(`;YKqudsbI+QCVka=Lc7BR#eD7d)D0d zLtS0n&6_tfprN6m9#STi2CV;Z-@c>kF2=>hHSa2`tQ>vx2paS`ckbNj`|kIL9z1w( zmFOH)c+P7*-_)I!mKIqYyy8fEfB(G>lXGBlN(x%&{-giFyu1aQ-S!5Z&Dd?pbKbUX zTSl$|$1hj^X<&e{ZT|H?`mFyM8!OIUBNjtNce}c}G8VS4-S>S}6|VmJ)X9?>xnERQ zpZ)yowQJX^tE+3oW$BB(z02YQdk%HhdLKOSMB&^!{O=P{RTUM>i|!shdbDV0S8H)w z(HHYq6ujM*`2H2uj;n)Lu3Xt#?zu8&x^wfV8r`f#Io?@yfT_Hk_C1oHpC7s*NU21# z@18i}H8{8GyME23p+z|(PoBiY#`=A7x1^**Q@_MFdwq?)wWTGdVHJk0JRXu+Tljrr zI7wdIA1g=Em0!j~f7`xnVOCdrJ3nsOrcIj`ELiZo!CieUZ@1O|eT{~)9_s7s)9G}s z>rb_|wvLXDK411x`>Iu|TwU6&nf~gfpPfGsQgsp>xw*M{d04@{($Z33w$tO=%)^JD z-80y1@z@-HOfJvNNNx^!5-{Vp=NG?C7prR8(pi?Z+ZScmUo9>5_4WPs%=v--{(p6K zbr<+7?0oT}`gB_Vz(7vWhTx?E^^cz}dUt-7pfIPmx3{NfH`#cjweQ#kw6?ieEQtyE5rlzJ726)HA z-vqdoHN?HMtF~NvEI;2TtM1|Rfpo&_FVBuOTZ=#0HexOIeCWOI;^t1Dr-HyhDuVoA zv?XVoDzmmD+~4!0NFwo?>r`Ix@gL{S&8^S5qjinUHNY2K9Q_J9_t>*RkGQJBjS-c? R7ViIO#M&rTY3Qzl{{_H&CW8O~ literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_candle.png b/Telegram/Resources/icons/folders/folders_local_candle.png new file mode 100644 index 0000000000000000000000000000000000000000..dd022cdc65944259cbb015c8b3988569451460af GIT binary patch literal 2424 zcmb_e4NMbf7_R7?B8t(4AsRhT*kt2+|84K2FrX@B6qzE{#ZB(#YpKw?u6ICXx+S`> znCZw6+(3ys;}QfN&MZ!e^JhAzh8Z)RGX~jW3{ytPlFcoWW&5tQ6&G~I?2^0t?(X@X z_j%v%dHZ!!ana(*@hR~plWDRu-?0?lQ;l;%9K0%G;zf9y7|36#nM{+W8|N5P%Z_A| z>FI1=iCcHO3VBKOn*~`FfjQ(4K(xt}nH>rUQU%Zv5qN!y9UbgCjv_wUj;>%`ge#B- z%6<8@L9nd0s6?u*kT@C5&O$OnJS6Y~T|h$qN=4&Cb~Mb(!?E!iN0Bf@udt&zMnJ^v zDn|0uAV65N1(QgIMXa2ew9pL4Wgrwm+Hk^#lQc$Jc!uC93W*#jj24tV{8GoFNG$kd zN6U3Rz~gvLO^vyRHmgA|PI4TF6BJHS7(`&&T16K^n4-;#GB|)H1$_bCrz(iSD2Qs6 zZbzZg;S~IV7_Fj3$^;9BhlBu5nh7JNFi@6axIk5~G8|l%a8L>SK+!dbC1cn?xvHyL zx%v?5*yjfVz|y*0u^6Lj@%v*TG<{(;Oe0c|QPEn-+5o_p0!^(7N?>6%lsV7HCcx(f zfuO6w5>>5?E>v+;GLn~PEDVRtU*S_^wMI)HF$XvV9oSKdpa_g$F_JAIZ9Hq^3GzjP z<_TgL>QZH&XYEL+&45w_&$2wlJ^+QTkp*4&Pp~ZU9yRC}V9q|j;01U<@uEnql6;<8 zsRm(SsE!V+aJhJ=qUnMn0jI-`!nDmkpUjIK$I!Hu#ykXo30N5qCQ>#MBL#-`cz}%| z1zU8!LzSwG#Wm&+`&?Ef$ZgVdWIPPb7!yTI;ur!GD2c_aG>}Ek%Go4AHVl0~a+D6PLZ&6rl8GC=0x6K;(J(Fk==fm= z^Z7nQ&)SHJW#EmN9wcm9UXYAtw4;*YLLj4&*S=9!>#^z*nO{>5An7BlIUHS6J$j80 z1UX)~vXA3_{9*bvq59G4DUZb1XaLP+gEo^GM#2OOL0}vud90+!(V}39W!$pU3N+VWFet^Fa6iula=CI&3xk-!2S)8?g&SEe*F8 zV;I}h;6rRz1PUxw5bk+t=hmc{Ok;YTj+~PGvjf|@+sC|;{IydqwNxirlFom#;y}aT zr|ar+PjA@YdaQLzL*xEwGvjB@0bp+G`BSTRWehZa*7?y;^^%@X^seRwi+ftUWNV+V z_U%@Bkn@Hzi*~q6pWAxwR&Wrx(qDDwTdh4=KD2Uk=Y?Bw3Cx$h zgID{TF7`=tuMJe+yR*D~dFNZl=S=FjRQ^)cvDfQ63iifbU-NnAiES6sN}ioCu6N=O zJ<7XJSyHy_I{NDVMWyBsH@05vbC-Dz&DfV$@7QxGKQ)-O^CaI|w5rFQk(Az2uy@*x z{o{KxT8qA#izdBCiXEjDyNd%yRzXPn6@J$H>#`D;+;uM6^TE9w%l0k6O*K3A{xP)v z@bv+mZ@&_sMr3ajb{9{$GrN9q?H4`D+``mp?y~Q0H_pC0w0?8v88IjE`K{-&-`V8& z*m{yl>AtO})Su1WJ#|5X8N2*F)tr#_Q{c}T^*$AR3k4gUb)3O|?t literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_candle@2x.png b/Telegram/Resources/icons/folders/folders_local_candle@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bb4b4deb63ea77324100217c307288a642851f5b GIT binary patch literal 2857 zcmb_e4Nwzj8cwT6Jvo#XwUM!7CiW~UOLmiNlHCvx5;!76kUu%4mCf#kWK6O#*+4{2 zDqc@e8N^g8)|}K1bvW+ir>Nz}>nH-X#~dOm2*o;DD%FXcGN%;edb^OM*rA@&xy)?# z+ui4T-sk<>cZ-wO|1MyD@O%!36QGV$B{SzZ_L%oF^WR_kW*~F=wI%NNHV(%>h&^87 z96iS6a9)Wtq-M|=ngkT5Oko&7X~{5$$-o`F#C zH^LfFV^NZNLtLJfOvziHisx;`5rQ8X!3%ew41tNHF`mO@G}};zffX|zP z&|4M!DAph^LzBc)QdW`&he-e&62m+x5(Y^`Vgw202|-9E0A&J51V9p045C6I&-3Fm z)~tjMO;*KvY%x~~zMiHns6ddLn;VuZ3Ztyq0ti760Vos*g#d#9Y}?H=<^asL6A# zHDQd;1{0P|3M}SqKF=3PR7n{rD`S{ZCz?{B(V%LxjmFG4sa7fYjN4%b1A#(_R*K+K z7!Zpf7!VO+5WvK+7|>xLEQ1M&4hJFceien=+2peOr|X=caE9YYtDr=r!=(}}fZ?zN zAY@_;kl_dkh!I!}5<(o2>11BEM5}>mHOx4Zl~qMBj3A;F>%<~4fD1`2fFrCbAr1pl z5lLtfDI&u$f-UGDEqhs_82@ZcE^VHMiN>-$E2AM|cF`~hBO+1)0}_aU0T^OLYhgqR z$Vf4cXhA}RYbD_VwpSPm-t=mkR`7iLQx%NH8CX5rJt|VjZ9YA`siH+OoNY!0A7`tO zB>0}&hFP-pLUHlz&()I*>2peR+PaO>(YctFjLK#*`y$mZ_&NPHEa&;^g*sd;6Oj-A z$;3JU7mINKlYk(A2yvYh(jp=)Ch>YdQ@yuaAOwY_-fsDY>OH~1^_V%EWZv%r{xA3E z#d>F2=xqKx)BXQff2OK+y3_tL*LVCB7LNiuow1V$prKyK>^=Zv7Wo zc02sWvZYJUXCHe1{khqt^JK1n79|c&PW~Y_)=yYBKAzVks*V4us=i)`k|4MCu%omi z==Ik-T!p1OcI+T>Y_=fh;>?r=&Zf{MJF^^)Bc0K}t`mi^f32wC1puBpWxf7**IUj@V=smLskF58 z&7Q%*lGy$4q}SqYZEa6EeG!q7&V=}Q|6oYJYFNE{^SFi-J?gzHNAIs{x)8%UdrXx4!AGxJLYngiB^5^kG9cYMdjz`M@PRr zF@E>+xtpSfA287@DEP9!zyHdWkSh zam(V(nVBk{A9eVvn30i@v!_o_-oD(|H*Ar8R^Hf%5L)wDIRup*FD@y0&p)89@7ArX z1}@!R)HXgb@o`&4Wpt>YJHLS&?nu~Q3_&YbE~sm05Z4u}E3Z^lRaIA4yWQ@VmhiHo zsO1eUEeRX%Jaq8S#E)J4#@hJx$X!WIOiYY6FePLW^NmEqyVkC)OfHTJmCHX|z#aJgLF-5X@b0&6Yr9vL*BtaCbp zxVs|HS~;7!otG}X8Xbxt-`~E?59QrDR$jj9j~{OO+XDZ6-TFntYb8?YM1I8ii>O@w z-j2SC%UzwFj&nCh&h+>774?0cFKBFRwA<}XBTQFZy?XT`+Zt?#?A*U_zacO1 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_candle@3x.png b/Telegram/Resources/icons/folders/folders_local_candle@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a5e43ef134218a3673b56a65b6d55081973c8f79 GIT binary patch literal 3074 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_candle_active@2x.png b/Telegram/Resources/icons/folders/folders_local_candle_active@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b30a025142ce726434c36f10ed7a742c9beaf9a1 GIT binary patch literal 2694 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 K9FO?J&i?|phE_}f literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_city.png b/Telegram/Resources/icons/folders/folders_local_city.png new file mode 100644 index 0000000000000000000000000000000000000000..2353e21c0f5db9dfdccbc29eb285044cb6f42070 GIT binary patch literal 2691 zcmb_e4Nw&489polR1gisAhoidHh-|UKX-d~yLckpsSr6qIQfajvOnMbguC5icahW9 zl3Jiu1ZFhQu_7jI%(NkqS``?bBttY>rISoMV`5`z$HovXp$!VbsWJ9jI4;;B#%X(V zyZi0#^F8nLzTflSce@JLuT7YfI!C9|CFJEgir{s*cErtsXOT;M4_;;mbITQ-Zf=rx zMCpFso}$ymX8BxYYMC>i;iZ6q6(kNALV+Me>vSu!LP3_V1S-M-k59De|9R>yJ>nB= z`cle?JA-!M_2q7tLGkwWE`EC@PYe32mB@+^0|^2^Wsy+8FDgvPrk~(t;8=T%>5&PD zT4~c~YXOlmXCY#jWPnfxGs+Vt3bD`z!fZ6rbOu7=gcZZB7-2*SGh@OTl0?EEJ&Yy` zZl=hwCL9ai+4Npj4Kf&3Q&VH8F&ZSpSCBnlCzvQ1Rk5GpFmrWhPR;bmV? z^+_V4F|wRgt=jZZ>0}ClV1!mw!exR5!$NEjBMi8f(gaZ8Be-C-?4JlO@EGue01#CL zVu=Vg=#^AS@k(Dq9eI6E09ab5GZJG)ErCEJgrctA3eyM|WJa{&+7<*@5m2ORnFp)4 zLYd37Y=Vqk2COQ{E=lrFEmYx@WW;XQ7KTQiDD{bgRHHmOZ4Pj-DzNEEoWxO_LJ7)6 zSQ*O7;6yrZWN>^E>XZbZd)suVRfCc^Lz&_C9w>B;z^d#wf(4#&OLBmPIr{>v2Vg16UmMP)@E2pEiA;(uySvMpDW;e>RRsppDlYr7BZb1b=u@)M* z0gm%iYz49pwi@f7&Z?;rAfsR=IkS;7qh`{|q7-j3Lq>{6NkX7_iY8fsHfo0cD)JOd zHq1|fYpH}ACWrNeM}FVRnMG4LMH_*cLd}pJr3e!XOF&ytD=_gihYLoYGq1q3UV#+I zyMO!%2Q#@oP0zNliegX|(SuBwmSK6V8EtxAb0HA);m5uiR_lT45}se<1(5VU z)|`y4NN%-;l|i-#uIz)jANxA}3cL0G>H%&s3vSkoT1^%!YUNEd%F(WknBwzwem-f5_*7dS_DTO!?f?{r}f|Cfqt{HS9lK zIPq@UE-+#ui5 zM@^ZTo8ph=F5mm~;kLH6-Afn7$1FH-=n&R$>B}!ya!E-^S>G)zE$!*<9vlgEcXvO$ zE1FxocCF!Ojjj9l@6UN^qsz5;$&y#z?5?k`-?__o;+X}i$K$E49veS}Vp!w94jw%C zNPhm|qS;4VT27uiRsPAJA4)oQc{pd!D=8@{x5mVUjbO))gJYeYosj$o;6i`@8(XBO zG7ofgyu0qTuC9XUlfAt!;v=CiTF!X;hlYmAGGZE(+S)@O#4js#EN#nwY~K-2?_>LB ze|Ynz5(oskUrJ9;2M_b_xQ{KUAFgc`qT*w|bzC6JpMCbu8~N+j_4oDl4Ger|f1YP{ z)8)&XezAGWmN_4ejEtNl;r zSnJ&f<|UAqyr#j7_b*%AL1$ zon2kA_UB{h9#J^^Q!ei4Dn$2}fq{n-6B8R>di?c2UAy)~%B&RmnfTj3++6jZD2hwc z(lRqMs|LjJp`rA&sEQ-0-wXV~>%teElO$HJux%YN;; vk#M0s`q^)~PcQW7o{_p?q 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_city_active@3x.png b/Telegram/Resources/icons/folders/folders_local_city_active@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a1cf0cb5212034a49558cea54127ba0efb80d37d GIT binary patch literal 2881 zcmbVN2~-nj9#1_0tx$!Z zlV&lqG&3-QHb>zkt*4@#W-B|16Fu2!#feOc;pwS#qeTHdIM@jBjHCjZiD(2GYYdfP zRAt+!#B6O6k)27PBs6&vFWQL#0yD+nJg3=Yv13jJGX~!w!cd${~)TZRxNOMNwEFf<+=eK=ADgEe!7DTkIoy7?hNquo?i5-??=%#?+(1FX=8 zwPw%^ZO@>8gWC7{7Xl!)8jVlmjb6-VpM;&6wg80TO~@P3_N0YY3QnNxbe4^vrY!(A zN3zjau^1bLGqf#vCJ;^#h%ten8>*p6qhVohsGNn01ejQcNswPaLD!Htga1!3Nni%rX2wCxMl+sH z!B$H;#Pekmi=j=l4G05wVvh@r22)$?3~nJPwNe3ru%nDd5;#Cm8A{@O5o(a~#fU`4 z$K@atl#mPcGLaZ3Ws;uxN}9-Gi_6aM?sJkR0LRa&0t1dC5`yC6GD^mm;1UsEFEgNg z1Bu8)Lb*Un7=%4+I-3zJHQdyjm32h|Mwtu+P`!vRCM7tZBqU-!Dn+Gy2`bSe0z^W} zaf)r|pOt%9rhxeDpq6&;f|-h^dq*bYq&J%egs7O3B7CWkMEHmhDC$8{_;N}@pn3r* zCiK#1m|ZJ?g4aFjriI_G@9AJnWn}#<^two-{^aw+^E54n6YOGCKm^-`6bX4B8{bf^ zcgl-*z9WMIq;F}>Zgo3tU>vxOnvxDG`!3xN|CWC{zToZd->uiWZS{8l#?|tFy7wlB z$iOY>6!^Zw5F3xDy4|ILe_b`tyIx<-9ys_EvqRq=0B(G{2xS4(Hn2yyla(1@Q*x@6 zQ<9v2zgMb@Sdw?mnUNj!ljPg^S*cpzrQ3QQqnSOM~kYV zxjFxC2J~4?|K{YlamvI4_(giqv8!Y2*1tSE@!6Tu7xuPN@%6v{YioP-gGYI%(FZSv zrxz4>wlm-5qX-H2%;XW5C)GDJG#ozsLr0gO)qhU)rKa!CoqJE57oU{mjx%LuE)G`} zD0?05*J`acXo9PuA>42%gv;eV5*HN}g@%S!DYu*p3k_`=uxi<|fcd!yf(%_wWoC9f zUEKKN-3JdgmX*1Jch%Gceei(-e_gh(u1+>_;+6B~gPG^YjvsGtYx|^eZAC>zK|#Sh zVc5{2`)g}&JonRTwKs0u$e+6TBx%bXmYA5>DGU4X!+TwM|2b%t4_B+zqIF-FmEC)8 zV6d{&qf=5+YA?)9OWPLuL^pX;g)u9utE+2madl&3+D})wDVtMv-dd-rNKj0gWUCDf z3TpmDpOuA7DB6GNWi3Tfu3&#ZzxVaP8+hWxiSmsb{ZlqyxHCho zF52zBc5UvufUiqS*X(xRxdm_N4LBsv}3r4_n+$-J$yW z!E^O#X=!)?o}as%T< zMMDnHeZ91#vU1Gwreir@0=wB7ofP}Sh!N?>GXl8Zg~axc4^LV#YV`S^zIrv?5);#x zF66HKbFrp6We+atH+Dty;8w$x-xppqe%#oE7G;a}<^uMFLt`r|D{b0~cbG$?6Goms z+16FUz3Z5;ebA0;A!XXJ)nA5(hqqYP#NE1mJAy8Z-6B*dek@+OD$uX*u-KUIKPnfD z|GfDx`cdN^zIs&_wR!2%r6VkCZgq)Ao>pJIem$r5oNFc`=@)o&z?MGS2aWeDF*A|g zz@Bz?>e?Gtkl#~snC_z zTPrGD-4Pw_8}RrnV7tByhL87;gI>@z+fO~225I8r3;q55L09aDH*t0a??@?m9WUJ# ujJ8Ca-sw&YiW_@=>r~&uX9u72{*kt#TvvYK_V4Di_v&d{WzE!i`Tqs{-9`!k literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_desktop.png b/Telegram/Resources/icons/folders/folders_local_desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..1363663a635bd09fcafb2b8c2cf44c40ab5800d4 GIT binary patch literal 2271 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_desktop@3x.png b/Telegram/Resources/icons/folders/folders_local_desktop@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..fba4b26af98bb71eb41d5dc8c61311d929409cf4 GIT binary patch literal 2432 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_desktop_active@2x.png b/Telegram/Resources/icons/folders/folders_local_desktop_active@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cef1aa33d4c9ea135c3b1c2e063115d8be2e4fc9 GIT binary patch literal 2596 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 ad47+Af!4JPcGqWWYxy}2+xG0@g?|B6HD~q! literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_earth.png b/Telegram/Resources/icons/folders/folders_local_earth.png new file mode 100644 index 0000000000000000000000000000000000000000..086a78f5c37ff39307914ccb1f7e1621b837fe3c GIT binary patch literal 2541 zcmb_e4Qvx-816QM14TgrC!o0;KkC@^etOs5T_|I$z-rc7wq{J@-~D{o7TUYgyRGe* zAZTPDC<|hMFcc%APFV<&Nv05#IdmF-mtlsY!3l}Mp)AOP4!`T4(*P15TZC~CCrpkKv~M+qII!wD!44+APgcvHFSt2bJ%E5Gc-M@ zU4c6H_-_GVX+54?jLT|?L~zz7B-89&ML49gSbEW*YU zL>lVRTD?$9uMzUbwf}k;C4Atn6@<(l6g)PIe}$ajFD&x;|LmHtVB96nE;B!0g|RcItw`8 zrAc+>;+pf*K9@BKa{LvQksWqH1PmrQ90DdfXa!?sg}?-bW(Wn?Y=kUi)!Y{g!B!K( zBUw#VGGqj_A_G#8F^(f73@Ee>V`+keJThzJYyxXjIMdL7Mb5I6!TfZ%mU^aP<_Uq! zC>)w|1u=~b+mj;?Ep5f@^hEC5&b zTHKFcNxv@CUtPUOF(hdxDU78U=rxLl#t`f_jFV-Ovl9exuwpj*k?OPELNh!~XS?M; zs?QWh3JPif!1p_j{`Y*Yt#{HwFPD$`qR4gs|C&$At!b;_|8!yM*@#^rYiYQ(n8Vzj z1}}2EB2ZzeVsOtZ{P2^-7E8Y0?JDzEbe*a3v@TmT;b2p9-ZZIs^wy&bXHw&bwl!Ts zhPD+~?`qs|rcM$P+M=M`1WAQaqsSe8&7}r%)plJesS~{G9`QuW9I98%l0F$_RVj9xNULC zq*h@RK2gCN|j<oyy4~| z?t=&3T##(~w*9H{j+dS&TzTlksp(H0%iq9$*;3hXtZQP6zhKX8*R?-iA`?ZYhn0QF zS?r(bW+l~8u ztL_dEMY6lTwP)R?#M=*kegnCr_2IU=yv7f)1C4yk!HMtpA6MJk53hKm^Tqge`FS5{ z?S1#3|E==r1CbqX)^scT4zG17RSgG|RiEY$PFQl_mjr~nOFJUY(uPUV#%st=h+B5Ib)qes4^?@1y literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_earth@2x.png b/Telegram/Resources/icons/folders/folders_local_earth@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5751b69b91a126fd5b940a24d53cf63f09a18595 GIT binary patch literal 3251 zcmb_f3se(V8V<@j)gt69|w;lPHh6Rm2x4 zAcBfdYK8TIQjnq|F1VGmu2xqn(qrM2qSf6M3<`))MY|JT)gJ45dUnp4%$=FDG8l|8K{9DLeU;fx`(gBNLzd@w`r=@etuQkfj?T8zj&a}+i@_M> zr&TB|N_j9w7<3$*G^i;~qRvR884Mr4L?cebQ5HZ=MQimE_LItLHlQUX?B%E&k{bi4 z7_BVXL`5WrD2U`ZLQJy#d;y_#p}&jqJ-VYi_v4-V=f!$gIMAu?0L3; zfKna`1Q<*dfN}&N0V60N6mwt!9}$b^06Yj5aUl^G=7X>RLm-UD0|pK@9nC~)uyASM zKrH%B!j7?6j2M@jkdVMh;ByS7Xf7-ki@6Yw%j1DG0yHP-EqEfRH%}jAkWyyCq%~T! z20dV7#MOqi773eH+Mj~XI7F*A50r^67&j3&a$yc+OQ{b?5<@uST2p*qaFXCs@sy6z zTg)^T9>N-93>Jeq#_&7TL$BWoK$li7AByo#Ejry$2(x9uIy#Mkg1i%LRwNlIZa8H& ztThqTf_1da>9%Z)Sb&MbEe4aqV2B@FsL(;lKtOE0zea^bd>$+!P>|vY zNsvb%FeoA^5~K(iLIp5R@=BEmNNEs0C_*4H zh-*j@U(Clve2v&<=wBlbvdp9NGt+Bn9%z{Pc=W(1UhDgA(I|w9`IGlK;;=pXgda^D}n&%u~XYtxf7pdy0$WJnLtXIcy=Y|SWP z6E+u8Bzxeo_8qJBL3J6JpAbXQr0=n2e{{1!V@beG)VyeVWk1CI+~3o0#@D@Hy_$!@ zumI+PA|A>E#XJN8aa_QsT}Q%V0R&M(k$N!uH`Nbz3xd*i9qg7rsD7Y0L=3Kvrs(fG zm;J}{`LN#U7y7Pz-s=AUYd(E$?YA2Dw=V2^_r@+TXlZ(Du?>gzH2P*}SETfGsZ8{q zcOvRq8iO&yEl4^~5z}OiTgdxP)YyO(l}#PW7mR=(`*?HxBlsZ=r^X5tfBtP2$t+Lyhu!tfqs zeR+BLh?!HGuV-at>GEC6Bdu2J)TvV?d_K|R5_}i+yvz=py{BMKMPuViKR>_24cD(P z+OufOM~r~yD{~evUQAkN*nfZGUnM0aR;zC3=)AH~MGXy+XO)K!9ooEgtNPie$;oYx zAFDk7=2d>0J$?GLY115xJ+EH}ZkV6Qa&>iZaDZb+T(GvaebJ$s;N-?klP_7~tSUcu zZf|yWc1}*t!Gj0$^T*}8EOdx->SdlHV`I~2FQaGG>^Q&D^pHDy^#W{d%3Fqhr|8$&)909^bN6Y!@=c-M!)dNe`=N?%cY#%8M77_Vz%A zQlpuPeRu2Dk_bfgkc^K0^*FH>vRd=(C{UM$bU7I{sW|L3m!8UAgKK{-W5-tMit zjF+mbTjiHkULMce+wCeQzHm7#JhSZ6&pvzI=)~c2pR~0-@9wUvt7|VXsdAmvd4=|I z!>6k()%WanJ?rjHxEo$0%DQyPC&2Z}tF5D=qM}?PR(jc=FuBihaa?*+Q5D`rrgcRc4*0^OYwm$ z_Qaie6V%}+C+ykwDo}US0e3s)&mY15=aF$W5?WY9@<#pv;}r&QI-ytpVS?s5$OctJsp;?+8{IRH5Q!;e1-g~HZc zg+iffQuEw-DeX+RjKAM$xZD#{#Hb%G3b?`9BlDc_eBx1;t*cWS8XFrsJ34p`EU9-? zkphgC*_Pv#W~!U9fRN%1zBTB=68Z+W*C6QBGI<6V7B^ xBRdj(Qv5%!{BD%(8`S%A&k)&hY>M literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_earth@3x.png b/Telegram/Resources/icons/folders/folders_local_earth@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e7850d6c8fd6c532f688a94699ba0a5dba885e35 GIT binary patch literal 3677 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 D8pi1d literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_music.png b/Telegram/Resources/icons/folders/folders_local_music.png new file mode 100644 index 0000000000000000000000000000000000000000..a83360a2486ff6c5b9df12aeb0bd2533934af7d2 GIT binary patch literal 2643 zcmb_e4Nw&48D4=Zo(-W@8HqA(PD4!W-tOMs?%i%U2yp0uo*~GnF=@j7e9Nug-5$3K zcUWtym@$UfXsMc-rXz`op>g6^6q+UxEjm;Upkr-f$e0T1NIOa!wfxj6{g(R)NsVX04MC<% zHO>jhu3ybSkV$z;`3il7XE7(LehV+D0oV-Yo7gqxv6+opDaGD3+Z!@Ec z&b6zf*6X76%ALu+9@%sWA7jc@$csV#WUgKtT z45F`gn)8i-=n79MTBwEqN?RCAByBWmXDuW{*;w`msFffcIN`ua3L_cLMsQXu8avD| zT1b+)GS`AwEcoO!dv!g?;dnS4wuC8*8mh!emSu6mid(H1L||HNK<6V^K${b1Z~;vW zDM4LP1E|5s3u?9QG()A)6#T&iZ9t2a2^I{G@Ijok5JpO4KuJvCg4H44Sa3Zmal9uHR>&~!c^f?}7`4AZtKio_8zX(y})~H7T1^`^|_>qkmJj!GO$t(kpUPb$P#8{Y!b%vgabO= zPE%I9EV8ma&h|t|fvv{-#;NY~)jN?<|@oXqEyDjWMJ|V>D^wF@a|7m;=~ERv;uw6qp>` z=oLtTMn_Rv{O<9`9L%{DLr-l?#Zpj}(1VVdmg7aE8J%X)a3O%zj=omzuv+(2m)QKU z7eLaxSTh<%Q)NBOhd_QMT-keZKmJYnHNNKV>Uo+a7$C41Ei!gY7Hk5>5(I_Wc`J|@ zAj>=h;@OW^AMF;BvyvQXk9W(rR39sj=;Z^I0RFz?=5L?Rz4cC1=zr()weJ7F<}>Ej zsMYYVyKwB=xLqJ_X}Gl*!^EBj9}>GF2*6T>;GXAAS+EE}l73(8$}e|!TwCT@Bs@9e zXQ|1{H*nd3*Pq#F`p%2HpQcPJH&#d%*XU2vQ#Kb|J^9>LVMBe>pI(?(FfD)Tw#Sd< zot{+kDs%az*;9(VSB@r6${e`*VR+YT1HGZzfg4rb9sl|@MNwOnwcv&0y=vW7_uSD_ zg>RN+Wo3cp^Miwfv+KOJ2c9puI5ZTguD*53_luIt!^6Y-4^-9GHZ6N+^xTO+Yip1H z(UFmnHJWzg$LX!Dt%p`_S@+kP_bof?+ZsCh8dn|{s>0#r^QNUGrzEXEF1**)wwGx8 zyt_kD)t5_#)*k-HU+U_TO;>Vq-+Si5z~JQba`S;kpQ$(vmpPJi$${-Yf| z*RuC5&Tik)eDI*lac8?bgkkDI@Le?b6%sxg$eE2$Z_(xueJWs!l(c)HJ!&<~(TL{bbASkGi_L z9^aI@CwuTIJ#Y7%ZK-+94GmKv=8+Z|$MG}Xo4vhBXG7K1)9a7Vuzzy$q$zho`s`!< z{r!D?b1Iw9cn__tudi>fc)no$h3?cV;K zc|!WFWG$Zi&%wb_$5i*fuU}7lBPHVZUmG6&Wpif6OWB<=^}V97?ECY~nKNyfX`9$r zFCN)bJj>G8xo_Eg&(9lnY|jj2NS&J&wj4S{U+`&KL-v6Ox2^xe}4A zPrF9tnn=Xm(68^B^;yG0=CQ|~w(Q)T;%zKV&1yW`Ph4NH_iXVOLwVCOk2ICPC_TE} zv?se2nTBV6=6z-HTl}6gUTI?^qH|e2JKi|AstW1-OBZw(G9f8X-?5#`exeHYH$GXC}z7cFtU ITTrp#KVoRROaK4? literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_music@2x.png b/Telegram/Resources/icons/folders/folders_local_music@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4abd974721cf12146b780541808ab00371a44c12 GIT binary patch literal 3325 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_music_active@3x.png b/Telegram/Resources/icons/folders/folders_local_music_active@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a5e39118e8f2907a9b427b8fa259cfc9be65dcca GIT binary patch literal 4407 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_news_active@2x.png b/Telegram/Resources/icons/folders/folders_local_news_active@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5da39880d4aa54d7a34030798b8b8a7e00221cc1 GIT binary patch literal 2535 zcmb_e32+lt7>;;QKtZnBk;<%FkfPn}z1dwz51Q6iNr4(MiUaKNazK)e*)2&cBTy_y z7>anH12TXpid7I9b(rEXXgl1BgH^FpC?i!tD}#VcQNXup5-TDyj61t;-|l|z`@jFn z%i@U@58l!D?!Fd_<&N?)MpjA>e8CYY%FhpA{V+&$oNtp=@LoyuL$SnYaB%q5M!ntEiw%vZs$a# zSc?FJwQ`t3GAv>ftRzP>f{=$$1j*wBkCQY;aw0>B6on)Y6k3a@9AWEB^XSb(2bH=(2Zn3u8P)O)nR~F0$r<$D4=8(l$m3C6BdgjKr*z5 zOVa|WL`_UdMv9Bg#0W_4WB!n;MfK4=)&PfO06R(%6oC;eMzSuF7g=5;$Oi~oB#3UP zQ&at(>Yh*@CfG#~BFRAX-=MH+RLPM36RawtM~eg{=(9g4c>x{{c~K-CNwHW9Xc1@_ zs-qJsoKCSkq#II50p$)m3f;E){i?`Gij5#;6_aQ|#cVu7V=_gu7^CpKsxlJ6d#KcU zho)4S$u-w^*SV@GkmE0_HiBna55ZtGfCIrYB*v>8hmnlU!*G&EwJ}PHZ9>EkTTKe| zWHnW(kdg36faWM0q>u$n;TZ+vIZnY?p7c;O;5o*_nFalqg#WKIC zr#h+P5%5%650WTaQBuriw4;hyg+N7z!_)SNQYK?*Cu?NmOfhso_^vVd7hlT_9D`aBDHA z={*fTq<2LSf}x7QJ#R>J=S>z%uZnUHzPiI>duRYZ#~@c+^g@Ej{5G>wB_jj zI_;G%y30Ft>YcX~CC=sFpPOGW;P}?YG4~6rKdap6YG`@8<>b-cz3iXRt1G6wJGtXs zzP|O;`MX}r%j~z~=;qglGSNxBe>ihE^w9(;V?T)b4mzPJy7CijZA&RHi14!iv} z;;X)k$lJHJg<5jBRR_-2d`!u!4wTyELnqD(&9@X4ZW-1zxnXG2{yi!>+skLym##l_ z!oaHe?6q0j7j7G|h#tOdUD4u4FCtrf%-bz9mX_w6xo35Sms_>7^NIHlop@#ZeX#-3 zih;YP6NU5Z#?5=rojYVuL&mV}Q#VJk!vU@%y7GXh&yo^!;FdV?8*zHm$kxse|2Q=v zf6b`8%>D~Oyyd5=uGJeVN6%=QzN`IQjeYp%t(U`%Z7)4kcQ?8B6MKAJR+YT3gL+}l zh!@IZ8=B|EvX<>?Y_qcR($eB*-ke^x)ZNhX{F=btj>xmkeEr~tj4Ao?=GvWW9c`N* zu6uvu?lZIVGJm(-Heyhpj6px0TlrP{yg3JR7s%&_&hPjovhB!_lA$}Wd4=u6M~yi? zhZ$LU^GAjGEV6w6wp)MQlfC6^>#|7?UvTD07nCobCz?-X#qGaloe&0Ga<3Tq%(Qmv zgC88+`}NkkAA~1+&(2@-&^z_J)*tXZ{b9enGhNvW++D%?PmkqhE^%ziK0S6otGuMS i_T{Ezu8*HT-T!hnHR1B^Zwk!6V&x?jj!omH*Zv7rvwNKY literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_news_active@3x.png b/Telegram/Resources/icons/folders/folders_local_news_active@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..24eb071ca2d17eee061d5f269db693d16fc8c4d5 GIT binary patch literal 2364 zcmbVN2~ZPP7>-tL)v85XwG58ijaaH~b~kqxgGGXZH4r6MtW@3XzQAIV4Z8~juwFAN zjYqkdir&gI8AiufVYOfwoQ3nHmj8xqG0 z0MV)R7(;4xh{2>H^%||oGy+i*q!A~KIH|!%J*6cmwHgWjP^c!bPHLiMOi&Bnnb8bM z@=`dSo13f3)u?zO9VbmD6HcgcwHkv6Ow990v=8%$$~FcI5E+5-j zIt_&2_J(LZVlYiGVYrX>;-rd@L-GSzCWP~53ogGn%izET+`uD=5KD%z-V9#i#SH#A z)S=hU2*A`@ts#vLy|~>W2~mpAfnfv_(ji*3=Xn7>5r}-Yz<~H1Xj3Ui268-AH5fE%z!FZ3a5^=Z7HA!qQP1cxV5A9$nlx%@z_zg^3mn{P zw5vUM&u9QOiIcJ%j0tq*JW{M!nXlmmB)2avMu5j8BBM6oVUP zG@Txtxwx2)P3s7qNdxpcOi!{pOh?Ko(3uRF5oj5cgJ3m`Lq8Ii_X?yy0?beiA_ZiH{2>0OrD#UpjAoRPyHL(g;4#-hwO%SO!S%Tr0Fu6-H3Kpt@04+@!3Pg36rIIHORU}Z$L$M;GH==xbF*&Sj;r$K z{i4G9M?_O+U-hoYRGzH=df=|diuH3YepO#Ob;Y*jn-bQKi`{46Qrd|du-=w-!IgvW zy|FZ0{Cjru;>$`)vM@4cu>bIqhfCJ#>gts%S1zPa-fA2*&9?2-_LTAuw-s$36cO?5 zn&dAw78e)q*s-HBy;rwa;wPjHkE#)NoGI?P-af3-MhtvChgw_tenmya=|K}FovQTq z?$hT?c$PMN@qqh}9_5sWHK3V$KC(zhwN{jBY;8@ll>K;x3|pLFLHlN1QO=$dcM z6Uo!2Pk(p$&-M4tx%3gen_F71H*KGHdhDFpv-4vd+VHw_=eoC6QP-Y4c~XC`p`qcx zfdh4Qb(ijT?cC|sh9y6gHYmrSVa3(shxA=?WL-%~L`i1Mx~5rG8#XA5tL<-sEZ_dR zN6jrsNt0@|Xy0Xp#c!N=VkTGCWJL;*)Mv)ENyW#m9XS&B@Q^mVSMzV5FIf81rwa-# zLs00l%DN<@$T@U*Vp;9#i_y{19}Hc-kaiVRRacK)R91A%xq2tTyaRzzwklf``*78L z-x_?yq1tTom*ZLny;*{si|pc`J^^-YEx-uyk*tSv(u07 zM$b1sC>g%2&~mlpF^`UTu)Fet@2#pS9+!Bzd062$_tw7MGnlif$_HilBWEiGO{H6JwzeMZ6Y7V1oB6rwsardXe^tuQ662FB6{Ba& F{|Bn|R#N}~ literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_phone.png b/Telegram/Resources/icons/folders/folders_local_phone.png new file mode 100644 index 0000000000000000000000000000000000000000..f620c7874e417f4867750d794f51f83c6a7a315d GIT binary patch literal 2172 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_phone_active@3x.png b/Telegram/Resources/icons/folders/folders_local_phone_active@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e0cc8e54138b97535e34a5ca6f39c39b38929235 GIT binary patch literal 2326 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 K%e7-_Q`>JW&y=nJ literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_smile@2x.png b/Telegram/Resources/icons/folders/folders_local_smile@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9685e77f6121d280ba43e2a0e9c6553bb0d6abc5 GIT binary patch literal 3477 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_smile_active@3x.png b/Telegram/Resources/icons/folders/folders_local_smile_active@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c2fc71a5dc59f5851b9f39a175d1e4d61c2ec657 GIT binary patch literal 3787 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 B_fG%- literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_sun.png b/Telegram/Resources/icons/folders/folders_local_sun.png new file mode 100644 index 0000000000000000000000000000000000000000..a0383a2496ff07f2d9d5eb7a0081b2c6d1600969 GIT binary patch literal 2470 zcmb_e3rrJt7_XY4qUfSd(JXqN_?lkt)w|xEEe0qEXpt!cHq7Sr?q6D^z3%RS;%lfg z(?O=_7I8kZDaI^|Glpzz>cl4-6Jne?Bx>ekB*Q1p*L*D7|JqW~s58r&TC}S$<$|{adb0%x*^_V z>N(k)ldtDHrwNkcGmEm~0_LDE0MRCsZE`RmN^^mZxIm%TZ%421u168CY)A7LC*cgF z0FO6)o(g8p%gT}F&6Ri=ot%i+f&wJ)0bN9bz9PRS1np>uSAc8dHjW}8h(6bjCK&;d zd}lV2qNo62%q%9676!5MW|E~XJU>SS;LO;Wu9-K+Q!gHd!T z#kw7ZO2aAm0#RDO7AX@f7#`HO>geOg0>IKbozWOi)#CF-Luh(x2}~nWkf)-xoU#DGX8=tpRwa;H0%eXevIz(& zDiC!=%~6!1&PHW-N=8yrjK=WDxIC|4R!X(;UETo>Q3rOEA}9hQ7>s0cNKRllfgmRk zv_KGHs8f->?y{~>&VW+10i~J8pwKn4sEhv!mL7ri(84f!N(>8m(vOv)yLGUgLbBi3nNYWx=yvr?NZmY;hgiNw7 zneBYvp-9C>bB*`IK9>~ zy4TQC7Ev)1yc^YngiI@lk}-^SR5Dx$WHfTy`;>0IP+cPLmwEsseU3H5(KW@bmx?M# zDukVV5%=TI(yxgn&sWdWyd)DMjnQt_in%4&RUU9MMp$T$CxMG1T+kh1SzXnKr-c$2 zR$!vj@*mYl=p~QnF9h)S9Y_CrJ})*q&&ubC>HlBz3Ar_FHT+2zhMslV1v)Jaw-#d= z-P7PjbXNp^SSl6nd1E_H(I!*(xC}>9PWlg5bDb57UmrAl zDn0R+*a^$f3diXV2QT{DjAH_vrB0Wi!6WVb@>Ph1%Ap*#xonuq)~Ig2WLqm5zN260hH$w=B6^ z#jw6H{Go=6WI?sZl38=`eE#;_3(V5qtM^o;zklQ4`Bf>?cC?J>*R$r8id5Ht6^Ghm z&uy;G+}d5M|Mjvi?9I#?Gf@6XrYg7RPFTO|vE#vC zmW|Es-M5w`;0F>;$Dz4A?MOwyExXOQFVC)#zjA}*#!Q}VW| zZ*L#F(el=a{qdu!c9);NI(S{1x~@8CTcpiwxm;Ym`|L-T{w}!nU?H2wy*lP+e;vMd z>dwB?N@g8)kqx6Zrc8Xf*Ew5ro5~dosaST*Bb#emuM8|-{3nu@Uw3-z()jkfb)(NB znOpxDnb*WLrfu18J_;-Q<;j|Q+YWo5YkbUi<)!_`k6zO_*51ahZ+>S%&EAfc9dSiH X4z-kQTe;8pCzX+!<@hRj_L6@9-8*Cn literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_sun@2x.png b/Telegram/Resources/icons/folders/folders_local_sun@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5b74e3cf7af3f1354dc71b7ac540bab70c3c56fe GIT binary patch literal 3229 zcmb_f2~ZPh77i-l0g4wm>Pj}=VkezWI;2~X4Fm-xf)FJt3Z3o_1e0_o2?P`o@kAWO zp-?>V0MSG|OK}82Jdj071Vs?>!qU+ZYZP}J9Z|>q!!^#7y4KXDs?&dWzyEvRd+&Sw zlGNat)0}$`?agAboCEx&A>iz9J9>5l-;EnbxqwqIz5iSzi`8eK?XY8Q+cAX2a`aZq z6()r&5GNTem!KFW&5hUUfi;UY**jiOkc(&&TS-T$bzYq3r%O3(HRZ(#LuIf`?@LFk z{TCbP(8V+5*?czKnrpqg)Y0@`Whd6XWtl0wIP?WFs(N%!9=|z5wEja3PE%2)pCM0p1Lh3J;M^ z?eGPzyg1P&lOE^s%w{v!EZ{PRC>|ffFdmHX5Cj4ikTF4LBH|&Pabzcgls1wEwcey= zbZi?Up=4rBUL3%*Jp`@33sz_BNE1jHFP_lz_*~c)Qkx+~cG>A;4VpIR6v?ACw3gPH zjKG%PWvh>7OpGy_`3!W|<3Bk7sg=pPe0-9NR@>#mX!45#VRR(qlh#Igf}ZAu&_*WK zK+=A3faXYBGS<$N)YigB3l0Sj;#Za0-Nlvk6qlwUwbb!>01H$I2)fA2h36V-fiyQR2t$=s!GnqDVk|Mo>#*N5l9KQ5`FdddjCsqcDmIXb}pD_!J7Ed?5iTQOpw( z(?Swc!jyniiYD`Hy#gTE?W=ZJ-k1HiDH!)x+xR4Oun48U?c&336D>}Vwr2F=kTw<4 z6sP01`V-aqs=RdUH%HR|^b68#_ikiVCNp86B~hTVU!#8B=lC0mxG%HE1Qp%qd7Qr= z&)4QG_y1qxX;W*v)OdeYVcWBhra-5p!Dz89yJi}==$eYO4y4KeW}e%`N4r@p z`yK&Oi9Gu5&+`H%9-lwt_xG#UIj59`*XD?%PJ<N9Y%~a@}C&|`&)R!Gi z_rG|8Klsop7q!(Sxf~O?c25sNa_#Nj67`uKNAjK>DQQfsZhneAUvlMb;yvtn*^vmR zA#mi`WV`MTPJs>!CS(oEPflj#^^S)S}= zWqC)4L?TxSZ}jNV2!g&TB-&((-R4E?rtuROE9)5fR~*D($v>x5ZMy zE}P)tQGn}CiD%51QIzQ8bH1ge<^6lF1%7*iTi(1YE0Y$v4&WA4@6A1N;(F8gT@HrA z+vmx0Q^wXRgCRQm{KTi}>l&FYM)m(Q2Ier^8I&2DgUU!^rQwbyqn?#^=ydiE_U zAKG_~Z+6OzQza#Nw@L~NZ{E6f>-zQU4Gj%9ZaDticS~Vm;ft1*-G^O=4?nmS8aECW z^F2H~ehu&);U8F4T|My8h~dM}ZkacKe(1%P2_&Mdsa0TtPkBA%LQwOGzZYPE+p7oU{0ZyQjKr8;D7p&Tma zO>hpMr+K;Ty4kEJlWICdE6=~!zWF$ zmZL)9Pe;<4GY+KX4N+d6^{)Etcb<-q?G|0Dt+gh7Q{7W6fBW)a_Vnq~r|4hz%({8= zX8Fj~jo-|6&3Wu-H*}Mma@S#FT-+;3@`kju3vXM6HOq#@#Kc7Q_)p2k&;!}o|5$v; z@BL60wmc^{*NW8D)eR|&n;PS7H5P*+1!Y81MHR2t?&BpXgLjRJCkRQlacJ(=%*@O@ zzI~?stdqN2cW)VG2@O6ZwAS3acceg5c;?KQ%FQh;`l^W{RD3Kmb8uCX#s0~Uzkss+ zFlbvwM#fM(O^jlWTCH9wyL9Q&N+(@$IQK)yqU5^~6%{~&M+@vyQ>7ebX>RVwB}cTRU%5q{YFm{-Rj{c0@$1*iy7~lc2je54iqc%(`IoV4M<99gzq#o z)YQS~)W;X<>s?okS##mOp|HXS$8mi@V8O+zrhEB0QKvllO0kbWPoHDzb=Ek@&29U` zh@83wc&ZfqNNBiw_pYUz?mwp~rNx3}NAV$H)B@!mh=zgUyphaa+2NB#EpZGP&T*4AzFE1oqsx6bwQb?AC4 c?P_wLmV7Co-;Vp0wm%R7elw+qeIir-3x4d_x&QzG literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_sun@3x.png b/Telegram/Resources/icons/folders/folders_local_sun@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..2eee38f2d0ea5d220e5719016d1ae340ad45009d GIT binary patch literal 3822 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_sun_active.png b/Telegram/Resources/icons/folders/folders_local_sun_active.png new file mode 100644 index 0000000000000000000000000000000000000000..664c01d556d256647cf3cca39e61cd9925338817 GIT binary patch literal 2429 zcmb_e32+lt7*6F-N`VoO>2S!BV&&TGk=r)e!|YXYP~iL{^`d%U!PB)i?+CTZ1i zEFj3;kx{u3xfB!_rUD|D2ux>yf}@Ox3^-5@u^@Ej64)x%3W#Wh+pnc8(I!(?PE_H=NkB&gQ0fmk%vZMWG9!M;VJ@aUxJPkDcT4c2pBUqNja1tX)6e3WqGNkiSG^AxD81jH7s(wZH%OS*IaNAu_STz!_^ZyB!M9wFxK_2?-5Avk|Q$nR?BpFH0DFz@FB(j8^7kH6m68rOH zvBF5MvA?;_C0T?VcdP<}B1MU|q6|&jQHq2_4B;bCfwT$?4SXU&@Cmk;R6lGrKG2fY zP$fY|V7C*Lj{+#5cnP)IDG_CTq!pzk(Qe0Cg0!-@QP6iRCs=Z!e;UlC7H^ord}(|Y z@Mqs&G>y}&71(IhMo2VD6BLgMG;2p0K#8n?OIA^^Wno6IKnkRJ)l7>$+z!ty_xSVg?*Cu?iB)TJsbTk4VeDOtDUc{>I9iNl za;CwX(0ydx(+ms8oDlbMAytI3#9$7w97~4*P&@?i?cGH zublNvL2CY#-+G^|>DPb6U#6V=rt#7F+OET&Ecv3mKD$?`vO!*6du-gP+jDB0#=X`f zP5$yjB3ru9_mAhComQ#a2Gy2-SNkh+Pr;q51@cHHjYs_m<->Gw7r z5By0lI+Qc5U)h!u-_Z1M~H|-Plbjw_Hs0ixng2;$2fP&ytk#{YtskRxcbhY-p4c9x%%A?_WpF_<5@MX)@x=* zCa)j0PGJtBwk3r``-+UIuk^0ln0wZ8`l9~C=98h3eV5h$UA6Y+t?VCvzcK83@r*j@ zt8<<6YpVB5P_~>nxn@k literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_sun_active@2x.png b/Telegram/Resources/icons/folders/folders_local_sun_active@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9091142505385f2eec14b677dba481a6d0f3651c GIT binary patch literal 3078 zcmb_e3se(V8V>4;vO=SXWQE!|tO$0KnM@{+nZu({@rA4H2>?%+nM_GIwX>p6#mZGw8ClILZTG!LFbI#1%nfdPb zfB%2KKQ{$Y5sRFiW;$^=9OuvwMKpU4v7M8~vDcg1|IB4?lMNw>CJyJ1uC~*Gvuihx z!*LAM#wIWc;b9m->x4K-D=A^7&cLEM9KXO!15Tt+3|~p9wR(S`uf74`Ye|0~UJ?$4 z8-gi~HYD3f#bigs64@yPN&P=XtKQPRTv18k75a16(m=u2? z$QF>F5FW)3ri~O|B9saU5hCHsP@zaFMo{!Gd>9hRK}ZgY!~&5NLm&)>`St@~qZvsR z7OhxlkHtRu0~&@gU?7;0ks-_w3u&Vo6rm^zLNEx!0u~`KW$76_Q=m6_jWQ@G6JgXE z7%i>m+Zb^royPbBtkRJbbcQiny~$oCwqRf;ZU99>$d=MDkR--%hBRa9aBz|UsZ>fw z=@}D?6^&sH8k(U^8u~Y=$3Fie09)Gd@Ua-L)S}akg)lJ-(%CfZ1$iaf6q{wBz-Y=u zrx^)qK{_kb%a)A+3pP?XLmOjhI(2lRqDCe2gM)1ggYtdiwR)1yF!{bThf?4SgGBE_Vhn;tpy4#BRb{;lmD`}O7?YrwMEnaV>lzYg@c#)W2~0&B zbvT=|R)?!8(4bcX{IN=6!E`EZWCOG6#KS7W!?94kiNW;*6{_$D*tCUOEs4RX3KCOt znLrGQ5CM!LlmJKBY)FVerLdHM2@)Qiub_!E+v3{hkNBLV36|sMs0cxb30y1}D3v57 zKv9GcC?TapAVcIz5usEOC^1qKR!yW)%eESx`ZB9c70EJEGMNZbv05kuCk0{|%Y&+5 zu>c_nnG8Zjuo#7GhW3|>H|w1dq5qxFue$&Ln$NIXN2~_^+J(d4UfKmlEzNE%w&B>G#y*Vgijeiyc5 zW%cs9sF~<(xw9%cA0ZZ+yvj(QLeEWH_YUhGl{LNol=|5Rs)3<_lY0*9j%J+e%N|(K z>%VPfgU{%p$eHYMcH3VUFLolv&pKOJ8c}I+ZSVatARu5x)9TF3(mU@Rip?H>c=vA4 zO^$WRLVcWrgTvgpbJr?WmOsS+-cp&YMgG~)(Ak89c2NmTql&`#T{30KUGyUS6LZIg+Z;9Nf3B zG3``dUf!f^H#fJsy1GM$4qdr&B`7FpY7+BJxyqvN7Qi%LpLA|oTy-POoU z*J;x{s|&YmNzrI{o}NQ36a5gW^umP;*!1GX6;b+YPp#HQ{p3nlmoW3omL}!# z+}vEQvcJFI!^5M^eM27yS7vE6JKth4PI{ zPB%2D&*#Ru_D=S^f zcRm+EP~-Y7`NY;s?|I()Hr8i4?@@2>_fgD3P4>EVm)qLzy9kBCGZCpc{^4OU2=+aA zFb9UO27kd_%{6^;;K22%f17md*s*HY&!6AD+E|gd|Aoce_}2J;PK>s`Q-lHWjJxQ5 za$x@T!NJq@`9W@T7H+>=`=Ljl^X2i@+B0W%^_KK+-Ec2GWBZ20l`H#D<-zi$)a-1h zxA$!+EPQ;vsj10Naiq4^{o|fTkC-)!&3pHL)p?`6JtwI2`>5yN3=Z-J;^N|RBR1C7 z)Ict#JsMSKXXo*xAS$Rxa4_I}%eMmq#Xd;m)%swvU_EzWP+|Ig7>8-Mwo5 z6m|5`xb=CR&z@loWv;VktxHQ=5V9JXxj$k53FdU&?c2*YKN)nHXZ~{asV60VetxS8 z*AH=~UrJ5cu_4NNTu*ZbD?!Se@;LU|wQDp@r|-ndBj%a0Wa`+V)6OwpBsWDGJU-pL zdGqC&pYG{dJ7MC)1OF&$C5?5Si5IV5=T#RcB;A_+Vucypv}VWD&!5`M@mQ-HrWmlDT`HLEd+V@qe3mQaORbQWU#Bthu604y-+V2k4&fS5&!%*V@{et}G}h=$dh2uDAEPxUW9i fXg}@-KK6(#>l)mZIlIR8Pd#)&gra)>s*V2v1ul^b literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_sun_active@3x.png b/Telegram/Resources/icons/folders/folders_local_sun_active@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..adc2f3057c7815ad5b9c10a9b969705f34a99992 GIT binary patch literal 3619 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 C$i8R* literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_video.png b/Telegram/Resources/icons/folders/folders_local_video.png new file mode 100644 index 0000000000000000000000000000000000000000..abe54e5be6b870ee7c82b93b27c2771ce704939c GIT binary patch literal 2373 zcmb_e32YQ)6dtezy5*1np+buAw!Abav+7?PQM`cc$Il z5=~n{!GollU~Et{f~i+YAu%Wd4V9o4K?OtsIkeoDV$+f|ME}`~iUkRAliB%a=FRuM z@4fHsziSp%EEr>%VnGmOOnI4m2|UjdD06gVsWz{-@S#GP0YSAc8tHi4nZ5F_ZsO3Z|4m1hy^ zQlkLntTtStSPr%GR?5b(JU<7eNy&TwLo zX-Yy^%fd$VbeUkmh`6W`l$A6kB?DzC8>iJpL&@Z_M1T+ogNUKSSSlN<)vAW7*Q$4b z&OZJ}0$5s)C!1qPF5z%Cg>IDALmBCU3>mF^6B;0v09~z%N}#kJ(wt$c(F9i%h=v;V zs%j|Hs6`pdsLN$GhDRS=szhWprq3Gm4seSGaAGt`lQ_xY6z8QJ0_PA&YBtFTB$*2J zsIuZu3=Va`275_TAlchPp=)H(5dSk+mIS{V4U15-5*7o1&>{g0%~n!ysUbBA6GL`P zl7+`3lt*+!j7Xr|?ZlvLtD?w)k79VzLHlqY%R6u%$=Yy-gAs8a*eSb6v3`=XXWnc81|;S*Ad`CXmg-r~*e#3=Kv# zS;-KQv-wF04h2rJvK9Ci2dSK>>f%Gb* z%pICEM{+y^Y#eT*WDe&jR>XZAZ^s>gm3SX1Gm_6%NSLz%A<)z+1xwsLf6~E1nPT!u zq*+vgXR>_Iq-h0FGKbNLNu~>djHPcYLv-t&>XLpxRtq5LU96ePuB(0{CPqO?0Cx6X z+)vzzzb@9_ojqVFyUek$vVJ>_QzXmaKEMIkRgNKL9|bMv$fzI8-n5gKW(0;8NIElE z_sKq89H~}}1OWVfC$Rh1b8oYgB6^#ie^3Aaswe5zl+}paU6_0}Xcx#>8g4D-GP|e2 zi|nolBCu3ZxaUo3s#=I3!#*x|mw3y@NHqny@6}8kU2y8$xdZ$5E!(D@{$bM-lch$` zz0UKNaCpz2RTf(!k#Hui_Y{q<*}HaHb8~agv5lKH<=QX()FBP@U3q+^W$eR++g9{n z4IXJPIdu8tt_>|M+9B??de&zy&hk= zqWAn_j^lRQI<{N zg6kDf>}t8PdhOcwwl;)5v17&F{rfA5nd#F{4)kAZ`jDaN)g6~Rn;v*Dc=g1N{579+ zb{3=kmyT>Mjvf4xt|_qO=eyjEQ<|`1SL6J}Khrheynu!CyBACQq7_`}LvX$-1U} zw{hFi&-6#WSoQ)^Q|@`XBoqiNkW1#wp55Kmwe`814Ws&R{PEkxix+1ur8=)q-TKn7 z;qP>9UcSS!*>|d;&M@ZS_{iXyyoIx>tE=O!xd-3(=(;{NT=Z)5V)82l`RI)8)5GUi R{b~NuDKD*Xx6i9-{u`E#EnENq literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_video@2x.png b/Telegram/Resources/icons/folders/folders_local_video@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1d0abbdfe55fee933b709cd4597850d8f70f0d54 GIT binary patch literal 2796 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_video_active.png b/Telegram/Resources/icons/folders/folders_local_video_active.png new file mode 100644 index 0000000000000000000000000000000000000000..c3cf65deb8c27c1ccefc1e5a49294e0b05ab95d7 GIT binary patch literal 2459 zcmb_e3rrJt9IogT8OkypV`%hpD&pgMuimwHp=hOGQL7BAR5#Ik0hRWy-W{|MGhdlH z7v^i~)XnD--#W-h=5Rx@O^4ACMx1j7na0IeaM8r+k~#LjQYt!MF>7+Y|J{A}{l4$_ z=)WK2O`X^;AvM8dGWE-KIrG7JxN*eCfp3{lY67ReLDwwJWO{Xgar7{4`8363>NC#g z@#Ri$s7&@0or8B7#9w5LaC%fyj1Ly?eHIU^)TcU?Qj9*#@xXysl?~1 zRHf;aQ$0duslbTvxJ)P`%mRXdq;pU>;FmQvY=H|$N`5II$+`xxcnljXQFKKsQJz8_ zd;CZMkXpAp7UPLp0)bcvP0ua|Hlhi6B3koQ1SK?I(v&h)kh05x%wdL`Ae*I1oUW)I zMe%nPDz8g2l$B)^hJn%xe6py7v{BvOk(`_^*SVi%~2=KLQ0^BXT^*7ilYP!#RN#y4a?vJ}_#W zzdNg;N(7A7B8!!>@;E}%1cy+hg+hQB60ATac#g7Q5^Xf}!^mAM4&YA%wbY^mGl46P zuKd2tr-;TVhLmUup>dHyDBQv!JjGZMn`99f9urA{r!!DvRsaRmx$2}vpB+Ea!K}+? z=&6XRm@X}d>473m%W{G-jCNQsx=<3~=xyHHj*{Nd&)CoTn#EpGf>J#_9Sny`1~0rlwL6=}Ph zS88Q-tvS1I|23e!ysq%bv^~?WwD{@se)^+Y?^w%^JCrqiecOfhKTmGEuBYDi)z03T z=QVF?u5P)0?QW%-X5Lgc`w#@Jb>;2zXKr7n?enBo!wZ~YduEq>+7;pP%~og-<(q!BgaAurVT^UCG^j3K-4Sht=zJ7y`- zux(0O^@x~EEa?QKud&xED{mE51*>LlP#vOA8_h0eL3D4-esl<}; z!OZP_mNlGdUfe6LYDW4%^tJdYE4*XNn}$waRPFubOwkwNj3N7f8d*3$>RdPj9Wd4E=mv=c~WU-?u|Ja*j+%{IVeNv~qb>kMWn* zH}*P`GPso3d~oK?MRT@!N3C^TX;2*W)-v|9(;WkP_U=e*yPmehxrLnAYW#i5&7SH! JJYn9_e*reZP8q+sbx9g=&{&RRV~oii?yLPZvF)E-C^lVg+$=Ma8WL-AdgT2r2E_*3+|d&dhr= zbKiHrd+&GWO+j+fGGFhx-Ygc&H$G0D0>(J!=`{&luNMZr35MyWxHT3QYsM_+>A@=5 z&t|cvE!8Pgt*MGcoMa4Kf?`xOH``zW)+|=|(rgn!ZlJA@iq`0iGR~v=Mh>K-WSrHQ z0#TTvX{|0U*G#{Yo1`RjH;___vorz<&&C0OfwmG*wn1;S;Mp?HC@v1>&c{3sG-_hq zAmc;qiqqUxcFwE)YPjg9E&o zDK(xVk9GM1cQTIFYBk|Jp51Qe+J#)ktl{ycQYjA+@B{)FSiqJXqm{^pjh02@2y)s& znsp|tjxj<`L_)>btTGN@Iu?S#j9-oUiLmD-tNVlEIX4a27r$`>H zrwz2xY5}%+d)KsZ}W4K3>ViU~s#zSYxt47_Nl8(%PcTG10sf z+QQh(Bps6lXfAR_W5T1&G+|}TN`}#o7b$6pCQA2&G{{MI$gtph6T=3)KRY9$znKNSm{`&h=wDrx+4oeCriKr6M&SRl`Cx zC5C~l0h)kP!H7u2r^F%^jjG&imYa2;)d>AWR3|G6Ad1zf7!#}but+2zU<@#UC4@u> zW}p%(0z(m6{Ribd7vsVBFG&UQ9<^8z-Q3d01IwzkT7mIi3OgA5BRJ1rjI-60(A)P9u zDUR#0?iJN~t-QF_+qE{OC%WRB^Z(N z30OpdsuDsW22)~{T1==^LIFyQM?aB0=oU;V5aOs{LSy|*_O9fRTEeKI!S|iV`T6m@ zUhj+%{a!r(+x`F7ct+JaCN|-`|y`O~9P)~>zY*B8XdE_UigzinVEb9c|5G1Hf`E~`hr?$YpAH$J~ZEtBuNhs zkIuX^cOw71Fz878`Xy?j{N1!Ps0ADa1qGg-o(}?QPoJJw820Sy{?bxTeRFd&yQla( z74-+Ap}V_#gssac9SRS~8XOss)z+UnRgn3?@YAQqTDD|dxqR7dv*lM+Ivi7`Od+zf zD5`I85U#CnXc#oFI$m3w&7RiS9e=&2r@FH8PwzXbst*0@wohH&vd#+^eCul-KQ^7K ziH(iDyUu+ibQ|Xp+ap7l&)g%Y)IW zDSe%tsq>pMgdOeer#5c*+;8fcl81Nh-VF|VRO%hQFQKj}^b=8hQj(e<5gwknpsci% zJCpcZZ!fuSUBEH|Fg@fKd#t7=IW29TpWl~E(@n#|wi!3NyW7`)c5!AwD!XqWFfj1p zhtM(aePv~rT3UMN&yIn7?)!0j`0v;3+U0X*`nLPCc5nR;91&5vtp8w}c5;YbquK8L zR#?$adzDx5Mw{)kEqU?fDRG;LL*a%~b&2mS?DUFZ|8p@6f00@k$@QN#tM_T`-R7u| z#7pw~uU%WUW=*l>V1eR~tJissjEp=uzcam>F&aVPRoM z$LeQalj&-NeY*X3{|w zWjX9kkvZtP-~TEkWc$g;zeF4eV7~G{8FjEGbxBA_$W=#0MaYg|Q0r$mhGRc%d!DSy z&7EuJEPo?7<2MHm9LSXJ-P3Xx!!U=#5gZ)c*4CCTHGFWM`X*;r&``&=rQR>YkHowU z`}p|;rVp_WH9dHsC&^EfXLbw(1qaWbJ$vYxG;ggVNulud^(}ID;p9nYUOt<2SNqoe U&#x*@I{%&HW0K@mQ5o<37g_gH8UO$Q literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_local_video_active@3x.png b/Telegram/Resources/icons/folders/folders_local_video_active@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..caaa2b49c839969ad12adaad7eb1cdde8f84ae7c GIT binary patch literal 3452 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 H5xM2R%Zf^Y literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_type_admin.png b/Telegram/Resources/icons/folders/folders_type_admin.png new file mode 100644 index 0000000000000000000000000000000000000000..e09c3ff5f966c06bd9d1ae1da2a3d505739fa4a5 GIT binary patch literal 2786 zcmcguYitx%6rKVlh!7;aiW-;9430n;BCNW=(;CccOvdS_oOrnU7EH`$$; zyXT(oobP<+%zdh<@sX*M@1IN%#MF30tQlV)^1qYD;a^Lgb{1dmu^TqH1aa>S|64`$ zzf^QQRFm|zoj z9c(unwmNX#*2bi^wL_D2YQ=Igl2x#SH1q(OO{XkZ$wsNXUj^U$%M3;4O}vgMRqF$i zt%)YG4mpq%10h=Df+87~16)W5%JMRjXE}*sC597dE~Ermh3CoQhr(!%ZYa&M)kQ4) z6s6id&sG>FlgR`!LI62!3@6Jn!}1Kz)7XM`bCw6PwB;@+d5A$*b4=Sakwy9*fr>i4 zD1{>}q>#4DZY{S+6DEww0-NCite;ZeP}j1eRN3x~O&l#S~(!#jMA zVLLX@Z?=^>2LcZ{NrY0RDmRt#CF|<^s>s{e>pck%oQTL6tOCgR&^oyrx20<$?yS8c?9cu*!x2D~UiY zaDt;*>zKGtL8{WLAC-kM_OxNHu?$C!|d`!nqjJN=8|7tmc~cp2cp+BVGH zSoFn=7(cSQpi_~74IF@{6m;AuWjH8JmbE~7hy=EsGBx1m&U9INaT1iPMU9B#g09h6 z3JNl-2I-I?hG`!9s!^dt>p?*@WIhBz7^|+3ekDsK-3NJvl}ft*hb$G{Ywf^lgLup{ zBj=+-$E?Vxk~OVFDVgVQ6v}*7%M_1{H!6P`3yq+_iL?QMNUPzXNXwk6(YzoTqN?%& zJ1T#?{QvPcYCdC|A|vbJt~vOh>VffJkcE-J{CQdwo?``ZtoGX{{|-@xp9^DCJbtMt zcq*3Xvo3*)ic zWW&iD&%gfKj+HZ?oO5CY+Va-i*hQ7U_CU>qCnnUMncZh!TJ`;`>x;I3@!j}~Q!jjd z`v7@7uyo1E(>re++ULG6%%8Gk`MgLZa%u0?-rw1H?~jAAnI8>7Q1jWEZRF8S=a1Z2 za{ThBRAwEJw&^i#pansdnuKdmJ;5w&b83FmW3#_} TZd$I|KZVBY8)E~jwru+Y=&hO6 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_type_admin@2x.png b/Telegram/Resources/icons/folders/folders_type_admin@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f8e11bf9aeeba1d1cf681d2be55dcf4e6b9a6ddd GIT binary patch literal 3128 zcmcgu4{#LK8NWp8#0VwCm}Y97ZZ`snW^e!8?cMH@LysIW!CVL-kQgoUcK6-gn!DX) zcavNKQZcPU)52)Yq)ISV#%Z;wEjk#G(ijM(7L-5YSWKxn6kAJ4nid3STHCjmyCZZ+ zleUgGx3_QKeee5y-|zjtZ{Mbx>bqxUe>vOXaLlT#2-Ko`g?(jZqTlzn+?IoGH|Q1j znhwW}H`!N)m+?CnVx@5bIfy|EVDVT~HHEkjPxuwk*q$bF zEMa0b`Eb7th&2Rjurken80+*9676O&FYly1E;rAYU<^fbB*l@mi=aJ%n-UlXOMY;K zX2>C-Hc+0#LQg(CVp+OClC7<+&Q_OGGr}az^E^p0B*PHMf-u`u3&aW4EKGR_KvOal z-BL6avpoV)YqoqiigY}Mn4Wg4nn{`vVPqWWB<-Z^loE!rl(y5Gjc5W~mPiglR2qL1`ojxu&&Q*QP_V7MfbKA;HBh zD9plCHl|ezukbmI<;Xm-SQp9+2rSL0)3j)6muph_Vr6CauJTw>y`sumt66LVCfC3K zu%HiTD25^^mY~@>niE(~py)d&mq1bDra?_sLTwXGIb>aj1j2feK&~=Hl9Pc2rZko% zA*2~GfCy7!APh-e4dYmP8-y|~su>6vMdwOH5ey2Is%ZgLf|UUuj#6+ciYx$@^)Mpm zCM1s-B6!&i2;SwD35lcJ5&$8F@zSaF0ZnSQm0_hd4!CI<3!*hSW)&6A==F$XD)_-AjHcw z2RtI>wW}c^Frh**(eAY+>uWh&lN?1AETJg@NOrCGaLL|hDC5a#?$k1X~S__z^VL;cTiUjQ3 z$re>kc7pV7;gjN+pk*qS+%BFH-GnE^dI<))8G;ibN62m$8{!!c1YV@N@$@IMl+wMM z5hyOD`~Q)pq)G$PCo}4@%85+ujj3%-sr6|P`{7pfb&1#zB$?>M-PoiMR?V?#C z1OZEkUN?*CM3e}|#f4Z=WL(sg{4xCJ$KRCsOs|Vfu7|7o;Ag4_(tbgXw*>OvyT$l( zU|byKcKIaUA;Pu$!t@l6UMd3Wis?T2Uv;!3zV`oiM!T>RiBC8wq^8jE!ycy3J?J5Q za)K(VBLkg_;HJ5|9gfVkl>vWUW_qt(TAQH<$L=t^{gE^ zGTWasBl-Q~?9Ky!oew-)2bT05i)_rjJmy>J>^`?{;R8c6{I8$w-q>{rj$MEM`i`!5 z9{l=G-|ZK74Fyki&dt4HEaSH)_WmYbx;}4z@S*#@keRXU`qJY&8v2L3ZrWeCxAA23 z)l=&H`H$XRboBX#g}q<8*}uVg;KRS|ez_o<+xFVv>ep|1L+xK%`pjyop!2}-kE|UH zC0$E82Jc#z@#M1wL?p0aQO>vS8p3;aRyn(yb~gTF{a5#RKK;}1`Hyw3r+WS}Hp`!v zIj2*fxnTp63GRoGSUf@`;;+2yp-pc-<#8bxqCI9%o>>a(|2!@%b&UFv8qX<@Q z#*RfUjJQ7W<>YP(TozV=(MD(YgMCNevaVZqYtMxl{`isX??(P`q3Sywe;)3fg@$!~ z@1A?%lls7dEi31Juk!4g8RxS;sGb@A)tRv$mCv-tB~Mko`2NV8ecKv-vT`~3XwJw` z`SxRP&%I#H!M{n~@x!-wzdw3&{?eU|J1b5>a(hDsTJQ_co)|i=I7Ni*J4N7u^s4@}5Q9S3Yc#{@!&tnweI{Slg!= YeM@Uw@_XkN+h_aA#npkA7Oj5dU-E`OEdT%j literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_type_admin@3x.png b/Telegram/Resources/icons/folders/folders_type_admin@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e7582d03156039d53780aa5344b92222678c43ff GIT binary patch literal 3313 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 CPSYs> literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_type_filtered@2x.png b/Telegram/Resources/icons/folders/folders_type_filtered@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..805a19dc75c06c2383dc80749115f51f43e465db GIT binary patch literal 3150 zcmd5;3v3i+5I#VYib8lQ647Px0ik>Q-rL>uAV;sIjb3e!Yj{Kx{@eZcZsl%wySwdO zE03f_R3tGFA_}4g5_u$&O2j4*(MY6;1{*`74X7AFG!m@ZGzLS0|K5wkw6qE_Ub3(M z=AW5w=9`)S#m0uElP1od==1p|)z^ii=vn7o730zU%*zi?L65tvx|NR4clUJf8t2>j z`YfMs;x0Y5!d(%0LRQSQAE;&=`m<>ZN&9?Ni?bF`)<74F!-Q@G@quF>;+U=m@#TDk zidfY!sn>Pba9Kw~OzBvoNGiT~5muFzk%BaI0hUdt3`foe@tj^6y?e_fj^#w$H9AIFol9^1#pJDx`ogisRl1Pdn8HPX-gwt-gAWIm|yrPCMbQD{+T-`Jt&&>9DTE0HjLZUyr2Ui!DJQ5ZB{{3rPUVcN3JFs%4Gq^pvUEw-N}8_e zB+U_2m;S!N019m+QnE3uFX?p2gyYtb~H zg63niDD$FB(F-Y7rl`DV#8h>yyR8v7Zu3H5xMe#}?KxnE4hyca0L|ml=g4Y;Y z5}?S?0a*0rNn1yC3R2}-J+D-x5i)`(#sN$4aaABRniC12unYl#CaJUtgg6!Osv$=( zxlVUb_Sy^ewG6ft-cmZ2Qc~lg1BazX{^Kr%r!A!St(rs9(J%K&G7Jy%yIu69%WP>jFNhf z9VM!a95)r(dKnYS*;aA^%kl2^*c+91JZeV*Dt>S7YA8EiUl28gP(+RiKn7|w5dTMc z8Wqpjy6?z!bi@3(t#w3t2a9|wCI8-K^WWh-IcmMOlbgNraQ$?wm4$|}jHXFxzWk#} zP_S>_>O}DxVh(uO39Gn-j&0s+>AZ+ON+(Wep#Ec{^W>+;?>y%7jaykC4#kq+UhWSa z>};HI^0#SC+qPTZPhS=KwR_Tg6-zJAUA0ksCpous&ou77PHgrIo&8wX+9eAs9&FjQ zXn$y`{pOB=o~~;btk3l$xwEZz>woLgpO$!a{pwjKS5rwf+H>}4|BmM7sY}*B^tI7* zY3S%TM&xuVI2=eM504)B$IgAMz-sEu>CeA10oO!;zuH+9d{P1MB`lb@e(qpkN={>ObnVz#l9l@R8a@(`=ZbR5LcxA1;dvo7*cz^G^ za3yzb{DzhX_RZgXm9A;JBlJ;XPB8@EZ8$dJ=LNNI`zLpt@Yd>U8p4N`tnT~^rb8MH literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_type_filtered@3x.png b/Telegram/Resources/icons/folders/folders_type_filtered@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..374222fbd0d399824a55c367c88afdcd6464a061 GIT binary patch literal 2998 zcmcImdu$X%7{4MIL0dtLB}ib|Hp-)W`@HS$%0Wu6rA@d}$^qpexHmi7TY9&<>~7m@ zfqyV091=`Lj1)mFArhhxGzeOyB!Wbd7}F5Igj7L8A`+~kNQ~(0y*NxutH>q0H#7Uq z_xOFk@0&@~*38KtHGY)GVXqLl> zR@G*~1#LAU(AEe<1)nt&n-Q0gf*5pUEFO#MwiNf{Nxc#pyUQewB}JS@KVIe<#Oi~! zSh-&HQ-8 zaZHIMTUuJYEv(nD8c13cMUrAjh9QsyVYljz94BPKPW>&3kr(r^Xk#X51X)oo5loV7zR?cj)qDkWlAYl~7pzhd6md?tW5yLU;h%tcb z?B_cSAZUZZtc`wsiN&%eY^S0bg^>oNUuiqkYC^IO+D4NFU_~=>vnUgd?bN~Bcn)DZ z5>IY6rE&|(j$wriBbv!_Z6;o59=}PjwBZ_rQScKtIk<3`I~rg7$@I zLGlR_MNg+#iK0@XK||5h)?85mNrwFep{)wj=8RRtNkz3c;&sisS>3<@qq>GFc^5nG*<<{A$z_JSKUE}(0g#T{R)InRPDNk{j4BhN%7qD0R3HHW$18l80W1h- zw9T_LRHt$@SF7ulf;2*g7lg3P627p)6DsX`1z3iFvMMUHAR~uM-D*e@Osdjsl)ct; zeJy~i)1#<{B{?O@z^xTO4%|FL1y3(){opYq%jx|s5r~xDCHX1qwxK#LvIWZ;5Ozc1 z7dfE+hTaUVoCr+Wl2Mm}mhHz?%ZOoFE?|y<$)*|Afb7OjHtR~d6J)c64`|1hn+HRQ zV?`>=5xnXvB^bytgb;=Tp>V8E6&W7NrHFN@@N-eh@SbBNO33j3KcbXY4X6kz|(8HOC!h?^kG&y`e!J)vJZ>UsH<@qHA4V zdv%~J6#x3_xyc90=6jCyfi+wAj^9x{vg3So*rZ`A%X-d@+u(e%@JQkOzD*YroqEqB z?{yU(D6YPIqOf<(memD+_0IYIWcTRgJuv5`FPgTk@-2K(99W`(D=!Y8*Eq!V$J+t%5hd-Zx;)RN7+Zf?u zgnMcHk>%c-Yj4i%H4s`!UJa$dsiJ=I%fVE{cus|zDs=(C2(@}^~90hYl*4= z{#g6QKrudM<#!iHyQ5C;rS=Yuo10E_7L54g&!g1RJ#{13f0G!o=Hp%QyuSEH=cD`2Hum1= zo(Q`x6g>F+a_`eCzBu{7hS`(zav)0%=lzyn*1V_wjY%t(x%29Zn!x_q&#nI(7e44_ literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_type_not_admin.png b/Telegram/Resources/icons/folders/folders_type_not_admin.png new file mode 100644 index 0000000000000000000000000000000000000000..3716685be66f240a6127e0e7fa1b98050e346e7a GIT binary patch literal 3200 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 Won@?DcT)Xxmk^t1Enm8E$G-s~_aV*z literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_type_not_admin@3x.png b/Telegram/Resources/icons/folders/folders_type_not_admin@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..67846f3302fd81f2495cb8796cbf3f94e7a5c997 GIT binary patch literal 3753 zcmcIn3se(l7Di?9fq;#o6g7mP0*jNGydMy$5D}_?QjRE~bTTu6NRo*&;gwWvL5^6r z2f>0x+nyFgN?kascy>Xyx*}FxEr?hbp{y0bQ+!87ph($&c%-xkAG_Uh@|gK^|NGth z-S6J{*|jEOrPB=e8FqGdPGO;{DDbUg-qR+7Pdod6><6FIjiDQ8J3GhO%zKjE{*T?j z+DUEndei#w)e4N%^H7{r6TEc2k=bMy5SVU6v1G!;Q4@(;gOdB8_9U01#g*I`aX1og z3?`Dap=OGB%N!AnnUgU&&JA3~2}oA}2YSMUa?3<0nr%-6PgYgXs zCk!SU*z#?*#w5~2(n;iVT-$#B1puHnJluvcVJv#R4T3hUNCjz(5;CDR9i3q$;3$G7 zQz(pBkqW}}8q0<@MG-&q`3l>C`S50=BA6mj6G=srq;9OrYsT{B1P3!!m2-Szv<93^ zqkS2`(LIC;H4#d#01+S%B8K?lXueD#mMIXvA0kvB$cSk;iEA|(<4tA2I+_uP@E3MK zZ#Zf~Uu=nE3Jpo=Q9zYek0uhZ(U8dH*b1NsCUqnQAVFNhVf^rLMVNs$p$3cyQz^M1 zc%D{^E7XKYDik3ogld3Vg;J3mLQw>P)N))clA{uVP$nANuOhJ&Mib2bk@mnz4EXpN zRfHpiS|C9osZ1^fK14D|j)`zcsFC0pB9@3`I6merlG1_>MRnu7GEw2cBO#E;WNK6h ziPg9S((r*F6cY*{0@cWIz6_P95h>FL!_rcOYH3injM2_|i`X)HrPFeT)ucc%rc0Du zjHxgIA{bfLPQb@2A&>4)OCo^N7nFSjh9)(pG?XHiCj#zXMOpB3<0lQN1T`)LBTAuQ zJ`ohHdROX3FU}d1W7bvDI_37 z0!XGNWDqVAiZyb9gg~W0btCDIXUV2`fdY|@iT;0NY1BQIgc=eFFyP_el8;6x=c95l zgz^OhB$YDxpmG6d1-@7$L=9sK(zgS}J)FR42t4VzA$PZ~~8+Ho=%FEv{T zoMF-ZfAC%^x>p-jFA&}DQzV#q_>K%6_}BAjB5UE(k56aPNq7H?F9u&P$UPFOdBuBdlW& z)lurXqd3RwKv!wVE&bi0!N8&Iv9mqmgv!RI)a(DMymLHIU%UO}^=$(^yE)S` zCw%2_%wKJzX&S>yN=vhKJ2E569{>1mS?3O6TU*-+mi5DrjU~sAw_bRoq-oFV&g(1I z9a8N+6QpS=UgN`Nvp-^OnN@bq#qXk~N@^!ttQD7*mRc+psZ=Ty3X6)0-m7EHp555c zFgdK=*FH3+qoJXp%(1q;GOGN<%w&V%sly*8T`u^6s(ELl{iEumM_KXQ$p`(m7z_=O zQ=3a-E1n*;LshV3$awv`oAvef^LI_#d;h@N@@NNZPVF~6Jz}unNG0bVJA41W z0ZyK^wEIZIKK4TAvsNqLvTI;qz-qO2S})IM$5yPn-JJhW+0fY7e3uuW%g!x3cu@6h zzgn$ku~?l{hS_X37%EpUdF<%p=SSDJdssIL5+S-cn1~PJe-oMO0bKc;IooS$4;@-U z^(HUcS0Cw@m6eqjSLQZ<{@xw+Jv}LvS*}mn2?+^P?n!660G~6YY%(+%_9-omocQtz`yJl5h0OhrKao3Y4qGu^km}MypyYxHe z1^kqI>g~R-3pVdEFIc#+YxC`!(s<>+uV3HYT(WwJze3T0U(!^4JLupd%c$>lpu3#d zRaI5l5Fdsg3=V!$dZMi@uB552X5L(vhjXT0vs`R!OuXL~7au?8uk}~2t}Aqa=B|o} za28H+?wDiAy*QZ5+qbHPwR7jrp)bg^w7->?`=+z)IZH*kadB~Vg+KIq8w1%M9u~7X zKR>_aV31p;l_g=j&Nx$7SJ&RYaORAG1XXoDXK3w_*oy4z?09;vt7~{6Gc+^$gykg63uln<5X#-b1>FwS9IQRpUCP`ASulQ`$Ec@jXy-xZ6G)b`6v`y>Z RhcN$4hOLNDRR+DC`5!SEYS#b& literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_type_not_owner.png b/Telegram/Resources/icons/folders/folders_type_not_owner.png new file mode 100644 index 0000000000000000000000000000000000000000..b79afc726e24455564e34f8bdd90fdfdbdff2a17 GIT binary patch literal 2258 zcmb_e3rrMO6kRd3luy*w5P#Kipmed!&dh#hcP6Y9S#+^1Ros+MNn}26V0Cw9of%*u z#x_{mlE%hQ)z%MMt!dh*O(ld-LaniCkhT~#u~#VN#FzAIjA8TE z$p*u?&wbt!t;AEn@N&S!3Ni;wp+FF#4Th}jP>|)90S)0mrB8CAe{>u`5ue~hi)|jl z6U+rwK6kwW7S|Vg`TAu%Euh(RkgN~`9Rz^JBB6j^Qkjqw4f|!_Sf9pGBn;7(Inf+F zAX4I4h~&x&Kx`%o<4LOxvC}4!vRG+46EPE{11B6fX~9T}u@a2gj6{DZjHU=8Q{%uS&51&$krV>Km|IDWmI)RN53xa?DYcyU}-&`Sd2$<2?SyxR4uOtrV%a3Bhjk2E(q`5Atdt%~U;` zAd{;AR+AO4Ec-_qwQz(olAEhHhDMCVK1q;k)r?U#z{P67iJA#Bfe|*0w0TJfV{HqDZWg zOs?#g6&M(@vxHfAJWRf%YOKVAe3ui2X`6gLf#E6MV&^CdBLrH&NMN;N4nWZuXJ=_M z5LwP{6GrS^GGDDXSGSMoT#$L_QV6)>75IE>&ZKmjW!3LH7& z?M=l8mm2FI?Nw(bK#vq{g9aRnIcPJDIasR=V|fB#tc4Oqv&~KcyIB`>SR;(vr^4>l zMVH88usk~Q`;f3K7?#)N?nHUL&j98Vnf5)R9#0iHYF}FgpwlNbKN3cjMXi=qKu#sB z-P7m`e;j|6t$8wg;Gj8Rx6+tsVFAWbRs!Q#N-rK~C(W!#u|h2S(d;97q!ReqfI>(>UunA7>L9IyN6jg6h%Ig2L$aQNLObk@05U2f`~Re9tc ze!Txhvv)V%+Xue(d zT-=Nq&G%O?*!}xpeVC&VAm4t4hTY&k0p-3k??y=XkOv~_sp_MOJo zvSIRrlh^##sr8-xOIsU~ikjx_`liD%{p0%1n@W5C#-FdK6OzV_HBMW7zMxj z@qt^D5*m-1T6&Yt>^XhC4YZfvTrp=L=V04!H!AjcXSbH^-BHofd-FS?rSxi1W=ii* zUlgQwB!4^p;HO*5O_l9_v1Lk4UHbZiHfEc2;9TmI4;$ysy62s};e3{HQo_dlVoTGJ zKx^(B0Bw znJJ0GukU@UqkFu{Y_m>HzI&3|R=DJjG?Zw_P?$3t7Bq?tWOf7M=vpyn=J0#-xA#d` z(k!19Z0f#LJacnTDC?KObz2M4|5VrXR1kh@TKxL1v{y@8%XTk`dwyo1?~>9hwb5PY zJ=Zkm(1kTzT=SO0+{A>&9j}xd(Y05v_q3H{UcS$ULiffMAAkGe&iI!L`}D7l{JcWf JzPS|*e*+5@5s?4@ literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_type_not_owner@2x.png b/Telegram/Resources/icons/folders/folders_type_not_owner@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7589433b8356a95b0f7695ca8117712002a5dcdd GIT binary patch literal 2777 zcmb_e3se(V8je!aVr36np;X%v$H&3KkYqw8nSs~^!XrvR5evojF`2o6NRkQ32mzEX zu83{5T@e-0u22yQZ5Ln2K~NNgSXZQKIfvySFDn&}$hr%)Th#6ikCb+8*VD5(^SE>G zcmMzU|Np!9=G~Q%VJ4G<=8K?-!=SXZweXT;a>v6#lk_$9wT5`#p_U zaM**#;}_{-;JWjBQ6RBW zwMcCW28p`xbTe3;9vMTYC(#6hytzyeU?rge1K=ou)u1<8NUH)FvrEFZy<3O~#vojh z0tvJ`6vU}l3W8ZP5J-J-lotC*1v0`{j7$6o!bgCK#B!lXE)+{pF;4o4NDLE9{1E8P z%xKAIW$1)2_@zJ+InG21g{i5jzNr#l)|?;|69gd?VL}W;Ap*6e89B;|8Z8SaEhvG7 zHtS5Bjx`GG7AXz8nNuK;>39eRlf$ghGLa^jFrk$)3B|r5dq`tIhIZggo6Y($=L{_b zdSC!X&H}Mw2iBCxa;znh{RPvG;h#8wsa2~TKAy_OU~sswa3Lu$jERIi6>W)0GXY^V zu&|rWGzdw7G#A>VF_FP$Kyj=&hGq4Wg<3gDSr8m-FAO2@iq#nzHr29p${e7iIG{i< z5hg-KQdBIB5z9%boD_+@MG{gZ8i%S`MyE}i3Y9~2j93P7u*^S!Le(%7NBvJQLz7z8 zY@lGwIs=segeGGGB5-7q3}*GL89IjSBx5YpYEosiaFme-Dy0H}Vf*TI49Q>;DMR~7 zP?1FBhXMdw6p#_9R4TL62#K4A)s;_0lGm$ZC*0(bDS#W3nJA+AenmLfh*M7-XVb_mq4*ljn)~ zsfhp@{gvX6d$+J!E|oHazyz4PXVI7Nm-t(#lwW5LbDZdZ$MduG^?!{= zXx}@>r6&Bj3dhE#?6a_(V_k6bwl^K82K;cGJHQB2Wrn9pths(EkLT2>QU=B(b`IvN zytb}-)z-W{VsZU)e^|`>wE7>D=@7}P`&>cBB zw|je^d{Ca3muItu^?6oRRXIC5zoTrsdUaOAv@N6RsG-5Z!M?sF?Ul!mUvR?-;@?Rz zcfS7m@R1{)o}Q)0jyY#YFs!q)Gj2^wOG{Z%^SZ&S~$ ze`o7fb^NZ-qq#n!$AuADu@brb?!Z9#4fovqe6JsRtIt1>D-`?4D`}T(HvirS7e;o6 zty;C`_Uk~TC@3i4^Z6%Fo-EdUKROzc-Q3dhw_Sf&x6UOaIxUTuvF6&fYsJ$aJ$j@! z81}ulJvY|t-pGhs$w84^F1IEp@7Z2iSy_h8`rYCp=giE^<>eXfZF8(tPft%yPELo1 zd_ho9P>dV@n>p2*+0YUuk%Zi~H8oi;4h;>7#o|SUg@xS%1Mj`;gccPQZ92rSto<_Q zz<~o-t}H+E&w;yl|1mPM@4;Yq_k~-xUOQV}US62){sF&nZZ_asRGV(j_w?KlAHU6W zbaZstvSrx$!Ta|kqoP*qc6xrv49d;TZP)ZORaIXs{{5zNsy#=JL$hn z$j~7#=w+_ENB5mOGu~JB)Kt}1wYILgp00LD&&b%<;=N*Pl1^9j)|R~e`?39n9aR+- z!i;qdpD*z7nKje&{^_N|gT1|oK=4Oxqm|<>#qFHam6DR;b)bIbbCUfH|1xk~-pjl@ zQb5(dSb1&>)J3U}4~FGF&ZjnXZH$;-XZicgxfyHMuH996`8$4T-CLg?EBm~r=Fo|0 zuXJ^{ySurCsN+;BXL^1>SHzN+`fv1eUv0lw`LL(wVyGdYYdBruBWW9M{f_Sw931S_ zaY_GGirGA8_Uyo>;fD`Xce4KTc9)zwb*i+~w$Uy0=yg3F78d5e;Dv31iR)vetC7oI Vxc3U1W&iW33W-$yHE83u{{U9`Alv`| literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_type_not_owner@3x.png b/Telegram/Resources/icons/folders/folders_type_not_owner@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..af528028c47f5e36e2ae4816aabacb94269062e1 GIT binary patch literal 3163 zcmbVP3s4j177l95OB4$u!YGEtDwHI<2}wvIQ6VS~4bO!2ZSJURnVdW zRz|R(pk4(96ai~RM2Z3u@P(koQuV5h2n{L~LBPk|0CMde+w0uS?q(m~|DErg@9de` z^gw@a3o|=291dsU>*E!S{l^-1lPTB{H|?i9>}V?U30L57=2nK?2$#2i4i5KOn}`>t z4CAh1@lgp07NC&`NiC5X7UA5Ns%0==j41JuNR&v*2AhFgv9f4Xi7KMezo4Fc{HFj|X}R3V7$4OlkxYhAD3`}$X-pL4qi6*$QHFrQhyqo~ z`N;BkOs1nD8ySluM_?r?=b>oqd!qv1OU83J24k3br!^v}08LOhf3ODef|Upxpg;k#6AZQ%QMFk>Z;)hTMhUQ@&yE0ic%AcTE*9c%G{6E10K1+zo zB`}t=NCHP8piCMC;3q4|;-Imp91D!8a~)H`<+6OG3MDM%Bfeg2085)B5(!ucgBgjq zQJF-cD~u2$=~Rdq3Daprm>=mzrocivED*e3?}hSJ26GMT$NOA>@-dG8M1`p|0gWmk z6RC8%fXINULL!qvcf;D5Omn5sA&4)ey=M!Mi?CM>j{T6;ph|!-(wQ_mLXU)r3?_wX z;4uh-5F+eK7YZpfH#*`*F*Nj8kFb113e3I4iB}{9iJLf!72(I)f(7#p?al`H2A>fu zpYhwGkJRInB2TPOh(<8dzcGJ2i~*c{y|I(MY&L;$&^OI{`euRRq%IOJqAv7Kj6V1`UP8{PMp2rsKZ4$0; z#s{_^)RV|g=i7*$(?fQ>#`PbbSsS$7Jm`icK)ZUzOtI}~^*heiig!%K;{3%L|D;U` zPtSMnA9}sn{%{8a2K(M@{qobsxq@|^$D(bpMtv+bg^?Y#f zg6j9%gM(+@f_0nT?9mDe3JRi|KF2Tv?~L7N&z^nQw&c0`e0{wKI~{w(**@dYe7}aq zMs7er_LrGiS(h6c4$k*WO-rjy9?c=dZPWCAVTugm&GzW12^B%W2i6 zynRikovp484+?sqf3)&wux$o`NIc-4c+-;~5ph2!C#O83&h8g6HLs{>p^s+&x`(~J zB|XiRy={$+x<7QSen*231zKBMGjhu=ZJ%kL=DDOW;8ksD=}yZ>Wf~=6Eotag|04$n zhgD!(WmQ#8O%43mlO@-+?A>ZS(=N+w+LnOAC4D=+pKJ>wY#JHpX=w0DNlEebHRXhS z`6OB-I$qHPEjvc`-_NK3?aSBKnpL0c;XeDd`q9&;*BI$g$ZQ)M(=Bp^!t`qFOOtws zB}2Y%?{dwNcpwtaYbI5RWTHR@XD z&u;t9->*wqG-MH@5L&F**Lq`(-22BfXG%&-wSC9c14Bb8FCJ&~I|*_Jk1}*RomedX z?E;NTg{0n7SM2aFc2p{plji~F?hJ;q*Vk>jJ8%OtDb3tQ?*eGsZJV{)&87{6bchxc z6Js(@f}#m3)!iOzb9;Es9+$dv=UAg7w>vw1&UR!k3Si8gVPzBjTs=D2*V7}i?0@@a zboER_m17BgOq+&sEctJPX} z<-hc4_Sv=cad&su-HOi6&a$#HMfbHg`O7oIvxJ-5GRoJ+|K5*TRUA+l4}iOM9u^@y zp7p$Weao`k(0fM;YKw}CZES41b-J`|+bUPhFKZ5DT)%eB&OS-0v@S?(NiX(4Ff#n2 z7)i$(kwsuHXe)^{yH!P3fu@(#5P9Tx4 zUAfZvTTpTP>d?@O&X&`zUeGT(7+R|RIf~?NU;g8dxqhEjo;rmi)@>Y)eAOPBwR@&V z6X)J^`bx3bB~g*x2KPU`TcfEtb<0t8B-mLz<*-pjSnN>y%?Gol0Iho@oUo2)>Xm*5 zjfT9eGH;qSckcAxo20@*KKmio5&%#xI69ZiFOUdbZ|*5tR(W(*a;#XqL0HGc>X)|HR3Ym8*f= z*5pC`_XWZ$np8&gxw4Fmj0y$;8$0Yb`(DnOHLL$&<4*Mch0Pw{`7}JFjXY`lXHi7O zvx>_p#^3ImY3~k=TAbtC+S?cXp|k$xfs9d6QSn9k0uT&XHB}aVmhtPwuC7ts7QD&F eH$Cy4(P{_%<(!jy~E&m2UM*!OZ literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_type_owner.png b/Telegram/Resources/icons/folders/folders_type_owner.png new file mode 100644 index 0000000000000000000000000000000000000000..8450e7d76e745f4754d07b1516d2dc9997a7b46d GIT binary patch literal 2147 zcmb_eYitx%7~NJvfbyu1AVC7dw9z7+o%hZoEKqh^wxrt@xGBfS& zR(@eHpg_PzR6rg^AwVE#jYJz%ERi4>Gz}su@d3tQQ6hq9NYp#~vLGNKZZbPFcg{WE z`M&SWy|b#harUSY<41Tro>BFo;5>A$bdO=B=-*JroIt1H$>3Uf$h5C$1nE2hhw_t#~1KnDx3_! zm>%k~U`tnHMD1FlN*X?6IyNmWBZ35U0G3X~4O>q8@hq>5uH9i0$FdM-i65_V17fY= zW-MS@5aYc*LZvw#6C^L~V>wBx#u$ngNlGMXmY{tyN68F><$pMeW@%A*Ua&473*Gtg znByd6l1!yi-W2OKt#*=@B#ERLl3@shAnc6cfHYy)6$OSMv{g$_I=X3KE+bIP4#$rp zrMVOm$s(;`=gWi&My5fMq`j1zQWmJGMO?DOif4msDhcB-0S(7SSh|Q!#!SbwW9BWW zi;u4hfJz$<7h~L1OCnJWVLP>*D2;qUZi==enIt6VLEG%GR9M@IWLCJ@B;|kwfn!<` z(~K7y)m)H_1p;nkB&=$IZfIu8o-$|-3<3xGafV_jg5n99kICwz!sEE)JT96TlrLKb_*J!{2{|VMqIci!7fO6IopdFG)qaDYJm6QW!+_X?&q>jz1 z2#4i*!*+n7!up^eM`?R?U6Xw@FR?165v-yq1g~-|0eqT3@B$E7T4XtfQVR2frrO~) z*PWm9xn`<}gvc`*tx!H*kwAg1$x^R93UjX`v^vZ0!1-wRFZ^3_Jh^u{OFTeM&_h~AMa9qzBpy6W1}c?>c9qh) z6^6%C5~~l^L_(u}I<$TF2W{hqe)Hf{eXnj?d98cn-Y+iW4K2;jo~}Gz_4$Wd&FZq{ z`>R#>;@Hh|H!V7}JVvcOnrg$U&c6TE+VdAO>q3=(zOB3-8~60Sffch#zW(gu)uWFL zD}8qj{ni;H++Y3toZqLesS7-IGTO81lOM0VvwQd6`DI(>ttW!##L=ZgYSvW_FWK3@ zYUP9@hj#Ah-}OVL=k&;n;@XPEd*}D{9@W0fY^grB65I4K-ZpJwchhr~L(W-Juw_?d zWM6shy-gF2oH2w;Pk3L5Ji21%AItU)bWPtno7;2pnPmf4XmwqM=cR^d z&*^nda~}w@6Gorc4}96tduHIu9P;O@*V?H4iA`I&4o-Y!*Ze(~ho9=mY?-YcIlF#V zPvW7a)nm&>gg3y$pPqNB-t6pMBYyP#rL(_mD_?jDuAaQ3@7tM^FI;`{@PUQiDMM=K xmQPX}`nh9o9ADhJ;Wd5yiC;sN_x*Kz%#?$_b!!h#n(2N9)Ymo!_swcs{x|c2)&&3n literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_type_owner@2x.png b/Telegram/Resources/icons/folders/folders_type_owner@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..03335ba2f8b5d0d2f39c582f89198f3c0b3810bd GIT binary patch literal 2595 zcmb_e4Nwzj8jct%TB$!x9R$R^_y>1xvb)**>`r1#6A`?IMjI#|USWj8oyNA|=7aQth{h85tn#GAdxFOfX` zY-C>`dAlK5B6+Hjw-<;7))z=da4RTQpgBdr?FDFwL~jguDW-%IA(|`ZJqGz?=OsDB zvj+LgYAa&(nmH$*UE$+is>ro76(tP8%8gqgeSic6Zce12fZOHqlL3Q#mX`$Akzu7A znuUlZ2DvE`5Gt_RAhY1(AhkjRGbpZxw1fiHsBnVV0$~WMQzAMgs)A7si6bP2LD8Qa zMDwu@aO6O8=d*ieof3!@XV9EgHRiX+clF}@YW#Tw*sn0bVoMn`p zi*s`x(GRd_9P4!oqTqK5-$5OJ{EYyhv{q|8#$&a(-SH59aeEm^BU+HhqW$)ums9TM z{6eXZ;kK6nnd>9jcuBL5qeQ`H7X(+VQMQ<5$ZU=@hJZ3&<~^)X?$4YzhqF*3XOLqE zhQNp#M%8vyN2+xsg8l?ikq9yewF)fn2+oJ<0NRdf$p{Gh1{Ao4r9|p~f?0-i2tGFj za^~GsF{ku;isewelB8L12|f@Qs8h|Vuv*C+k6)xb43}du$U)i)o@Yr0#R!I_aF|6n zEv!Ru4Xoo>6-;O}sFq_9trkOL^DP2X8fk81{+!QQfdL%KNOLJ|4Vklxsd~L=_7d9Tb658k&YN72|+89M{6MR)@iA6wzuh zN{y-rN5s&x9wD=NKj>aC`ii{79f)4JcxcuZB*jGRZjdvPK69)*I?O+&9#0fGI=|e> z0n+bj{#2jQb3 z`Qp=QO^ugA7xvd8zqzTK` z?_apE`W;8xbsKx|;My-4Jf$_iq_k8$*1f;I>DaZ;r0=awPjBiQ9)51Dv7_U+p9U>@ zf~eHro18q`*VD5o`$PJCsPExJ{aE+-Kj;+ewW(9p)k|c1_U@Ig`D9|cuC6Yi?`mr^ z?~*+{O4YMiHD6d*SiAV$Yir)@85tQV_)Xq>cBp20y6o-d9~skn8~bkE`gt%&jCB_w z$g+j~LxY2rd$M-yFrBymc=+no<2NSKlapV+`KMQujxT0jt-W#c=FREp>7gN6UrkfS zrO}$q(b3VCmX;~4!C=_8Z(sf0M~`k5A=_5B<_{c5Yi@0At^D&Zv(`JloOxBPR@Y{( zNGy70%fR!^moHx)A1{&J4tAY8_srPP)vK#O;jcY_n&P$9Hwg54g8@# zJTj8rd!YUeTZSl#hlx)n%4$a+JivFloX*6tcRwCqWZHH`Z!ml&lC}Ht^71yUGF@pn zefs3dlcrrRkEe;v&(9APY}&keSBlYSJap)gZA(&8()ogA8>gnGLW9oGF^|V%OK7wu z{$gOF?5wmQceAXnhc+##|Im?fuDN;BnNQD$($}pUA0Kage`tRxlKer{QfWd+nwpwg zU>g`12ubhUxl>@<^wyFS+ggT!r|3$((O80~*p3}Ja>OF9{MRWcQFAIuc7#fPBYfM} t@%7A$dlhxz+kgN3^MooWF}AS}7B}1&%ri|V$RdB^a<=DM&OKjL^>3E@uW|qY literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_type_owner@3x.png b/Telegram/Resources/icons/folders/folders_type_owner@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..4611223282628b0b25ce1dcc5d794ce4f564adf1 GIT binary patch literal 3046 zcmbVO2~-nz9u5KuC_<=J1Q)}AHUc4&$w4w0BM=p&L5^6UO37qq5+b=a2_&Fm#S1*E zEQffa1+^>-3)+gvp;8spRy^=YK@Ju0q*_-6t?UGWwfnT|+j*JEe`db__xpb5o6PXA z1@?9>b|ezXJ|tKeN&G9#r_C7RO0ufUC$6^I;8;D0H2xFwX+g^0?MxzBHz~w1h8WT3 zFsf1cBA7;s`2 zm>5k>M0pq>m_wOuf(Zf@Za^p|l~S#TO?+U87be!`$8>-)1TiG?fdI2XN{lF+5~R`L z6t*vihB8=eiXYFH!C|s^JRb@KGPrb*OJ^`?3=Yf!VF;oO9{^!Zhsoeb;rwA+#2p_< zFc`Ejoo+N5eT__CjZRKy@OV5r2+<*kMj&YV6tw{{(bRg65e6ZyM|BFVL7`Do%#4Us zlVsongwnSzsI;TBYW;ASh=9>eh?dUq1;U;g8?G6BGIUg_i9n8Mos7q^O6ZSh6D0mv|gN|#p#i_UX!Fl@p;LF zOb@d+S~y6DBLEe9y0k%WUZN{x;%OsHcHsSt_a5VhWbs8Kvb$Oj0weH97}1~CQ~LvS_?1N~4M z;>SX0JcP}mK^X1_f)G>2pY! z)3`VbB-j{Cj4R{tAU}MBZIMnvv>Kv(m({EaBN$}}kAZNcQX0fWWi*_{@}o)pxDbua z0R1=+!e%geGIK!>)d(D{&=c898E%m%{IA0+rGhe47BGUE%bgFP<~-vVF#K5Yo_Kte z<>CFt1e_rKljOg(uGh#6Mns1P$cfl}OnuQmq+gFD|GD~)%jR2I@2Y=qJ^r8Shl7JA zAZj^IOi(&t_J?ksHE&Zx|L?2~y?bXajlhXvXI_p@S>k4NPUC8VT1QOb?meyp#Bi?) z5eA4&Esu7^`Yer~c22dp3d(6Y=@URMSeDCj$jPc6yex2j^@tckxKfZC}#`1E=ZJS)J-kRULzOWEqy!d*5e`S}$ zxpU_V3k!{Xx8~u7xztHsZyb7G-f8$myxw=(#09{1Ds_T`!;;w8f;mS`FMsX4a>Z$J zeQA8Hu5#(M4U^s6+@hkQ#AJeF&+gsf(@$gw4^&hzldM+_zKIiy*EaTkT~bmK<8$lQ ztuMT&xfj|`rdSq@%Wkqq(c6a>?R)<0nZaljq`iLGej-IK?-}RdMo2AFNhVI5n3k6I zqOV=PTo@V}>gwW>zjLRB|BhX|E;ucaN~NcJervB;=}#OSPEJDPeOKYn;~gn2mA9&5Vw@*!$j;8Lsj0bqIb61F+FqWj~ zVP9Y3gl8QcBrmvP;&?l|YgH|+t(&)PlTQYYT$mcXXwe4idS5c45JyK7xV9=|QBl#w zB6oKG^=sEa*Ci-=aDH@kb#-%dv$A!6z`2%|mcqgrrl&;k5>zT&*(ebd{UNzU4_qfS=b&cl{v6elMqZ!Rtvxc4yoGqkg_Gb=00#lEMf zXXVP34dITjqn9s#weE$(JsOqTTfTnU#GVVebUT;1sZF{GS$TPfzqE3hG-V3&w~~Re zId?ibI`9_)CNnE1XZ~jg5-idk?`#?GPqtg<>gt-yRxVox+%`=cbB|y+7F}#t!bZbpzC9fWNRI)HMv>`9^>$#NUk=Fl=dDz)muq-k*_Q++j zjsCmty?gh@#l^Lhjw^L@bq&3E*2&rVaLeRlAcJ8sx&G|gu{xW7`8-|t{Kbn4jg75s zZ3Q-8y)2J6Gat`$CL^1ir%o;KsK0;TYiZ@NV}+9X&Q5o(TfW2oii)ev%{k8G0v`^G zMU9ys5@O4+jDKPx2p?+;bk%8<*BI; zA3d_2Om6JTmaj;qW(Z+n(vGYw`@M zvcb^0KK-!QrWrG43`~ijPI8*I^GIEJs>YFWoCD` zOj;9n<Hh}z5T}Cx literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_type_recent.png b/Telegram/Resources/icons/folders/folders_type_recent.png new file mode 100644 index 0000000000000000000000000000000000000000..d5415575199d83f392c248fb59385f66e9ba34f6 GIT binary patch literal 3156 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 F{{xvO(8d4& literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/folders/folders_type_recent@3x.png b/Telegram/Resources/icons/folders/folders_type_recent@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..88d8ec74f835cea6c4e7660b4b9623331759d113 GIT binary patch literal 3714 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/cloud.png b/Telegram/Resources/icons/settings/cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..a671b324c1cf950910ee2c83236761e66da23a62 GIT binary patch literal 698 zcmV;r0!96aP)|`;Xlw;uvHKQMG&#_2l#3vtap+?M0A$f`*CK@W#$a{CGG0qYY`sRZ6_~0 zE*xLa+lse^yYy^oMfgxS>c|0wuavG;`B`zM%I}Juxx^&+RnJi72WvlA&pJ8b0pW1Y zEat>&WVqTr5QC;C&wGnN^A40tp7(X+dF5khc!Ue9?q8Ff#y&(Z z)wS>e1UKRAvaV^naJ~gS4|d8)Rip-)e#3y*Q|L%S=MA(iRkNzCb8-)J8}dZgu(uEW zvOl=|4G~&s5_|mh0000032;bRa{vGf6951U69E94oEQKA0Ov_WK~y-6?US(zgD?<= zZ4oySoJ3q46;T{~181Me2k`;iMBD{4Iy<>I=-`$?CtVWKp;Ro!rrBEXn?l0>UAW@} z;o|?eeSUTvCk#VLlA5Lg03d|8E6B2(Wf|Ggwyo>B+@i89$pHwVuIn6@D2k4jCrOg9 z^QLL$c@805*Y!*^3|`;Xlw;uvHKQMG&#_2l#3vtap+?M0A$f`*CK@W#$a{CGG0qYY`sRZ6_~0 zE*xLa+lse^yYy^oMfgxS>c|0wuavG;`B`zM%I}Juxx^&+RnJi72WvlA&pJ8b0pW1Y zEat>&WVqTr5QC;C&wGnN^A40tp7(X+dF5khc!Ue9?q8Ff#y&(Z z)wS>e1UKRAvaV^naJ~gS4|d8)Rip-)e#3y*Q|L%S=MA(iRkNzCb8-)J8}dZgu(uEW zvOl=|4G~&s5_|mh0000032;bRa{vGf6951U69E94oEQKA0vJg|K~z|U?Ug;t;y@69 zqoy$lqM!!st;9;y!a@k75d^WY35Zp|KVan_(8kU}#7eMzv9k~@EG%urN{JYwU?7O` zJ7%x2Iq-wcY3?}Kr(9-do=kRUF${q~AP|WE8_VY@JRT24Q8`mR!dQoPcj=O91b^|P4EIql8VKm!{PW#HjzkVGMU_Nw^u>{ zfYa$ztyaBWujw`n!%U~sH!8o=Zny1ryNNb7n{7B8LfQZTbY0KoawZDp^LcoiJLB;< z5D37RutLUJEEc!hol2#QeuLldkHum}cRdHkafV?kmC9%|5(GgMMNQL;b_f9Q^Yils z8;YU|g~D>Ve1DrD|C+_}*#x%PY>h_adcA(Aa%a6><2Vjk`gt77vK+_3XL%1n5IoQ8 zx~}WGqA0yyPnKl^`)Qi)^?G0F&8vo$N+p-e1uGPdM(6Xnc|rgHP1DNdGC>efLg{pR zx7(R21OQM~mE*X_>QCknj^kD5>P^`)oQ!lnk|H3STGoTTzn$5SS&Y`aYkpUa#->doye{n@u*G zHGFlPPAAXv-EQ}AIDAXxd_H$NolGY4$_DDqqiNdVaC|-s00640N|N+p9s~k`Kp+qX Z_yvQSHxS?jr;Gpq002ovPDHLkV1lq#$Xfsa literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/cloud@3x.png b/Telegram/Resources/icons/settings/cloud@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..3cbc43cf7014a2240ad50657a467c8b4f1cd4272 GIT binary patch literal 1102 zcmV-U1hM;xP)$G8`hVY_qkSdq>fmb;9@T9pFFYCW`FyJD!ysf#G}jKrides3|a9;MJ-6zv{Xa%w0tH- zmHY2JU1Map+C311rYFyPi$L=ZluMrXb>w;FV`zAU3#;y5lbpsrL@(8~@Bsuj;q0=m zX}fT~1w9XT%1KqE2AO`tfY(##NJ8fgv@KP$s;zT!4|5yxMAxvl5B;(~xcm(fT4)lM zLxs%%00Bo(OjJbx001^NHd$F&Y;0_Da&l^FYEn{CEiEl7Dk_tclh@bR{r&y_|Nr*( z_S4hTg@uJEC@3T(B&MdOl$4Ym9UWI!SMBZXIy&y|?%mzp3JMAi4i4w%=bM|G^z`(iqN1Ih zot2f9c6N3qCMNv+{P*|wtE;OeB_)J}giugWxw*M9F)`WM+0f9?<>lo`Nl6e85Z~Y5 zk&%(b#l^b1x|*7r!otEuMMbTxt;fg5b8~Z&l9G6Mc*w}eN=izosHhDM4G9SewzjtH z?CkUN^R>0LTwGim8yhn-GdnvwH8nLLARsHAs!IR>010qNS#tmY3ljhU3ljkVnw%H_ z00A;dL_t(o!|m4BQi3rMhT&fk8y{jv?1+M0P_d!nFN(eQUa-skA3L7uxFOki;5f7I z1w4~UCYv~pBuSF==M@!uO1!0Izf{UADt-9OUlpjfXKHHkC0|{=rPI)e?**HzoDhE2 zY~gr8)xvgKNe6B1Os6AAL+A|ipf0G2u$=B5B@|^aF((3by=F*X|G?nT@JInDZo(u+ z$DnK6z)4O(-(*bdOidd&m`UlJ**O?N+6B!UIY=+KuDh5~PpGA3aLTT%Dxftm^RLs; z1{XqhlX6m9YzW)b4NmOvA?y;+-o6ENKtSO`3+Ra2q+<){gxaK23+RkI|8qVRq912I zqdata().pinnedChatsOrder(filterId); auto &filters = session->data().chatsFilters(); const auto &filter = filters.applyUpdatedPinned(filterId, order); - session->api().request(MTPmessages_UpdateDialogFilter( - MTP_flags(MTPmessages_UpdateDialogFilter::Flag::f_filter), - MTP_int(filterId), - filter.tl() - )).send(); + if (filter.isLocal()) { + filters.saveLocal(); + Kotato::JsonSettings::Write(); + } else { + session->api().request(MTPmessages_UpdateDialogFilter( + MTP_flags(MTPmessages_UpdateDialogFilter::Flag::f_filter), + MTP_int(filterId), + filter.tl() + )).send(); + } } void CheckFilterInvite( diff --git a/Telegram/SourceFiles/boxes/filters/edit_filter_box.cpp b/Telegram/SourceFiles/boxes/filters/edit_filter_box.cpp index ce23d235f..03eedb753 100644 --- a/Telegram/SourceFiles/boxes/filters/edit_filter_box.cpp +++ b/Telegram/SourceFiles/boxes/filters/edit_filter_box.cpp @@ -7,6 +7,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "boxes/filters/edit_filter_box.h" +#include "kotato/kotato_lang.h" +#include "kotato/kotato_settings.h" #include "boxes/filters/edit_filter_chats_list.h" #include "boxes/filters/edit_filter_chats_preview.h" #include "boxes/filters/edit_filter_links.h" @@ -15,6 +17,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/layers/generic_box.h" #include "ui/text/text_utilities.h" #include "ui/text/text_options.h" +#include "ui/widgets/checkbox.h" #include "ui/widgets/buttons.h" #include "ui/widgets/fields/input_field.h" #include "ui/wrap/slide_wrap.h" @@ -37,6 +40,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "history/history.h" #include "main/main_session.h" +#include "main/main_account.h" #include "window/window_session_controller.h" #include "window/window_controller.h" #include "apiwrap.h" @@ -86,7 +90,9 @@ not_null SetupChatsPreview( (rules.flags() & ~flag), rules.always(), rules.pinned(), - rules.never()); + rules.never(), + rules.isDefault(), + rules.isLocal()); updateDefaultTitle(computed); *data = std::move(computed); }, preview->lifetime()); @@ -107,7 +113,9 @@ not_null SetupChatsPreview( rules.flags(), std::move(always), std::move(pinned), - std::move(never)); + std::move(never), + rules.isDefault(), + rules.isLocal()); updateDefaultTitle(computed); *data = std::move(computed); }, preview->lifetime()); @@ -140,7 +148,8 @@ void EditExceptions( rules.flags() & options, include ? rules.always() : rules.never(), limit, - showLimitReached); + showLimitReached, + rules.isLocal()); const auto rawController = controller.get(); auto initBox = [=](not_null box) { box->setCloseByOutsideClick(false); @@ -174,7 +183,9 @@ void EditExceptions( | rawController->chosenOptions()), include ? std::move(changed) : std::move(removeFrom), std::move(pinned), - include ? std::move(removeFrom) : std::move(changed)); + include ? std::move(removeFrom) : std::move(changed), + rules.isDefault(), + rules.isLocal()); updateDefaultTitle(computed); *data = computed; refresh(); @@ -225,7 +236,8 @@ void CreateIconSelector( }, toggle->lifetime()); const auto panel = toggle->lifetime().make_state( - outer); + outer, + rules.isLocal()); toggle->installEventFilter(panel); toggle->addClickHandler([=] { panel->toggleAnimated(); @@ -243,7 +255,9 @@ void CreateIconSelector( rules.flags(), rules.always(), rules.pinned(), - rules.never()); + rules.never(), + rules.isDefault(), + rules.isLocal()); }, panel->lifetime()); const auto updatePanelGeometry = [=] { @@ -375,10 +389,14 @@ void EditFilterBox( }, box->lifetime()); box->setWidth(st::boxWideWidth); - box->setTitle(rpl::conditional( - state->creating.value(), - tr::lng_filters_new(), - tr::lng_filters_edit())); + const auto isLocal = filter.isLocal(); + box->setTitle(rpl::single(state->creating.current() + ? (isLocal + ? ktr("ktg_filters_new_local") + : ktr("ktg_filters_new_cloud")) + : (isLocal + ? ktr("ktg_filters_edit_local") + : ktr("ktg_filters_edit_cloud")))); box->setCloseByOutsideClick(false); Data::AmPremiumValue( @@ -395,10 +413,12 @@ void EditFilterBox( tr::lng_filters_new_name(), filter.title()), st::markdownLinkFieldPadding); - name->setMaxLength(kMaxFilterTitleLength); name->setInstantReplaces(Ui::InstantReplaces::Default()); name->setInstantReplacesEnabled( Core::App().settings().replaceEmojiValue()); + if (!isLocal) { + name->setMaxLength(kMaxFilterTitleLength); + } Ui::Emoji::SuggestionsController::Init( box->getDelegate()->outerContainer(), name, @@ -422,7 +442,9 @@ void EditFilterBox( if (nameEditing->custom) { return; } - const auto title = TrimDefaultTitle(DefaultTitle(filter)); + const auto title = isLocal + ? DefaultTitle(filter) + : TrimDefaultTitle(DefaultTitle(filter)); if (nameEditing->field->getLastText() != title) { nameEditing->settingDefault = true; nameEditing->field->setText(title); @@ -446,11 +468,32 @@ void EditFilterBox( constexpr auto kExcludeTypes = Flag::NoMuted | Flag::NoArchived | Flag::NoRead; + constexpr auto kExcludeTypesLocal = kExcludeTypes + | Flag::Owned + | Flag::Admin + | Flag::NotOwned + | Flag::NotAdmin + | Flag::Recent + | Flag::NoFilter; box->setFocusCallback([=] { name->setFocusFast(); }); + const auto defaultFilterId = window->session().account().defaultFilterId(); + const auto isCurrent = filter.id() == defaultFilterId; + const auto checkboxDefault = content->add( + object_ptr( + box, + ktr("ktg_filters_default"), + (state->creating.current() ? false : isCurrent), + st::defaultBoxCheckbox), + style::margins( + st::boxPadding.left(), + st::boxPadding.bottom(), + st::boxPadding.right(), + st::boxPadding.bottom())); + Ui::AddSkip(content); Ui::AddDivider(content); Ui::AddSkip(content); @@ -493,7 +536,7 @@ void EditFilterBox( excludeInner, data, updateDefaultTitle, - kExcludeTypes, + (isLocal ? kExcludeTypesLocal : kExcludeTypes), &Data::ChatFilter::never); Ui::AddSkip(excludeInner); @@ -613,7 +656,7 @@ void EditFilterBox( data->current().flags() & kTypes, data->current().always()); exclude->updateData( - data->current().flags() & kExcludeTypes, + data->current().flags() & (isLocal ? kExcludeTypesLocal : kExcludeTypes), data->current().never()); }; includeAdd->setClickedCallback([=] { @@ -629,7 +672,7 @@ void EditFilterBox( EditExceptions( window, box, - kExcludeTypes, + (isLocal ? kExcludeTypesLocal : kExcludeTypes), data, updateDefaultTitle, refreshPreviews); @@ -656,24 +699,42 @@ void EditExistingFilter( Expects(id != 0); const auto session = &window->session(); - const auto &list = session->data().chatsFilters().list(); + const auto filters = &session->data().chatsFilters(); + const auto &list = filters->list(); const auto i = ranges::find(list, id, &Data::ChatFilter::id); if (i == end(list)) { return; } const auto doneCallback = [=](const Data::ChatFilter &result) { Expects(id == result.id()); + auto needSave = false; - const auto tl = result.tl(); - session->data().chatsFilters().apply(MTP_updateDialogFilter( - MTP_flags(MTPDupdateDialogFilter::Flag::f_filter), - MTP_int(id), - tl)); - session->api().request(MTPmessages_UpdateDialogFilter( - MTP_flags(MTPmessages_UpdateDialogFilter::Flag::f_filter), - MTP_int(id), - tl - )).send(); + if (result.isLocal()) { + filters->set(result); + filters->saveLocal(); + needSave = true; + } else { + const auto tl = result.tl(); + session->data().chatsFilters().apply(MTP_updateDialogFilter( + MTP_flags(MTPDupdateDialogFilter::Flag::f_filter), + MTP_int(id), + tl)); + session->api().request(MTPmessages_UpdateDialogFilter( + MTP_flags(MTPmessages_UpdateDialogFilter::Flag::f_filter), + MTP_int(id), + tl + )).send(); + } + const auto defaultFilterId = session->account().defaultFilterId(); + const auto isCurrentDefault = result.id() == defaultFilterId; + if ((isCurrentDefault && !result.isDefault()) + || (!isCurrentDefault && result.isDefault())) { + session->account().setDefaultFilterId(result.isDefault() ? result.id() : 0); + needSave = true; + } + if (needSave) { + Kotato::JsonSettings::Write(); + } }; const auto saveAnd = [=]( const Data::ChatFilter &data, diff --git a/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.cpp b/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.cpp index dd694585c..030d35f8f 100644 --- a/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.cpp +++ b/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.cpp @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "boxes/filters/edit_filter_chats_list.h" +#include "kotato/kotato_lang.h" #include "data/data_premium_limits.h" #include "history/history.h" #include "window/window_session_controller.h" @@ -38,6 +39,12 @@ constexpr auto kAllTypes = { Flag::NoMuted, Flag::NoRead, Flag::NoArchived, + Flag::Owned, + Flag::Admin, + Flag::NotOwned, + Flag::NotAdmin, + Flag::Recent, + Flag::NoFilter, }; struct RowSelectionChange { @@ -232,6 +239,12 @@ auto TypeController::rowSelectionChanges() const case Flag::NoMuted: return tr::lng_filters_type_no_muted(tr::now); case Flag::NoArchived: return tr::lng_filters_type_no_archived(tr::now); case Flag::NoRead: return tr::lng_filters_type_no_read(tr::now); + case Flag::Owned: return ktr("ktg_filters_exclude_not_owned"); + case Flag::Admin: return ktr("ktg_filters_exclude_not_admin"); + case Flag::NotOwned: return ktr("ktg_filters_exclude_owned"); + case Flag::NotAdmin: return ktr("ktg_filters_exclude_admin"); + case Flag::Recent: return ktr("ktg_filters_exclude_not_recent"); + case Flag::NoFilter: return ktr("ktg_filters_exclude_filtered"); } Unexpected("Flag in TypeName."); } @@ -255,6 +268,12 @@ void PaintFilterChatsTypeIcon( case Flag::NoMuted: return st::historyPeer6UserpicBg; case Flag::NoArchived: return st::historyPeer4UserpicBg; case Flag::NoRead: return st::historyPeer7UserpicBg; + case Flag::Owned: return st::historyPeer2UserpicBg; + case Flag::Admin: return st::historyPeer3UserpicBg; + case Flag::NotOwned: return st::historyPeer2UserpicBg; + case Flag::NotAdmin: return st::historyPeer3UserpicBg; + case Flag::Recent: return st::historyPeer6UserpicBg; + case Flag::NoFilter: return st::historyPeer7UserpicBg; } Unexpected("Flag in color paintFlagIcon."); }(); @@ -270,6 +289,12 @@ void PaintFilterChatsTypeIcon( case Flag::NoMuted: return st::historyPeer6UserpicBg2; case Flag::NoArchived: return st::historyPeer4UserpicBg2; case Flag::NoRead: return st::historyPeer7UserpicBg2; + case Flag::Owned: return st::historyPeer2UserpicBg2; + case Flag::Admin: return st::historyPeer3UserpicBg2; + case Flag::NotOwned: return st::historyPeer2UserpicBg2; + case Flag::NotAdmin: return st::historyPeer3UserpicBg2; + case Flag::Recent: return st::historyPeer6UserpicBg2; + case Flag::NoFilter: return st::historyPeer7UserpicBg2; } Unexpected("Flag in color paintFlagIcon."); }(); @@ -285,6 +310,12 @@ void PaintFilterChatsTypeIcon( case Flag::NoMuted: return st::windowFilterTypeNoMuted; case Flag::NoArchived: return st::windowFilterTypeNoArchived; case Flag::NoRead: return st::windowFilterTypeNoRead; + case Flag::Owned: return st::windowFilterTypeOwned; + case Flag::Admin: return st::windowFilterTypeAdmin; + case Flag::NotOwned: return st::windowFilterTypeNotOwned; + case Flag::NotAdmin: return st::windowFilterTypeNotAdmin; + case Flag::Recent: return st::windowFilterTypeRecent; + case Flag::NoFilter: return st::windowFilterTypeNoFilter; } Unexpected("Flag in icon paintFlagIcon."); }(); @@ -334,7 +365,8 @@ EditFilterChatsListController::EditFilterChatsListController( Flags selected, const base::flat_set> &peers, int limit, - Fn showLimitReached) + Fn showLimitReached, + bool isLocal) : ChatsListBoxController(session) , _session(session) , _showLimitReached(std::move(showLimitReached)) @@ -343,7 +375,8 @@ EditFilterChatsListController::EditFilterChatsListController( , _options(options & ~Flag::Chatlist) , _selected(selected) , _limit(limit) -, _chatlist(options & Flag::Chatlist) { +, _chatlist(options & Flag::Chatlist) +, _isLocal(isLocal) { } Main::Session &EditFilterChatsListController::session() const { @@ -368,7 +401,7 @@ int EditFilterChatsListController::selectedTypesCount() const { void EditFilterChatsListController::rowClicked(not_null row) { const auto count = delegate()->peerListSelectedRowsCount() - selectedTypesCount(); - if (count < _limit || row->checked()) { + if (count < _limit || row->checked() || _isLocal) { delegate()->peerListSetRowChecked(row, !row->checked()); updateTitle(); } else if (const auto copy = _showLimitReached) { @@ -492,6 +525,8 @@ auto EditFilterChatsListController::createRow(not_null history) void EditFilterChatsListController::updateTitle() { const auto count = delegate()->peerListSelectedRowsCount() - selectedTypesCount(); - const auto additional = u"%1 / %2"_q.arg(count).arg(_limit); + const auto additional = _isLocal + ? tr::lng_filters_chats_count(tr::now, lt_count_short, count) + : u"%1 / %2"_q.arg(count).arg(_limit); delegate()->peerListSetAdditionalTitle(rpl::single(additional)); } diff --git a/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.h b/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.h index 26e0529c3..b68a1d18e 100644 --- a/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.h +++ b/Telegram/SourceFiles/boxes/filters/edit_filter_chats_list.h @@ -51,7 +51,8 @@ public: Flags selected, const base::flat_set> &peers, int limit, - Fn showLimitReached); + Fn showLimitReached, + bool isLocal = false); [[nodiscard]] Main::Session &session() const override; [[nodiscard]] Flags chosenOptions() const { @@ -79,6 +80,7 @@ private: Flags _selected; int _limit = 0; bool _chatlist = false; + bool _isLocal; Fn _deselectOption; diff --git a/Telegram/SourceFiles/data/data_chat_filters.cpp b/Telegram/SourceFiles/data/data_chat_filters.cpp index efac543af..610b795a4 100644 --- a/Telegram/SourceFiles/data/data_chat_filters.cpp +++ b/Telegram/SourceFiles/data/data_chat_filters.cpp @@ -7,6 +7,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "data/data_chat_filters.h" +#include "kotato/kotato_settings.h" +#include "boxes/premium_limits_box.h" #include "history/history.h" #include "data/data_peer.h" #include "data/data_user.h" @@ -15,13 +17,16 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_session.h" #include "data/data_folder.h" #include "data/data_histories.h" +#include "data/data_premium_limits.h" #include "dialogs/dialogs_main_list.h" #include "history/history.h" #include "history/history_unread_things.h" #include "ui/ui_utility.h" #include "ui/chat/more_chats_bar.h" #include "main/main_session.h" +#include "main/main_account.h" #include "main/main_app_config.h" +#include "mainwidget.h" #include "apiwrap.h" namespace Data { @@ -37,8 +42,199 @@ constexpr auto kLoadExceptionsPerRequest = 100; * crl::time(1000); } +const std::map LocalFolderSettingsFlags { + { ChatFilter::Flag::Contacts, qsl("include_contacts") }, + { ChatFilter::Flag::NonContacts, qsl("include_non_contacts") }, + { ChatFilter::Flag::Groups, qsl("include_groups") }, + { ChatFilter::Flag::Channels, qsl("include_channels") }, + { ChatFilter::Flag::Bots, qsl("include_bots") }, + { ChatFilter::Flag::NoMuted, qsl("exclude_muted") }, + { ChatFilter::Flag::NoRead, qsl("exclude_read") }, + { ChatFilter::Flag::NoArchived, qsl("exclude_archived") }, + { ChatFilter::Flag::Owned, qsl("exclude_not_owned") }, + { ChatFilter::Flag::Admin, qsl("exclude_not_admin") }, + { ChatFilter::Flag::NotOwned, qsl("exclude_owned") }, + { ChatFilter::Flag::NotAdmin, qsl("exclude_admin") }, + { ChatFilter::Flag::Recent, qsl("exclude_non_recent") }, + { ChatFilter::Flag::NoFilter, qsl("exclude_filtered") }, +}; + +bool ReadOption(QJsonObject obj, QString key, std::function callback) { + const auto it = obj.constFind(key); + if (it == obj.constEnd()) { + return false; + } + callback(*it); + return true; +} + +bool ReadStringOption(QJsonObject obj, QString key, std::function callback) { + auto readResult = false; + auto readValueResult = ReadOption(obj, key, [&](QJsonValue v) { + if (v.isString()) { + callback(v.toString()); + readResult = true; + } + }); + return (readValueResult && readResult); +} + +bool ReadIntOption(QJsonObject obj, QString key, std::function callback) { + auto readResult = false; + auto readValueResult = ReadOption(obj, key, [&](QJsonValue v) { + if (v.isDouble()) { + callback(v.toInt()); + readResult = true; + } + }); + return (readValueResult && readResult); +} + +bool ReadArrayOption(QJsonObject obj, QString key, std::function callback) { + auto readResult = false; + auto readValueResult = ReadOption(obj, key, [&](QJsonValue v) { + if (v.isArray()) { + callback(v.toArray()); + readResult = true; + } + }); + return (readValueResult && readResult); +} + } // namespace +QJsonObject LocalFolder::toJson() { + auto folderObject = QJsonObject(); + + folderObject.insert(qsl("id"), id); + folderObject.insert(qsl("order"), cloudOrder); + folderObject.insert(qsl("name"), name); + folderObject.insert(qsl("emoticon"), emoticon); + + for (const auto &[flag, option] : LocalFolderSettingsFlags) { + if (flags & flag) { + folderObject.insert(option, true); + } + } + + const auto peerToStr = [](uint64 peer) { + auto peerId = PeerId(peer); + return (peerIsChannel(peerId)) + ? qsl("channel") + : (peerIsChat(peerId)) + ? qsl("chat") + : qsl("user"); + }; + + const auto peerToLocalBare = [](uint64 peer) { + auto peerId = PeerId(peer); + return QString::number((peerIsChannel(peerId)) + ? peerToChannel(peerId).bare + : (peerIsChat(peerId)) + ? peerToChat(peerId).bare + : peerToUser(peerId).bare); + }; + + const auto fillChatsArray = [peerToStr, peerToLocalBare] (const std::vector &chats) -> QJsonArray { + auto result = QJsonArray(); + for (auto peer : chats) { + auto peerObj = QJsonObject(); + peerObj.insert(qsl("type"), peerToStr(peer)); + peerObj.insert(qsl("id"), peerToLocalBare(peer)); + result << peerObj; + } + return result; + }; + + folderObject.insert(qsl("never"), fillChatsArray(never)); + folderObject.insert(qsl("pinned"), fillChatsArray(pinned)); + folderObject.insert(qsl("always"), fillChatsArray(always)); + + return folderObject; +} + +LocalFolder MakeLocalFolder(const QJsonObject &obj) { + auto result = LocalFolder(); + + ReadIntOption(obj, "id", [&](auto v) { + result.id = v; + }); + + ReadIntOption(obj, "order", [&](auto v) { + result.cloudOrder = v; + }); + + ReadStringOption(obj, "name", [&](auto v) { + result.name = v; + }); + + ReadStringOption(obj, "emoticon", [&](auto v) { + result.emoticon = v; + }); + + for (const auto &[flag, option] : LocalFolderSettingsFlags) { + const auto it = obj.constFind(option); + if (it != obj.constEnd()) { + const auto v = *it; + if (v.isBool() && v.toBool()) { + result.flags |= flag; + } + } + } + + const auto readChatsArray = [obj] (const QString &key, std::vector &chats) { + ReadArrayOption(obj, key, [&](auto a) { + for (auto i = a.constBegin(), e = a.constEnd(); i != e; ++i) { + if (!(*i).isObject()) { + continue; + } + + auto peer = (*i).toObject(); + BareId peerId = 0; + + auto isPeerIdRead = ReadIntOption(peer, "id", [&](auto v) { + peerId = v; + }); + + if (!isPeerIdRead) { + isPeerIdRead = ReadStringOption(peer, "id", [&](auto v) { + peerId = static_cast(v.toLongLong()); + }); + } + + if (peerId == 0 || !isPeerIdRead) { + continue; + } + + auto isPeerTypeRead = ReadStringOption(peer, "type", [&](auto v) { + peerId = (QString::compare(v.toLower(), "channel") == 0) + ? peerFromChannel(ChannelId(peerId)).value + : (QString::compare(v.toLower(), "chat") == 0) + ? peerFromChat(ChatId(peerId)).value + : peerFromUser(UserId(peerId)).value; + }); + + if (!isPeerTypeRead) { + peerId = peerFromUser(UserId(peerId)).value; + } + + chats.push_back(peerId); + } + }); + }; + + readChatsArray(qsl("never"), result.never); + readChatsArray(qsl("pinned"), result.pinned); + readChatsArray(qsl("always"), result.always); + + return result; +} + +ChatFilter::ChatFilter(FilterId id, bool isLocal) +: _id(id) +, _isLocal(isLocal) { +} + ChatFilter::ChatFilter( FilterId id, const QString &title, @@ -46,19 +242,78 @@ ChatFilter::ChatFilter( Flags flags, base::flat_set> always, std::vector> pinned, - base::flat_set> never) + base::flat_set> never, + bool isDefault, + bool isLocal, + int cloudLocalOrder) : _id(id) , _title(title) , _iconEmoji(iconEmoji) , _always(std::move(always)) , _pinned(std::move(pinned)) , _never(std::move(never)) -, _flags(flags) { +, _flags(flags) +, _isDefault(isDefault) +, _isLocal(isLocal) +, _cloudLocalOrder(cloudLocalOrder) { +} + +ChatFilter ChatFilter::local( + const LocalFolder &data, + not_null owner) { + auto &&to_histories = ranges::views::transform([&]( + const uint64 &filterPeer) { + PeerData *peer = nullptr; + auto peerId = PeerId(filterPeer); + + if (peerIsUser(peerId)) { + const auto user = owner->user(peerToUser(peerId).bare); + peer = (PeerData *)user; + } else if (peerIsChat(peerId)) { + const auto chat = owner->chat(peerToChat(peerId).bare); + peer = (PeerData *)chat; + } else if (peerIsChannel(peerId)) { + const auto channel = owner->channel(peerToChannel(peerId).bare); + peer = (PeerData *)channel; + } + return peer ? owner->history(peer).get() : nullptr; + }) | ranges::views::filter([](History *history) { + return history != nullptr; + }) | ranges::views::transform([](History *history) { + return not_null(history); + }); + auto &&always = ranges::views::concat( + data.always + ) | to_histories; + auto pinned = ranges::views::all( + data.pinned + ) | to_histories | ranges::to_vector; + auto &&never = ranges::views::all( + data.never + ) | to_histories; + auto &&all = ranges::views::concat(always, pinned); + auto list = base::flat_set>{ + all.begin(), + all.end() + }; + const auto defaultFilterId = owner->session().account().defaultFilterId(); + return ChatFilter( + data.id, + data.name, + data.emoticon, + data.flags, + std::move(list), + std::move(pinned), + { never.begin(), never.end() }, + (data.id == defaultFilterId), + true, + data.cloudOrder); } ChatFilter ChatFilter::FromTL( const MTPDialogFilter &data, - not_null owner) { + not_null owner, + bool isLocal) { return data.match([&](const MTPDdialogFilter &data) { const auto flags = (data.is_contacts() ? Flag::Contacts : Flag(0)) | (data.is_non_contacts() ? Flag::NonContacts : Flag(0)) @@ -91,6 +346,7 @@ ChatFilter ChatFilter::FromTL( all.begin(), all.end() }; + const auto defaultFilterId = owner->session().account().defaultFilterId(); return ChatFilter( data.vid().v, qs(data.vtitle()), @@ -98,7 +354,9 @@ ChatFilter ChatFilter::FromTL( flags, std::move(list), std::move(pinned), - { never.begin(), never.end() }); + { never.begin(), never.end() }, + (data.vid().v == defaultFilterId), + isLocal); }, [](const MTPDdialogFilterDefault &d) { return ChatFilter(); }, [&](const MTPDdialogFilterChatlist &data) { @@ -227,6 +485,39 @@ MTPDialogFilter ChatFilter::tl(FilterId replaceId) const { MTP_vector(never)); } +LocalFolder ChatFilter::toLocal(FilterId replaceId) const { + auto always = _always; + auto pinned = std::vector(); + pinned.reserve(_pinned.size()); + for (const auto &history : _pinned) { + const auto &peer = history->peer; + pinned.push_back(peer->id.value); + always.remove(history); + } + auto include = std::vector(); + include.reserve(always.size()); + for (const auto &history : always) { + const auto &peer = history->peer; + include.push_back(peer->id.value); + } + auto never = std::vector(); + never.reserve(_never.size()); + for (const auto &history : _never) { + const auto &peer = history->peer; + never.push_back(peer->id.value); + } + return { + .id = replaceId ? replaceId : _id, + .cloudOrder = _cloudLocalOrder, + .name = _title, + .emoticon = _iconEmoji, + .always = include, + .never = never, + .pinned = pinned, + .flags = _flags + }; +} + FilterId ChatFilter::id() const { return _id; } @@ -235,6 +526,10 @@ QString ChatFilter::title() const { return _title; } +bool ChatFilter::isDefault() const { + return _isDefault; +} + QString ChatFilter::iconEmoji() const { return _iconEmoji; } @@ -264,6 +559,9 @@ const base::flat_set> &ChatFilter::never() const { } bool ChatFilter::contains(not_null history) const { + if (_never.contains(history)) { + return false; + } const auto flag = [&] { const auto peer = history->peer; if (const auto user = peer->asUser()) { @@ -284,14 +582,77 @@ bool ChatFilter::contains(not_null history) const { Unexpected("Peer type in ChatFilter::contains."); } }(); - if (_never.contains(history)) { + const auto filterAdmin = [&] { + if (!(_flags & Flag::Owned) + && !(_flags & Flag::NotOwned) + && !(_flags & Flag::Admin) + && !(_flags & Flag::NotAdmin)) { + return true; + } + + const auto peer = history->peer; + if (const auto chat = peer->asChat()) { + // if i created the chat: + // // if the filter excludes owned chats, don't add in list + // // if the filter excludes non-admin chats, add only if filter includes owned chats + // else if i am admin in chat: + // // if the filter excludes admin chats, don't add in list + // // if the filter excludes non-owned chats, add only if filter includes admin chats + // else: + // // add in list only if filter doesn't exclude non-owned or non-admin chats + if (chat->amCreator()) { + return !(_flags & Flag::NotOwned) && ((_flags & Flag::Admin) + ? (_flags & Flag::Owned) + : true); + } else if (chat->hasAdminRights()) { + return !(_flags & Flag::NotAdmin) && ((_flags & Flag::Owned) + ? (_flags & Flag::Admin) + : true); + } else { + return !(_flags & Flag::Owned) && !(_flags & Flag::Admin); + } + } else if (const auto channel = peer->asChannel()) { + if (channel->amCreator()) { + return !(_flags & Flag::NotOwned) && ((_flags & Flag::Admin) + ? (_flags & Flag::Owned) + : true); + } else if (channel->hasAdminRights()) { + return !(_flags & Flag::NotAdmin) && ((_flags & Flag::Owned) + ? (_flags & Flag::Admin) + : true); + } else { + return !(_flags & Flag::Owned) && !(_flags & Flag::Admin); + } + } + return false; - } + }; + const auto filterUnfiltered = [&] { + if (!(_flags & Flag::NoFilter)) { + return true; + } + + const auto &list = history->owner().chatsFilters().list(); + for (auto filter : list) { + if (filter.id() == _id) { + continue; + } + + if (filter.contains(history)) { + return false; + } + } + + return true; + }; const auto state = (_flags & (Flag::NoMuted | Flag::NoRead)) ? history->chatListBadgesState() : Dialogs::BadgesState(); return false || ((_flags & flag) + && filterAdmin() + && (!(_flags & Flag::Recent) + || history->owner().session().account().isRecent(history->peer->id)) && (!(_flags & Flag::NoMuted) || !history->muted() || (state.mention @@ -302,10 +663,15 @@ bool ChatFilter::contains(not_null history) const { || state.mention || history->fakeUnreadWhileOpened()) && (!(_flags & Flag::NoArchived) - || (history->folderKnown() && !history->folder()))) + || (history->folderKnown() && !history->folder())) + && filterUnfiltered()) || _always.contains(history); } +bool ChatFilter::isLocal() const { + return _isLocal; +} + ChatFilters::ChatFilters(not_null owner) : _owner(owner) , _moreChatsTimer([=] { checkLoadMoreChatsLists(); }) { @@ -375,10 +741,16 @@ void ChatFilters::load(bool force) { } void ChatFilters::received(const QVector &list) { + const auto account = &_owner->session().account(); + const auto accountId = account->session().userId().bare; + const auto isTestAccount = account->mtp().isTestMode(); + auto localFilters = ::Kotato::JsonSettings::GetJsonArray("folders/local", accountId, isTestAccount); + const auto limit = Data::PremiumLimits(&_owner->session()).dialogFiltersCurrent(); auto position = 0; + auto originalPosition = 0; auto changed = false; - for (const auto &filter : list) { - auto parsed = ChatFilter::FromTL(filter, _owner); + + auto addToList = [&] (ChatFilter parsed) { const auto b = begin(_list) + position, e = end(_list); const auto i = ranges::find(b, e, parsed.id(), &ChatFilter::id); if (i == e) { @@ -394,7 +766,62 @@ void ChatFilters::received(const QVector &list) { changed = true; } ++position; + }; + + // First we're ensuring that IDs are correct + auto leastLocalId = limit; + for (auto localFilter : localFilters) { + auto local = localFilter.toObject(); + if (leastLocalId > local.value("id").toInt()) { + leastLocalId = local.value("id").toInt(); + } } + if (leastLocalId < limit) { + const auto diff = limit - leastLocalId; + auto localFolders = QJsonArray(); + for (auto localFilter : localFilters) { + auto local = localFilter.toObject(); + local.insert("id", local.value("id").toInt() + diff); + localFolders << local; + } + ::Kotato::JsonSettings::Set("folders/local", localFolders, accountId, isTestAccount); + ::Kotato::JsonSettings::Write(); + } + + // Now we're adding cloud filters and corresponding local filters. + for (const auto &filter : list) { + addToList(ChatFilter::FromTL(filter, _owner)); + for (const auto &localFilter : localFilters) { + auto local = MakeLocalFolder(localFilter.toObject()); + if (local.cloudOrder != originalPosition) { + continue; + } + addToList(ChatFilter::local(local, _owner)); + } + ++originalPosition; + } + + // Then we adding local filters, retaining cloud order + while (originalPosition < limit) { + for (const auto &localFilter : localFilters) { + auto local = MakeLocalFolder(localFilter.toObject()); + if (local.cloudOrder != originalPosition) { + continue; + } + addToList(ChatFilter::local(local, _owner)); + } + ++originalPosition; + } + + // And finally we adding other filters + for (const auto &localFilter : localFilters) { + auto local = MakeLocalFolder(localFilter.toObject()); + if (local.cloudOrder < limit) { + continue; + } + addToList(ChatFilter::local(local, _owner)); + } + while (position < _list.size()) { applyRemove(position); changed = true; @@ -555,7 +982,7 @@ void ChatFilters::applyInsert(ChatFilter filter, int position) { _list.insert( begin(_list) + position, - ChatFilter(filter.id(), {}, {}, {}, {}, {}, {})); + ChatFilter(filter.id(), {}, {}, {}, {}, {}, {}, false, filter.isLocal())); applyChange(*(begin(_list) + position), std::move(filter)); } @@ -701,12 +1128,13 @@ const ChatFilter &ChatFilters::applyUpdatedPinned( if (const auto history = row.history()) { if (always.contains(history)) { pinned.push_back(history); - } else if (always.size() < limit) { + } else if (always.size() < limit || i->isLocal()) { always.insert(history); pinned.push_back(history); } } } + const auto defaultFilterId = _owner->session().account().defaultFilterId(); set(ChatFilter( id, i->title(), @@ -714,7 +1142,9 @@ const ChatFilter &ChatFilters::applyUpdatedPinned( i->flags(), std::move(always), std::move(pinned), - i->never())); + i->never(), + (id == defaultFilterId), + i->isLocal())); return *i; } @@ -726,18 +1156,34 @@ void ChatFilters::saveOrder( } const auto api = &_owner->session().api(); api->request(_saveOrderRequestId).cancel(); + const auto limit = Data::PremiumLimits(&_owner->session()).dialogFiltersCurrent(); auto ids = QVector(); ids.reserve(order.size()); + auto cloudIds = QVector(); + cloudIds.reserve(limit); + for (const auto id : order) { ids.push_back(MTP_int(id)); + + auto i = ranges::find(_list, id, &ChatFilter::id); + Assert(i != end(_list)); + + if ((*i).isLocal()) { + i->setLocalCloudOrder(cloudIds.size()); + } else { + cloudIds.push_back(MTP_int(id)); + } } const auto wrapped = MTP_vector(ids); - apply(MTP_updateDialogFilterOrder(wrapped)); - _saveOrderRequestId = api->request(MTPmessages_UpdateDialogFiltersOrder( - wrapped - )).afterRequest(_saveOrderAfterId).send(); + + if (!cloudIds.isEmpty()) { + const auto cloudWrapped = MTP_vector(cloudIds); + _saveOrderRequestId = api->request(MTPmessages_UpdateDialogFiltersOrder( + cloudWrapped + )).afterRequest(_saveOrderAfterId).send(); + } } bool ChatFilters::archiveNeeded() const { @@ -1004,4 +1450,20 @@ void ChatFilters::checkLoadMoreChatsLists() { } } +void ChatFilters::saveLocal() { + auto localFolders = QJsonArray(); + const auto account = &_owner->session().account(); + const auto accountId = account->session().userId().bare; + const auto isTestAccount = account->mtp().isTestMode(); + + for (const auto &folder : _list) { + if (folder.isLocal()) { + localFolders << folder.toLocal().toJson(); + } + } + + ::Kotato::JsonSettings::Set("folders/local", localFolders, accountId, isTestAccount); + ::Kotato::JsonSettings::Write(); +} + } // namespace Data diff --git a/Telegram/SourceFiles/data/data_chat_filters.h b/Telegram/SourceFiles/data/data_chat_filters.h index 7b5a96476..2c2570131 100644 --- a/Telegram/SourceFiles/data/data_chat_filters.h +++ b/Telegram/SourceFiles/data/data_chat_filters.h @@ -24,10 +24,11 @@ struct MoreChatsBarContent; namespace Data { class Session; +struct LocalFolder; class ChatFilter final { public: - enum class Flag : ushort { + enum class Flag : uint32 { Contacts = (1 << 0), NonContacts = (1 << 1), Groups = (1 << 2), @@ -43,11 +44,20 @@ public: NewChats = (1 << 10), // Telegram Business exceptions. ExistingChats = (1 << 11), + + // Local flags + Owned = (1 << 12), + Admin = (1 << 13), + NotOwned = (1 << 14), + NotAdmin = (1 << 15), + Recent = (1 << 16), + NoFilter = (1 << 17), }; friend constexpr inline bool is_flag_type(Flag) { return true; }; using Flags = base::flags; ChatFilter() = default; + ChatFilter(FilterId id, bool isLocal = false); ChatFilter( FilterId id, const QString &title, @@ -55,7 +65,14 @@ public: Flags flags, base::flat_set> always, std::vector> pinned, - base::flat_set> never); + base::flat_set> never, + bool isDefault = false, + bool isLocal = false, + int localCloudOrder = 0); + + [[nodiscard]] static ChatFilter local( + const LocalFolder &data, + not_null owner); [[nodiscard]] ChatFilter withId(FilterId id) const; [[nodiscard]] ChatFilter withTitle(const QString &title) const; @@ -65,11 +82,14 @@ public: [[nodiscard]] static ChatFilter FromTL( const MTPDialogFilter &data, - not_null owner); + not_null owner, + bool isLocal = false); [[nodiscard]] MTPDialogFilter tl(FilterId replaceId = 0) const; + [[nodiscard]] LocalFolder toLocal(FilterId replaceId = 0) const; [[nodiscard]] FilterId id() const; [[nodiscard]] QString title() const; + [[nodiscard]] bool isDefault() const; [[nodiscard]] QString iconEmoji() const; [[nodiscard]] Flags flags() const; [[nodiscard]] bool chatlist() const; @@ -80,6 +100,12 @@ public: [[nodiscard]] bool contains(not_null history) const; + [[nodiscard]] bool isLocal() const; + + void setLocalCloudOrder(int order) { + _cloudLocalOrder = order; + } + private: FilterId _id = 0; QString _title; @@ -88,6 +114,9 @@ private: std::vector> _pinned; base::flat_set> _never; Flags _flags; + bool _isDefault = false; + bool _isLocal = false; + int _cloudLocalOrder = 0; }; @@ -180,6 +209,7 @@ public: [[nodiscard]] const std::vector> &moreChats( FilterId id) const; void moreChatsHide(FilterId id, bool localOnly = false); + void saveLocal(); private: struct MoreChatsData { @@ -229,4 +259,19 @@ private: }; +struct LocalFolder { + QJsonObject toJson(); + + int id = 0; + int cloudOrder = 0; + QString name; + QString emoticon; + std::vector always; + std::vector never; + std::vector pinned; + ChatFilter::Flags flags = Data::ChatFilter::Flags(0); +}; + +LocalFolder MakeLocalFolder(const QJsonObject &obj); + } // namespace Data diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index 892830ede..e9bc20f0b 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -2173,7 +2173,9 @@ bool Session::pinnedCanPin( const auto i = ranges::find(list, filterId, &Data::ChatFilter::id); return (i == end(list)) || (i->always().contains(history)) - || (i->always().size() < pinnedChatsLimit(filterId)); + || (i->always().size() < (i->isLocal() + ? std::numeric_limits::max() + : pinnedChatsLimit(filterId))); } int Session::pinnedChatsLimit(Data::Folder *folder) const { diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp index 5689b2066..cf2a9c3d8 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp @@ -1806,6 +1806,7 @@ void Widget::slideFinished() { void Widget::escape() { if (!cancelSearch()) { + const auto defaultFilterId = session().account().defaultFilterId(); if (controller()->shownForum().current()) { controller()->closeForum(); } else if (controller()->openedFolder().current()) { @@ -1815,7 +1816,11 @@ void Widget::escape() { } else { const auto filters = &session().data().chatsFilters(); const auto &list = filters->list(); - const auto first = list.empty() ? FilterId() : list.front().id(); + const auto first = list.empty() + ? FilterId() + : defaultFilterId != 0 + ? defaultFilterId + : list.front().id(); if (controller()->activeChatsFilterCurrent() != first) { controller()->setActiveChatsFilter(first); } diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index 6042d3132..3d45ffa3d 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -148,6 +148,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/item_text_options.h" #include "main/main_session.h" #include "main/main_session_settings.h" +#include "main/main_account.h" #include "main/session/send_as_peers.h" #include "window/notifications_manager.h" #include "window/window_adaptive.h" @@ -2547,6 +2548,8 @@ void HistoryWidget::showHistory( session().sponsoredMessages().request(_history, checkState); checkState(); } + _history->owner().session().account().addToRecent(_peer->id); + _history->owner().chatsFilters().refreshHistory(_history); } else { _chooseForReport = nullptr; refreshTopBarActiveChat(); diff --git a/Telegram/SourceFiles/kotato/kotato_settings.cpp b/Telegram/SourceFiles/kotato/kotato_settings.cpp index 5658540bf..2d5619a46 100644 --- a/Telegram/SourceFiles/kotato/kotato_settings.cpp +++ b/Telegram/SourceFiles/kotato/kotato_settings.cpp @@ -306,6 +306,11 @@ const std::map> DefinitionMap { .type = SettingType::IntSetting, .defaultValue = 0, .limitHandler = IntLimit(0, 5), }}, + { "folders/default", { + .scope = SettingScope::Account, + .type = SettingType::IntSetting, + .defaultValue = 0, + .limitHandler = IntLimitMin(0), }}, { "folders/count_unmuted_only", { .type = SettingType::BoolSetting, .defaultValue = false, }}, @@ -318,6 +323,9 @@ const std::map> DefinitionMap { { "folders/hide_all_chats", { .type = SettingType::BoolSetting, .defaultValue = false, }}, + { "folders/local", { + .scope = SettingScope::Account, + .type = SettingType::QJsonArraySetting, }}, }; using OldOptionKey = QString; diff --git a/Telegram/SourceFiles/main/main_account.cpp b/Telegram/SourceFiles/main/main_account.cpp index 9e366ca54..9a5d284f8 100644 --- a/Telegram/SourceFiles/main/main_account.cpp +++ b/Telegram/SourceFiles/main/main_account.cpp @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "main/main_account.h" +#include "kotato/kotato_settings.h" #include "base/platform/base_platform_info.h" #include "core/application.h" #include "storage/storage_account.h" @@ -193,6 +194,11 @@ void Account::createSession( _sessionValue = _session.get(); Ensures(_session != nullptr); + + _defaultFilterId = ::Kotato::JsonSettings::GetInt( + "folders/default", + session().userId().bare, + _mtp->isTestMode()); } void Account::destroySession(DestroyReason reason) { @@ -602,6 +608,37 @@ void Account::destroyStaleAuthorizationKeys() { } } +void Account::setDefaultFilterId(uint64 id) { + Expects(_mtp != nullptr); + Expects(_session != nullptr); + + _defaultFilterId = id; + + ::Kotato::JsonSettings::Set( + "folders/default", + _defaultFilterId, + session().userId().bare, + _mtp->isTestMode()); +} + +bool Account::isCurrent(uint64 id, bool testMode) { + Expects(_mtp != nullptr); + Expects(_session != nullptr); + + return id == session().userId().bare + && _mtp->isTestMode() == testMode; +} + +void Account::addToRecent(PeerId id) { + if (!_recent.contains(id.value)) { + _recent << id.value; + } +} + +bool Account::isRecent(PeerId id) { + return _recent.contains(id.value); +} + void Account::setHandleLoginCode(Fn callback) { _handleLoginCode = std::move(callback); } diff --git a/Telegram/SourceFiles/main/main_account.h b/Telegram/SourceFiles/main/main_account.h index ba0915945..30d6b9350 100644 --- a/Telegram/SourceFiles/main/main_account.h +++ b/Telegram/SourceFiles/main/main_account.h @@ -117,6 +117,16 @@ public: return _lifetime; } + [[nodiscard]] int defaultFilterId() { + return _defaultFilterId; + } + void setDefaultFilterId(uint64 id); + + [[nodiscard]] bool isCurrent(uint64 id, bool testMode); + + void addToRecent(PeerId id); + [[nodiscard]] bool isRecent(PeerId id); + private: static constexpr auto kDefaultSaveDelay = crl::time(1000); enum class DestroyReason { @@ -164,6 +174,9 @@ private: MTP::Instance::Fields _mtpFields; MTP::AuthKeysList _mtpKeysToDestroy; bool _loggingOut = false; + int _defaultFilterId = 0; + + QSet _recent; rpl::lifetime _lifetime; diff --git a/Telegram/SourceFiles/settings/settings.style b/Telegram/SourceFiles/settings/settings.style index a5023ed90..411828ce3 100644 --- a/Telegram/SourceFiles/settings/settings.style +++ b/Telegram/SourceFiles/settings/settings.style @@ -80,6 +80,7 @@ settingsIconStickers: icon {{ "settings/stickers", settingsIconFg }}; settingsIconEmoji: icon {{ "settings/emoji", settingsIconFg }}; settingsIconKotato: icon {{ "settings/kotato", settingsIconFg }}; settingsIconKotatoOld: icon {{ "settings/kotato_old", settingsIconFg }}; +settingsIconCloud: icon {{ "settings/cloud", settingsIconFg }}; settingsPremiumIconWallpapers: icon {{ "settings/photo", settingsIconFg }}; settingsPremiumIconStories: icon {{ "settings/stories", settingsIconFg }}; diff --git a/Telegram/SourceFiles/settings/settings_folders.cpp b/Telegram/SourceFiles/settings/settings_folders.cpp index 34a8b9ec2..24901ce4a 100644 --- a/Telegram/SourceFiles/settings/settings_folders.cpp +++ b/Telegram/SourceFiles/settings/settings_folders.cpp @@ -7,6 +7,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "settings/settings_folders.h" +#include "kotato/kotato_lang.h" +#include "kotato/kotato_settings.h" #include "apiwrap.h" #include "api/api_chat_filters.h" // ProcessFilterRemove. #include "boxes/premium_limits_box.h" @@ -24,6 +26,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "main/main_session.h" #include "ui/boxes/confirm_box.h" #include "ui/filter_icons.h" +#include "main/main_account.h" +#include "ui/toast/toast.h" #include "ui/layers/generic_box.h" #include "ui/painter.h" #include "ui/vertical_list.h" @@ -37,12 +41,16 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "window/window_session_controller.h" #include "styles/style_settings.h" #include "styles/style_layers.h" +#include "styles/style_menu_icons.h" #include "styles/style_boxes.h" #include "styles/style_chat_helpers.h" +#include "styles/style_window.h" namespace Settings { namespace { +auto currentDefaultRemoved = false; + using Flag = Data::ChatFilter::Flag; using Flags = Data::ChatFilter::Flags; @@ -161,7 +169,11 @@ struct FilterRow { ? (result + QString::fromUtf8(" \xE2\x80\xA2 ") + tr::lng_filters_shareable_status(tr::now)) - : result; + : (result + + QString::fromUtf8(" \xE2\x80\xA2 ") + + (filter.isLocal() + ? ktr("ktg_filters_local") + : ktr("ktg_filters_cloud"))); } FilterRowButton::FilterRowButton( @@ -341,6 +353,21 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { const auto limit = [=] { return Data::PremiumLimits(session).dialogFiltersCurrent(); }; + const auto account = &session->account(); + const auto currentDefaultId = account->defaultFilterId(); + auto localNewFilterId = limit(); + const auto generateNewId = [=, &localNewFilterId] { + const auto filters = &controller->session().data().chatsFilters(); + + do { + localNewFilterId++; + } while (ranges::contains(filters->list(), localNewFilterId, &Data::ChatFilter::id)); + + return localNewFilterId; + }; + + currentDefaultRemoved = false; + Ui::AddSkip(container, st::defaultVerticalListSkip); Ui::AddSubsectionTitle(container, tr::lng_filters_subtitle()); @@ -357,10 +384,15 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { Assert(i != end(state->rows)); return &*i; }; + const auto toast = Ui::Toast::Config{ + .text = { ktr("ktg_filters_cloud_limit") }, + .st = &st::windowArchiveToast, + .multiline = true, + }; const auto showLimitReached = [=] { - const auto removed = ranges::count_if( - state->rows, - &FilterRow::removed); + const auto removed = ranges::count_if(state->rows, [](FilterRow row) { + return row.removed || row.filter.isLocal(); + }); const auto count = int(state->rows.size() - removed); if (count < limit()) { return false; @@ -368,6 +400,18 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { controller->show(Box(FiltersLimitBox, session, count)); return true; }; + const auto newCloudButton = AddButtonWithIcon( + container, + rktr("ktg_filters_create_cloud"), + st::settingsButton, + { &st::settingsIconCloud } + ); + const auto newLocalButton = AddButtonWithIcon( + container, + rktr("ktg_filters_create_local"), + st::settingsButton, + { &st::menuIconShowInFolder } + ); const auto markForRemovalSure = [=](not_null button) { const auto row = find(button); auto suggestRemoving = Api::ExtractSuggestRemoving(row->filter); @@ -442,17 +486,28 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { const auto wrap = container->add(object_ptr( container)); const auto addFilter = [=](const Data::ChatFilter &filter) { + if (state->rows.size() == 0) { + AddSkip(wrap); + AddDivider(wrap); + AddSkip(wrap); + } const auto button = wrap->add( object_ptr(wrap, session, filter)); button->removeRequests( ) | rpl::start_with_next([=] { remove(button); + if (find(button)->filter.id() == account->defaultFilterId()) { + currentDefaultRemoved = true; + } }, button->lifetime()); button->restoreRequests( ) | rpl::start_with_next([=] { if (showLimitReached()) { return; } + if (find(button)->filter.id() == account->defaultFilterId()) { + currentDefaultRemoved = false; + } button->setRemoved(false); find(button)->removed = false; }, button->lifetime()); @@ -463,6 +518,11 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { } const auto doneCallback = [=](const Data::ChatFilter &result) { find(button)->filter = result; + const auto isCurrentDefault = result.id() == account->defaultFilterId(); + if ((isCurrentDefault && !result.isDefault()) + || (!isCurrentDefault && result.isDefault())) { + account->setDefaultFilterId(result.isDefault() ? result.id() : 0); + } button->updateData(result); }; const auto saveAnd = [=]( @@ -539,17 +599,15 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { j->button->updateCount(j->filter); }, container->lifetime()); - AddButtonWithIcon( - container, - tr::lng_filters_create(), - st::settingsButtonActive, - { &st::settingsIconAdd, IconType::Round, &st::windowBgActive } - )->setClickedCallback([=] { + newCloudButton->setClickedCallback([=] { if (showLimitReached()) { return; } const auto created = std::make_shared(nullptr); const auto doneCallback = [=](const Data::ChatFilter &result) { + if (result.isDefault()) { + account->setDefaultFilterId(result.id()); + } if (const auto button = *created) { find(button)->filter = result; button->updateData(result); @@ -566,7 +624,33 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { controller->window().show(Box( EditFilterBox, controller, - Data::ChatFilter(), + Data::ChatFilter(generateNewId()), + crl::guard(container, doneCallback), + crl::guard(container, saveAnd))); + }); + newLocalButton->setClickedCallback([=] { + const auto created = std::make_shared(nullptr); + const auto doneCallback = [=](const Data::ChatFilter &result) { + if (result.isDefault()) { + account->setDefaultFilterId(result.id()); + } + if (const auto button = *created) { + find(button)->filter = result; + button->updateData(result); + } else { + *created = addFilter(result); + } + }; + const auto saveAnd = [=]( + const Data::ChatFilter &data, + Fn next) { + doneCallback(data); + state->save(*created, next); + }; + controller->window().show(Box( + EditFilterBox, + controller, + Data::ChatFilter(generateNewId(), true), crl::guard(container, doneCallback), crl::guard(container, saveAnd))); }); @@ -577,7 +661,7 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { object_ptr(container)) )->setDuration(0); const auto aboutRows = nonEmptyAbout->entity(); - Ui::AddDivider(aboutRows); + Ui::AddDividerText(aboutRows, rktr("ktg_filters_description")); Ui::AddSkip(aboutRows); Ui::AddSubsectionTitle(aboutRows, tr::lng_filters_recommended()); @@ -638,11 +722,28 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { auto result = base::flat_map, FilterId>(); for (auto &row : state->rows) { const auto id = row.filter.id(); - if (row.removed) { + if (row.removed || row.filter.isLocal()) { continue; } else if (!id || !ranges::contains(list, id, &Data::ChatFilter::id)) { result.emplace(row.button, chooseNextId()); + if (account->defaultFilterId() == id) { + account->setDefaultFilterId(localId); + } + } + } + + // We're prioritizing cloud IDs before local. + localId = limit(); + for (auto &row : state->rows) { + const auto id = row.filter.id(); + if (row.removed || !row.filter.isLocal()) { + continue; + } else if (!ranges::contains(list, id, &Data::ChatFilter::id)) { + result.emplace(row.button, chooseNextId()); + if (account->defaultFilterId() == id) { + account->setDefaultFilterId(localId); + } } } return result; @@ -652,6 +753,7 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { const FilterRowButton *single, Fn next) { auto ids = prepareGoodIdsForNewFilters(); + bool needSave = false; auto updated = Data::ChatFilter(); @@ -664,6 +766,7 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { auto &realFilters = session->data().chatsFilters(); const auto &list = realFilters.list(); order.reserve(state->rows.size()); + auto localFoldersChanged = false; for (auto &row : state->rows) { if (row.button.get() == single) { updated = row.filter; @@ -691,7 +794,16 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { const auto removeChatlistWithChats = removed && row.filter.chatlist() && !row.removePeers.empty(); - if (removeChatlistWithChats) { + if (row.filter.isLocal()) { + if (removed) { + realFilters.remove(id); + } else { + realFilters.set(row.filter); + order.push_back(id); + } + localFoldersChanged = true; + needSave = true; + } else if (removeChatlistWithChats) { auto inputs = ranges::views::all( row.removePeers ) | ranges::views::transform([](not_null peer) { @@ -714,6 +826,12 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { addRequests.push_back(request); order.push_back(newId); } + realFilters.apply(MTP_updateDialogFilter( + MTP_flags(removed + ? MTPDupdateDialogFilter::Flag(0) + : MTPDupdateDialogFilter::Flag::f_filter), + MTP_int(newId), + tl)); } updates.push_back(MTP_updateDialogFilter( MTP_flags(removed @@ -751,6 +869,11 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { session, next, updated, + account, + controller, + localFoldersChanged, + currentDefaultId, + &needSave, order = std::move(order), updates = std::move(updates), addRequests = std::move(addRequests), @@ -758,7 +881,7 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { removeChatlistRequests = std::move(removeChatlistRequests) ] { const auto api = &session->api(); - const auto filters = &session->data().chatsFilters(); + auto &filters = session->data().chatsFilters(); const auto ids = std::make_shared< base::flat_set >(); @@ -769,7 +892,7 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { } }; for (const auto &update : updates) { - filters->apply(update); + filters.apply(update); } auto previousId = mtpRequestId(0); const auto sendRequests = [&](const auto &requests) { @@ -792,9 +915,22 @@ void FilterRowButton::paintEvent(QPaintEvent *e) { sendRequests(removeChatlistRequests); sendRequests(addRequests); if (!order.empty() && !addRequests.empty()) { - filters->saveOrder(order, previousId); + filters.saveOrder(order, previousId); } checkFinished(); + if (currentDefaultRemoved) { + account->setDefaultFilterId(0); + controller->setActiveChatsFilter(0); + } + if (localFoldersChanged) { + filters.saveLocal(); + } + if (currentDefaultId != account->defaultFilterId()) { + needSave = true; + } + if (needSave) { + Kotato::JsonSettings::Write(); + } }); }; return [copy = state->save] { diff --git a/Telegram/SourceFiles/ui/filter_icon_panel.cpp b/Telegram/SourceFiles/ui/filter_icon_panel.cpp index 34299d15c..382c32483 100644 --- a/Telegram/SourceFiles/ui/filter_icon_panel.cpp +++ b/Telegram/SourceFiles/ui/filter_icon_panel.cpp @@ -66,12 +66,28 @@ constexpr auto kIcons = std::array{ // FilterIcon::Poo, }; +constexpr auto kLocalIcons = std::array{ + FilterIcon::LocalBook, + FilterIcon::LocalBrackets, + FilterIcon::LocalCandle, + FilterIcon::LocalCity, + FilterIcon::LocalDesktop, + FilterIcon::LocalEarth, + FilterIcon::LocalMusic, + FilterIcon::LocalNews, + FilterIcon::LocalPhone, + FilterIcon::LocalSmile, + FilterIcon::LocalSun, + FilterIcon::LocalVideo, +}; + } // namespace -FilterIconPanel::FilterIconPanel(QWidget *parent) +FilterIconPanel::FilterIconPanel(QWidget *parent, bool isLocal) : RpWidget(parent) , _inner(Ui::CreateChild(this)) -, _innerBg(ImageRoundRadius::Small, st::dialogsBg) { +, _innerBg(ImageRoundRadius::Small, st::dialogsBg) +, _isLocal(isLocal) { setup(); } @@ -104,7 +120,9 @@ void FilterIconPanel::setup() { } void FilterIconPanel::setupInner() { - const auto count = kIcons.size(); + const auto count = kIcons.size() + (_isLocal + ? kLocalIcons.size() + : 0); const auto rows = (count / kIconsPerRow) + ((count % kIconsPerRow) ? 1 : 0); const auto single = st::windowFilterIconSingle; @@ -149,6 +167,25 @@ void FilterIconPanel::setupInner() { ? st::dialogsUnreadBgMutedOver : st::dialogsUnreadBgMuted)->c); } + if (_isLocal) { + const auto cloudSize = kIcons.size(); + const auto fullSize = kIcons.size() + kLocalIcons.size(); + for (auto i = cloudSize; i != fullSize; ++i) { + const auto rect = countRect(i); + if (!rect.intersects(clip)) { + continue; + } + if (i == selected) { + Ui::FillRoundRect( + p, + rect, + st::emojiPanHover, + StickerHoverCorners); + } + const auto icon = LookupFilterIcon(kLocalIcons[i-cloudSize]).normal; + icon->paintInCenter(p, rect, st::emojiIconFg->c); + } + } }, _inner->lifetime()); _inner->setMouseTracking(true); @@ -221,7 +258,11 @@ void FilterIconPanel::mouseMove(QPoint position) { const auto column = point.x() / st::windowFilterIconSingle.width(); const auto row = point.y() / st::windowFilterIconSingle.height(); const auto index = row * kIconsPerRow + column; - setSelected(index < kIcons.size() ? index : -1); + const auto size = kIcons.size() + + (_isLocal + ? kLocalIcons.size() + : 0); + setSelected(index < size ? index : -1); } } @@ -239,8 +280,12 @@ void FilterIconPanel::mouseRelease(Qt::MouseButton button) { const auto pressed = _pressed; setPressed(-1); if (pressed == _selected && pressed >= 0) { - Assert(pressed < kIcons.size()); - _chosen.fire_copy(kIcons[pressed]); + Assert(pressed < kIcons.size() + (_isLocal + ? kLocalIcons.size() + : 0)); + _chosen.fire_copy(pressed < kIcons.size() + ? kIcons[pressed] + : kLocalIcons[pressed-kIcons.size()]); } } diff --git a/Telegram/SourceFiles/ui/filter_icon_panel.h b/Telegram/SourceFiles/ui/filter_icon_panel.h index 99caea7a6..4e3627fb4 100644 --- a/Telegram/SourceFiles/ui/filter_icon_panel.h +++ b/Telegram/SourceFiles/ui/filter_icon_panel.h @@ -19,7 +19,7 @@ class PanelAnimation; class FilterIconPanel final : public Ui::RpWidget { public: - FilterIconPanel(QWidget *parent); + FilterIconPanel(QWidget *parent, bool isLocal); ~FilterIconPanel(); void hideFast(); @@ -82,6 +82,7 @@ private: QPixmap _cache; Ui::Animations::Simple _a_opacity; base::Timer _hideTimer; + bool _isLocal = false; }; diff --git a/Telegram/SourceFiles/ui/filter_icons.cpp b/Telegram/SourceFiles/ui/filter_icons.cpp index 01a982dc8..dd4165c14 100644 --- a/Telegram/SourceFiles/ui/filter_icons.cpp +++ b/Telegram/SourceFiles/ui/filter_icons.cpp @@ -205,6 +205,66 @@ const auto kIcons = std::vector{ // &st::foldersPooActive, // "\xF0\x9F\x92\xA9"_cs.utf16() //}, + { + &st::foldersLocalBook, + &st::foldersLocalBookActive, + "\xF0\x9F\x94\x96"_cs.utf16() + }, + { + &st::foldersLocalBrackets, + &st::foldersLocalBracketsActive, + "\xE2\x8C\xA8"_cs.utf16() + }, + { + &st::foldersLocalCandle, + &st::foldersLocalCandleActive, + "\xF0\x9F\x95\xAF"_cs.utf16() + }, + { + &st::foldersLocalCity, + &st::foldersLocalCityActive, + "\xF0\x9F\x8F\x99"_cs.utf16() + }, + { + &st::foldersLocalDesktop, + &st::foldersLocalDesktopActive, + "\xF0\x9F\x96\xA5"_cs.utf16() + }, + { + &st::foldersLocalEarth, + &st::foldersLocalEarthActive, + "\xF0\x9F\x8C\x8E"_cs.utf16() + }, + { + &st::foldersLocalMusic, + &st::foldersLocalMusicActive, + "\xF0\x9F\x8E\xA7"_cs.utf16() + }, + { + &st::foldersLocalNews, + &st::foldersLocalNewsActive, + "\xF0\x9F\x93\xB0"_cs.utf16() + }, + { + &st::foldersLocalPhone, + &st::foldersLocalPhoneActive, + "\xF0\x9F\x93\xB1"_cs.utf16() + }, + { + &st::foldersLocalSmile, + &st::foldersLocalSmileActive, + "\xF0\x9F\x99\x82"_cs.utf16() + }, + { + &st::foldersLocalSun, + &st::foldersLocalSunActive, + "\xE2\x98\x80"_cs.utf16() + }, + { + &st::foldersLocalVideo, + &st::foldersLocalVideoActive, + "\xF0\x9F\x93\xB9"_cs.utf16() + }, { &st::filtersEdit, &st::filtersEdit, diff --git a/Telegram/SourceFiles/ui/filter_icons.h b/Telegram/SourceFiles/ui/filter_icons.h index 0af815006..059917ab5 100644 --- a/Telegram/SourceFiles/ui/filter_icons.h +++ b/Telegram/SourceFiles/ui/filter_icons.h @@ -59,6 +59,19 @@ enum class FilterIcon : uchar { Setup, // Poo, + LocalBook, + LocalBrackets, + LocalCandle, + LocalCity, + LocalDesktop, + LocalEarth, + LocalMusic, + LocalNews, + LocalPhone, + LocalSmile, + LocalSun, + LocalVideo, + Edit, }; diff --git a/Telegram/SourceFiles/ui/filter_icons.style b/Telegram/SourceFiles/ui/filter_icons.style index ca45d10fd..8863dc9a2 100644 --- a/Telegram/SourceFiles/ui/filter_icons.style +++ b/Telegram/SourceFiles/ui/filter_icons.style @@ -85,3 +85,28 @@ foldersPoo: icon {{ "folders/folders_poo", sideBarIconFg }}; foldersPooActive: icon {{ "folders/folders_poo", sideBarIconFgActive }}; filtersEdit: icon {{ "folders/folders_edit", sideBarIconFg }}; + +foldersLocalBook: icon {{ "folders/folders_local_book", sideBarIconFg }}; +foldersLocalBookActive: icon {{ "folders/folders_local_book_active", sideBarIconFgActive }}; +foldersLocalBrackets: icon {{ "folders/folders_local_brackets", sideBarIconFg }}; +foldersLocalBracketsActive: icon {{ "folders/folders_local_brackets", sideBarIconFgActive }}; +foldersLocalCandle: icon {{ "folders/folders_local_candle", sideBarIconFg }}; +foldersLocalCandleActive: icon {{ "folders/folders_local_candle_active", sideBarIconFgActive }}; +foldersLocalCity: icon {{ "folders/folders_local_city", sideBarIconFg }}; +foldersLocalCityActive: icon {{ "folders/folders_local_city_active", sideBarIconFgActive }}; +foldersLocalDesktop: icon {{ "folders/folders_local_desktop", sideBarIconFg }}; +foldersLocalDesktopActive: icon {{ "folders/folders_local_desktop_active", sideBarIconFgActive }}; +foldersLocalEarth: icon {{ "folders/folders_local_earth", sideBarIconFg }}; +foldersLocalEarthActive: icon {{ "folders/folders_local_earth", sideBarIconFgActive }}; +foldersLocalMusic: icon {{ "folders/folders_local_music", sideBarIconFg }}; +foldersLocalMusicActive: icon {{ "folders/folders_local_music_active", sideBarIconFgActive }}; +foldersLocalNews: icon {{ "folders/folders_local_news", sideBarIconFg }}; +foldersLocalNewsActive: icon {{ "folders/folders_local_news_active", sideBarIconFgActive }}; +foldersLocalPhone: icon {{ "folders/folders_local_phone", sideBarIconFg }}; +foldersLocalPhoneActive: icon {{ "folders/folders_local_phone_active", sideBarIconFgActive }}; +foldersLocalSmile: icon {{ "folders/folders_local_smile", sideBarIconFg }}; +foldersLocalSmileActive: icon {{ "folders/folders_local_smile_active", sideBarIconFgActive }}; +foldersLocalSun: icon {{ "folders/folders_local_sun", sideBarIconFg }}; +foldersLocalSunActive: icon {{ "folders/folders_local_sun_active", sideBarIconFgActive }}; +foldersLocalVideo: icon {{ "folders/folders_local_video", sideBarIconFg }}; +foldersLocalVideoActive: icon {{ "folders/folders_local_video_active", sideBarIconFgActive }}; diff --git a/Telegram/SourceFiles/window/window.style b/Telegram/SourceFiles/window/window.style index b52b74299..0aaa5dd8b 100644 --- a/Telegram/SourceFiles/window/window.style +++ b/Telegram/SourceFiles/window/window.style @@ -306,6 +306,12 @@ windowFilterTypeNoArchived: icon {{ "folders/folders_type_archived", historyPeer windowFilterTypeNoRead: icon {{ "folders/folders_type_read", historyPeerUserpicFg }}; windowFilterTypeNewChats: icon {{ "folders/folder_new_chats", historyPeerUserpicFg }}; windowFilterTypeExistingChats: icon {{ "folders/folder_existing_chats", historyPeerUserpicFg }}; +windowFilterTypeOwned: icon {{ "folders/folders_type_not_owner", historyPeerUserpicFg }}; +windowFilterTypeAdmin: icon {{ "folders/folders_type_not_admin", historyPeerUserpicFg }}; +windowFilterTypeNotOwned: icon {{ "folders/folders_type_owner", historyPeerUserpicFg }}; +windowFilterTypeNotAdmin: icon {{ "folders/folders_type_admin", historyPeerUserpicFg }}; +windowFilterTypeRecent: icon {{ "folders/folders_type_recent", historyPeerUserpicFg }}; +windowFilterTypeNoFilter: icon {{ "folders/folders_type_filtered", historyPeerUserpicFg }}; windowFilterChatsSectionSubtitleHeight: 28px; windowFilterChatsSectionSubtitle: FlatLabel(defaultFlatLabel) { style: TextStyle(defaultTextStyle) { diff --git a/Telegram/SourceFiles/window/window_controller.cpp b/Telegram/SourceFiles/window/window_controller.cpp index 19c12c30e..d368fb7c4 100644 --- a/Telegram/SourceFiles/window/window_controller.cpp +++ b/Telegram/SourceFiles/window/window_controller.cpp @@ -26,6 +26,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/emoji_config.h" #include "chat_helpers/emoji_sets_manager.h" #include "window/window_session_controller.h" +#include "window/window_filters_menu.h" #include "window/themes/window_theme_editor.h" #include "ui/boxes/confirm_box.h" #include "data/data_peer.h" @@ -221,6 +222,7 @@ void Controller::setupSideBar() { }, _sessionController->lifetime()); if (_sessionController->session().settings().dialogsFiltersEnabled()) { + ResetFiltersFirstLoad(); _sessionController->toggleFiltersMenu(true); } else { sideBarChanged(); diff --git a/Telegram/SourceFiles/window/window_filters_menu.cpp b/Telegram/SourceFiles/window/window_filters_menu.cpp index 68f79fe58..307444587 100644 --- a/Telegram/SourceFiles/window/window_filters_menu.cpp +++ b/Telegram/SourceFiles/window/window_filters_menu.cpp @@ -15,6 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "window/window_main_menu.h" #include "window/window_peer_menu.h" #include "main/main_session.h" +#include "main/main_account.h" #include "data/data_session.h" #include "data/data_chat_filters.h" #include "data/data_folder.h" @@ -75,8 +76,14 @@ namespace { }); } +bool FiltersFirstLoad = true; + } // namespace +void ResetFiltersFirstLoad() { + FiltersFirstLoad = true; +} + FiltersMenu::FiltersMenu( not_null parent, not_null session) @@ -128,6 +135,7 @@ void FiltersMenu::setup() { auto premium = Data::AmPremiumValue(&_session->session()); const auto filters = &_session->session().data().chatsFilters(); + _activeFilterId = _session->activeChatsFilterCurrent(); rpl::combine( rpl::single(rpl::empty) | rpl::then(filters->changed()), std::move(premium) @@ -135,7 +143,6 @@ void FiltersMenu::setup() { refresh(); }, _outer.lifetime()); - _activeFilterId = _session->activeChatsFilterCurrent(); _session->activeChatsFilter( ) | rpl::filter([=](FilterId id) { return (id != _activeFilterId); @@ -246,6 +253,11 @@ void FiltersMenu::refresh() { // After the filters are refreshed, the scroll is reset, // so we have to restore it. _scroll.scrollToY(oldTop); + + if (FiltersFirstLoad) { + _session->setActiveChatsFilter(_session->session().account().defaultFilterId()); + FiltersFirstLoad = false; + } } void FiltersMenu::setupList() { @@ -406,6 +418,7 @@ void FiltersMenu::showMenu(QPoint position, FilterId id) { if ((i == end(_filters)) && id) { return; } + const auto defaultFilterId = _session->session().account().defaultFilterId(); _popupMenu = base::make_unique_q( i->second.get(), st::popupMenuWithIcons); @@ -430,7 +443,17 @@ void FiltersMenu::showMenu(QPoint position, FilterId id) { _session, std::move(filteredChats), addAction); - + if (defaultFilterId != id) { + _popupMenu->addAction( + ktr("ktg_filters_context_make_default"), + crl::guard(&_outer, [=] { setDefaultFilter(id); }), + &st::menuIconFave); + } else { + _popupMenu->addAction( + ktr("ktg_filters_context_reset_default"), + crl::guard(&_outer, [=] { setDefaultFilter(0); }), + &st::menuIconUnfave); + } addAction( tr::lng_filters_context_remove(tr::now), [=] { showRemoveBox(id); }, @@ -447,7 +470,12 @@ void FiltersMenu::showMenu(QPoint position, FilterId id) { [=] { return _session->session().data().chatsList(); }, addAction, std::move(customUnreadState)); - + if (defaultFilterId != id) { + _popupMenu->addAction( + ktr("ktg_filters_context_make_default"), + crl::guard(&_outer, [=] { setDefaultFilter(0); }), + &st::menuIconFave); + } addAction( tr::lng_filters_setup_menu(tr::now), [=] { openFiltersSettings(); }, @@ -484,6 +512,14 @@ void FiltersMenu::showEditMenu(QPoint position) { _popupMenu->popup(position); } +void FiltersMenu::setDefaultFilter(FilterId id) { + const auto defaultFilterId = _session->session().account().defaultFilterId(); + if (defaultFilterId != id) { + _session->session().account().setDefaultFilterId(id); + Kotato::JsonSettings::Write(); + } +} + void FiltersMenu::showEditBox(FilterId id) { EditExistingFilter(_session, id); } @@ -615,6 +651,8 @@ void FiltersMenu::applyReorder( _ignoreRefresh = true; filters->saveOrder(order); _ignoreRefresh = false; + filters->saveLocal(); + Kotato::JsonSettings::Write(); } } // namespace Window diff --git a/Telegram/SourceFiles/window/window_filters_menu.h b/Telegram/SourceFiles/window/window_filters_menu.h index fc00b63df..9737dd48e 100644 --- a/Telegram/SourceFiles/window/window_filters_menu.h +++ b/Telegram/SourceFiles/window/window_filters_menu.h @@ -23,6 +23,8 @@ namespace Window { class SessionController; +void ResetFiltersFirstLoad(); + class FiltersMenu final { public: FiltersMenu( @@ -49,6 +51,7 @@ private: void setupMainMenuIcon(); void showMenu(QPoint position, FilterId id); void showEditMenu(QPoint position); + void setDefaultFilter(FilterId id); void showEditBox(FilterId id); void showRemoveBox(FilterId id); void remove(FilterId id, std::vector> leave = {}); diff --git a/Telegram/SourceFiles/window/window_session_controller.cpp b/Telegram/SourceFiles/window/window_session_controller.cpp index e77bc9f81..0bb809f5c 100644 --- a/Telegram/SourceFiles/window/window_session_controller.cpp +++ b/Telegram/SourceFiles/window/window_session_controller.cpp @@ -72,6 +72,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "main/main_app_config.h" #include "main/main_domain.h" #include "main/main_session.h" +#include "main/main_account.h" #include "main/main_session_settings.h" #include "lang/lang_keys.h" #include "apiwrap.h" @@ -1499,6 +1500,33 @@ void SessionController::toggleFiltersMenu(bool enabled) { _filtersMenuChanged.fire({}); } +void SessionController::reloadFiltersMenu() { + const auto enabled = !session().data().chatsFilters().list().empty(); + if (enabled) { + auto previousFilter = activeChatsFilterCurrent(); + rpl::single(rpl::empty) | rpl::then( + filtersMenuChanged() + ) | rpl::start_with_next([=] { + toggleFiltersMenu(true); + if (previousFilter) { + if (activeChatsFilterCurrent() != previousFilter) { + resetFakeUnreadWhileOpened(); + } + _activeChatsFilter.force_assign(previousFilter); + if (previousFilter) { + closeFolder(true); + } + } + }, lifetime()); + + if (activeChatsFilterCurrent() != 0) { + resetFakeUnreadWhileOpened(); + } + _activeChatsFilter.force_assign(0); + toggleFiltersMenu(false); + } +} + void SessionController::refreshFiltersMenu() { toggleFiltersMenu(session().data().chatsFilters().has()); } @@ -1513,8 +1541,10 @@ void SessionController::checkOpenedFilter() { const auto &list = session().data().chatsFilters().list(); const auto i = ranges::find(list, filterId, &Data::ChatFilter::id); if (i == end(list)) { + const auto defaultFilterId = session().account().defaultFilterId(); + const auto j = ranges::find(list, FilterId(defaultFilterId), &Data::ChatFilter::id); setActiveChatsFilter( - 0, + j == end(list) ? 0 : defaultFilterId, { anim::type::normal, anim::activation::background }); } } @@ -1547,8 +1577,14 @@ void SessionController::openFolder(not_null folder) { _openedFolder = folder.get(); } -void SessionController::closeFolder() { - _openedFolder = nullptr; +void SessionController::closeFolder(bool force) { + const auto defaultFilterId = session().account().defaultFilterId(); + if (defaultFilterId == 0 || force) { + _openedFolder = nullptr; + } else { + setActiveChatsFilter(defaultFilterId); + checkOpenedFilter(); + } } void SessionController::showForum( @@ -2494,7 +2530,7 @@ void SessionController::setActiveChatsFilter( _activeChatsFilter.force_assign(id); if (id || !changed) { closeForum(); - closeFolder(); + closeFolder(true); } if (adaptive().isOneColumn()) { clearSectionStack(params); diff --git a/Telegram/SourceFiles/window/window_session_controller.h b/Telegram/SourceFiles/window/window_session_controller.h index 9888dc1c4..5c3c5a388 100644 --- a/Telegram/SourceFiles/window/window_session_controller.h +++ b/Telegram/SourceFiles/window/window_session_controller.h @@ -365,7 +365,7 @@ public: bool uniqueChatsInSearchResults() const; void openFolder(not_null folder); - void closeFolder(); + void closeFolder(bool force = false); const rpl::variable &openedFolder() const; void showForum( @@ -549,6 +549,7 @@ public: const SectionShow ¶ms = SectionShow::Way::ClearStack); void toggleFiltersMenu(bool enabled); + void reloadFiltersMenu(); [[nodiscard]] rpl::producer<> filtersMenuChanged() const; [[nodiscard]] auto defaultChatTheme() const