From 4e6d8f06d9555821f94baf9c25b931f994f308a0 Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 28 Dec 2023 14:52:13 +0000 Subject: [PATCH] Show saved messages entry point from profiles. --- .../Resources/icons/info/info_media_saved.png | Bin 0 -> 380 bytes .../icons/info/info_media_saved@2x.png | Bin 0 -> 664 bytes .../icons/info/info_media_saved@3x.png | Bin 0 -> 954 bytes Telegram/Resources/langs/lang.strings | 2 ++ Telegram/SourceFiles/info/info.style | 1 + .../info/media/info_media_buttons.h | 29 ++++++++++++++++-- .../profile/info_profile_inner_widget.cpp | 14 +++++++++ .../info/profile/info_profile_values.cpp | 13 ++++++++ .../info/profile/info_profile_values.h | 2 ++ 9 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 Telegram/Resources/icons/info/info_media_saved.png create mode 100644 Telegram/Resources/icons/info/info_media_saved@2x.png create mode 100644 Telegram/Resources/icons/info/info_media_saved@3x.png diff --git a/Telegram/Resources/icons/info/info_media_saved.png b/Telegram/Resources/icons/info/info_media_saved.png new file mode 100644 index 0000000000000000000000000000000000000000..0b3ebc5dde0a72c6aa8943c90652bb7f299341d2 GIT binary patch literal 380 zcmV-?0fYXDP)F6XV9*0bJaSxIT-DXp&d$!fyu4Ty{Qmv>(xpp{ zjg5Ej-X+I^?c2A@%F0fgHtqB0&sY_(va))6d)wLB>FDUZeEAZOQCNV6hQ{B&f2E|P z2&z1D=1fsh5iVIKToOu3N^jo0dG_oXK?^Qjx}>C}M6v}83=IGO|0ifVL>VI^&Y;F; z0ad`L1)~-WI}5C>trHRw#Kgpq1@YuE5-jlb^*wRo#NNGoYin!o-@o6}(<3e}4w1s2 z;R#s4#KaUH9)9uS#pTPFA31VFQBhG@SvfQ`)XvWC-o1Os){qRmyu7}B`*!o@&G+x$ zH#Id03kzc^ICbjO*RNk6KYl!A$`q0C~Bth)4eeO00008a=d literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/info/info_media_saved@2x.png b/Telegram/Resources/icons/info/info_media_saved@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..aa91e6fb81eb6094700848538b7be242ea0c6dcb GIT binary patch literal 664 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$&H|6fVg?3oVGw3ym^DX&fq}`( z)5S3)qw(#H{jV(xW!OJ_x0Jl$@{f@@C`EW_N??~r;BuZ_Jw{PJMjEs24>(AsY`ir^ zrS#I=#l{-54<_t5*#A9!$EUyF9)A8=_pa}JZTt1)U5~z2?VtC)d~dtC6VOs1$Y>1+ z_L-DoBgfzBWH#G(`Q?+k;;w-LEp_|P7tWbwC{koK_wq}T)nz+lvbN4Tm=Ivrc1U=` z?YBIKXZWbKTzFXUz~Wtv-RayUv)Om^wwwG)Fz`^De5!3C(4gMq$vq!mmYjN8lod7e z?6bJ_>awh^f$L{|kXM@6u_a|;K*0T8m6JDf+6?2?Uw^gxugBJ?qY~YVR$PA_e`&(9 z%uIJ3vFz?E3JR%?c^; zT3$?l!W9~>;X?N$6r_5~tYoL9{{CC1HaYOaw;y_I!?=_8MCi=>=Oy4`G;_}R=kwpjhpMSn|THH}!Wk}Y}n7UG_EI)@_hQ${nw5ERh{kPVl zE%DOJFOTKwg_R|EvIG(~-we^3diY_1e1_4?BS{Caiz9$71Uw;2R^{b|<&_=G;?QynyZJ)}?qMdhg%xvZQf90__st9#f l?S1#P>S{SNIF28P*D^SM*)CW8T4N4Kz|+;wWt~$(697LVF=YS% literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/info/info_media_saved@3x.png b/Telegram/Resources/icons/info/info_media_saved@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6c9814fe12eae5a6f2e4a2d85e044813b7873705 GIT binary patch literal 954 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1SE5RJ;(=AoCO|{#S9GG!XV7ZFl&wk0|Rr8 zr;B4q#hkad{WX3U${hdrcd_Od)xcX*0%mo)c%C|Y@L(gidXe%e$5X8CGDr3J{C>|n z(YmSQ{n1m7UVO?Qw>DeeIJN9%`2DxPt!rN2{`K#}y*Ho#p8HZYC++O>zdvm{Pe0Gz z2(%go4y;cwt#a`7^^K38fBNYoi*s42W`2QFJXAjY_@Tk!WFwcpbRrS?3a$0qD_4)JXBYhLs zZ`tzY;X}vY6Z7)&tmgVTs~5>^-@SXauZ^{}aY@X+wzjq{d*{uYXY^(a2ym>}T~k?USe%!dnrbyS%>A>? z`GQpG!&`O4ymNEc{(AK5*Q~dv?sp$eS{UH5on1|Wy~sl56}RW48|!>7sby6sG!-t` z&)&$v;o_jc#3U%t(cr+sqNE_eNTN_gT+500 zYL={w3=a#__wV0-|Neda`0d;gO=QAAkS7S#vLMdw)+)Ol)jz z)mrnZULS4dr!Jd4Tl(v67RM8>dD>3d1$cU%JaXj7+qb%vzb#Mu)T;+XM&A7Lr9?yI z*Z$V~@8xA>=gyqDbNBAkrkCS6LIMK~?d|{n`Lo8l#%k`p+qYl8d2_|?Wr4-9cfbDk+ENslp!{g%4)m#go zxhGElbL5#XU%sdaah5J#q~Yi5EBV)Air!?6uDtEDAO3nHA6~Tk?%%(E{r&yj-Q73o z7{~t)F5A6#_wL=RR(T1uY~OBP+y=^hP|z^*AER~syyS0s73m-$Pgg&ebxsLQ02qP1 AtN;K2 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index d1fcaf6b5..203700224 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -1188,6 +1188,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_profile_common_groups#other" = "{count} groups in common"; "lng_profile_similar_channels#one" = "{count} similar channel"; "lng_profile_similar_channels#other" = "{count} similar channels"; +"lng_profile_saved_messages#one" = "{count} saved message"; +"lng_profile_saved_messages#other" = "{count} saved messages"; "lng_profile_participants_section" = "Members"; "lng_profile_subscribers_section" = "Subscribers"; "lng_profile_add_contact" = "Add Contact"; diff --git a/Telegram/SourceFiles/info/info.style b/Telegram/SourceFiles/info/info.style index 1ed7c486e..549985aa3 100644 --- a/Telegram/SourceFiles/info/info.style +++ b/Telegram/SourceFiles/info/info.style @@ -398,6 +398,7 @@ infoIconMediaGroup: icon {{ "info/info_common_groups", infoIconFg }}; infoIconMediaChannel: icon {{ "menu/channel", infoIconFg, point(4px, 4px) }}; infoIconMediaVoice: icon {{ "info/info_media_voice", infoIconFg }}; infoIconMediaStories: icon {{ "info/info_media_stories", infoIconFg }}; +infoIconMediaSaved: icon {{ "info/info_media_saved", infoIconFg }}; infoIconMediaStoriesArchive: icon {{ "info/info_stories_archive", infoIconFg }}; infoIconMediaStoriesRecent: icon {{ "info/info_stories_recent", infoIconFg }}; diff --git a/Telegram/SourceFiles/info/media/info_media_buttons.h b/Telegram/SourceFiles/info/media/info_media_buttons.h index 527f7a4db..1331ae07d 100644 --- a/Telegram/SourceFiles/info/media/info_media_buttons.h +++ b/Telegram/SourceFiles/info/media/info_media_buttons.h @@ -10,8 +10,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include #include #include "lang/lang_keys.h" +#include "data/data_saved_messages.h" +#include "data/data_session.h" #include "data/data_stories_ids.h" #include "storage/storage_shared_media.h" +#include "history/view/history_view_sublist_section.h" #include "info/info_memento.h" #include "info/info_controller.h" #include "info/profile/info_profile_values.h" @@ -126,7 +129,7 @@ inline auto AddCommonGroupsButton( Section::Type::CommonGroups)); }); return result; -}; +} inline auto AddSimilarChannelsButton( Ui::VerticalLayout *parent, @@ -150,7 +153,7 @@ inline auto AddSimilarChannelsButton( Section::Type::SimilarChannels)); }); return result; -}; +} inline auto AddStoriesButton( Ui::VerticalLayout *parent, @@ -178,6 +181,26 @@ inline auto AddStoriesButton( navigation->showSection(Info::Stories::Make(peer)); }); return result; -}; +} + +inline auto AddSavedSublistButton( + Ui::VerticalLayout *parent, + not_null navigation, + not_null peer, + Ui::MultiSlideTracker &tracker) { + auto result = AddCountedButton( + parent, + Profile::SavedSublistCountValue(peer), + [](int count) { + return tr::lng_profile_saved_messages(tr::now, lt_count, count); + }, + tracker)->entity(); + result->addClickHandler([=] { + navigation->showSection( + std::make_shared( + peer->owner().savedMessages().sublist(peer))); + }); + return result; +} } // namespace Info::Media diff --git a/Telegram/SourceFiles/info/profile/info_profile_inner_widget.cpp b/Telegram/SourceFiles/info/profile/info_profile_inner_widget.cpp index e6056857f..4cca8c165 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_inner_widget.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_inner_widget.cpp @@ -215,8 +215,22 @@ object_ptr InnerWidget::setupSharedMedia( icon, st::infoSharedMediaButtonIconPosition); }; + auto addSavedSublistButton = [&]( + not_null peer, + const style::icon &icon) { + auto result = Media::AddSavedSublistButton( + content, + _controller, + peer, + tracker); + object_ptr( + result, + icon, + st::infoSharedMediaButtonIconPosition); + }; addStoriesButton(_peer, st::infoIconMediaStories); + addSavedSublistButton(_peer, st::infoIconMediaSaved); addMediaButton(MediaType::Photo, st::infoIconMediaPhoto); addMediaButton(MediaType::Video, st::infoIconMediaVideo); addMediaButton(MediaType::File, st::infoIconMediaFile); diff --git a/Telegram/SourceFiles/info/profile/info_profile_values.cpp b/Telegram/SourceFiles/info/profile/info_profile_values.cpp index 3ea355cff..f79749507 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_values.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_values.cpp @@ -20,6 +20,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "data/notify/data_notify_settings.h" #include "data/data_peer_values.h" +#include "data/data_saved_messages.h" +#include "data/data_saved_sublist.h" #include "data/data_shared_media.h" #include "data/data_message_reactions.h" #include "data/data_folder.h" @@ -536,6 +538,17 @@ rpl::producer SimilarChannelsCountValue( }); } +rpl::producer SavedSublistCountValue( + not_null peer) { + const auto saved = &peer->owner().savedMessages(); + const auto sublist = saved->sublist(peer); + if (!sublist->fullCount()) { + saved->loadMore(sublist); + return rpl::single(0) | rpl::then(sublist->fullCountValue()); + } + return sublist->fullCountValue(); +} + rpl::producer CanAddMemberValue(not_null peer) { if (const auto chat = peer->asChat()) { return peer->session().changes().peerFlagsValue( diff --git a/Telegram/SourceFiles/info/profile/info_profile_values.h b/Telegram/SourceFiles/info/profile/info_profile_values.h index f669a4535..a74f22a42 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_values.h +++ b/Telegram/SourceFiles/info/profile/info_profile_values.h @@ -104,6 +104,8 @@ rpl::producer> MigratedOrMeValue( not_null user); [[nodiscard]] rpl::producer SimilarChannelsCountValue( not_null channel); +[[nodiscard]] rpl::producer SavedSublistCountValue( + not_null peer); [[nodiscard]] rpl::producer CanAddMemberValue( not_null peer); [[nodiscard]] rpl::producer FullReactionsCountValue(