diff --git a/Telegram/SourceFiles/api/api_peer_photo.cpp b/Telegram/SourceFiles/api/api_peer_photo.cpp index 654a641dc..d1ab9e580 100644 --- a/Telegram/SourceFiles/api/api_peer_photo.cpp +++ b/Telegram/SourceFiles/api/api_peer_photo.cpp @@ -425,6 +425,22 @@ void PeerPhoto::requestUserPhotos( _userPhotosRequests.emplace(user, requestId); } +void PeerPhoto::requestProfileEmojiList() { + _api.request(MTPaccount_GetDefaultProfilePhotoEmojis( + )).done([=](const MTPEmojiList &result) { + result.match([](const MTPDemojiListNotModified &data) { + }, [&](const MTPDemojiList &data) { + _profileEmojiList = ranges::views::all( + data.vdocument_id().v + ) | ranges::views::transform(&MTPlong::v) | ranges::to_vector; + }); + }).send(); +} + +std::vector PeerPhoto::profileEmojiList() const { + return _profileEmojiList; +} + // Non-personal photo in case a personal photo is set. void PeerPhoto::registerNonPersonalPhoto( not_null user, diff --git a/Telegram/SourceFiles/api/api_peer_photo.h b/Telegram/SourceFiles/api/api_peer_photo.h index ba6374421..8464f815f 100644 --- a/Telegram/SourceFiles/api/api_peer_photo.h +++ b/Telegram/SourceFiles/api/api_peer_photo.h @@ -44,6 +44,9 @@ public: void requestUserPhotos(not_null user, UserPhotoId afterId); + void requestProfileEmojiList(); + [[nodiscard]] std::vector profileEmojiList() const; + // Non-personal photo in case a personal photo is set. void registerNonPersonalPhoto( not_null user, @@ -83,6 +86,8 @@ private: not_null, not_null> _nonPersonalPhotos; + std::vector _profileEmojiList; + }; } // namespace Api diff --git a/Telegram/SourceFiles/ui/controls/userpic_button.cpp b/Telegram/SourceFiles/ui/controls/userpic_button.cpp index 6238db84e..5e1df4e2b 100644 --- a/Telegram/SourceFiles/ui/controls/userpic_button.cpp +++ b/Telegram/SourceFiles/ui/controls/userpic_button.cpp @@ -212,6 +212,16 @@ void UserpicButton::prepare() { prepareUserpicPixmap(); } setClickHandlerByRole(); + if ((_role == Role::ChoosePhoto) || (_role == Role::ChangePhoto)) { + const auto api = _controller + ? &_controller->session().api() + : _peer + ? &_peer->session().api() + : nullptr; + if (api) { + api->peerPhoto().requestProfileEmojiList(); + } + } } void UserpicButton::showCustomOnChosen() {