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 000000000..0b3ebc5dd Binary files /dev/null and b/Telegram/Resources/icons/info/info_media_saved.png differ 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 000000000..aa91e6fb8 Binary files /dev/null and b/Telegram/Resources/icons/info/info_media_saved@2x.png differ 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 000000000..6c9814fe1 Binary files /dev/null and b/Telegram/Resources/icons/info/info_media_saved@3x.png differ 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(