diff --git a/Telegram/SourceFiles/api/api_peer_photo.cpp b/Telegram/SourceFiles/api/api_peer_photo.cpp index fd97928fe..65d9207a5 100644 --- a/Telegram/SourceFiles/api/api_peer_photo.cpp +++ b/Telegram/SourceFiles/api/api_peer_photo.cpp @@ -412,16 +412,18 @@ void PeerPhoto::ready( )).done(applier).afterRequest(history->sendRequestId).send(); } else if (const auto user = peer->asUser()) { using Flag = MTPphotos_UploadContactProfilePhoto::Flag; + const auto none = MTPphotos_UploadContactProfilePhoto::Flags(0); _api.request(MTPphotos_UploadContactProfilePhoto( - MTP_flags(Flag::f_file + MTP_flags((file ? Flag::f_file : none) + | (videoSize ? Flag::f_video_emoji_markup : none) | ((type == UploadType::Suggestion) ? Flag::f_suggest : Flag::f_save)), user->inputUser, - *file, + file ? (*file) : MTPInputFile(), MTPInputFile(), // video MTPdouble(), // video_start_ts - MTPVideoSize() // video_emoji_markup + videoSize ? (*videoSize) : MTPVideoSize() // video_emoji_markup )).done([=](const MTPphotos_Photo &result) { result.match([&](const MTPDphotos_photo &data) { _session->data().processPhoto(data.vphoto()); diff --git a/Telegram/SourceFiles/ui/controls/userpic_button.cpp b/Telegram/SourceFiles/ui/controls/userpic_button.cpp index d87d8a6e8..34d8518e2 100644 --- a/Telegram/SourceFiles/ui/controls/userpic_button.cpp +++ b/Telegram/SourceFiles/ui/controls/userpic_button.cpp @@ -43,6 +43,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "apiwrap.h" #include "api/api_peer_photo.h" #include "styles/style_boxes.h" +#include "styles/style_chat.h" #include "styles/style_menu_icons.h" namespace Ui { @@ -317,10 +318,28 @@ void UserpicButton::choosePhotoLocally() { callback(type)); })); }; + const auto user = _peer ? _peer->asUser() : nullptr; + const auto addUserpicBuilder = [&](ChosenType type) { + if (!_controller) { + return; + } + const auto done = [=](UserpicBuilder::Result data) { + auto result = ChosenImage{ base::take(data.image), type }; + result.markup.documentId = data.id; + result.markup.colors = base::take(data.colors); + _chosenImages.fire(std::move(result)); + }; + UserpicBuilder::AddEmojiBuilderAction( + _controller, + _menu, + _controller->session().api().peerPhoto().emojiListValue(user + ? Api::PeerPhoto::EmojiListType::Profile + : Api::PeerPhoto::EmojiListType::Group), + done); + }; _menu = base::make_unique_q( this, st::popupMenuWithIcons); - const auto user = _peer ? _peer->asUser() : nullptr; if (user && !user->isSelf()) { _menu->addAction( tr::lng_profile_set_photo_for(tr::now), @@ -332,7 +351,9 @@ void UserpicButton::choosePhotoLocally() { [=] { chooseFile(ChosenType::Suggest); }, &st::menuIconPhotoSuggest); } + addUserpicBuilder(ChosenType::Set); if (hasPersonalPhotoLocally()) { + _menu->addSeparator(&st::expandedMenuSeparator); _menu->addAction(makeResetToOriginalAction()); } } else { @@ -351,25 +372,7 @@ void UserpicButton::choosePhotoLocally() { callback(ChosenType::Set))); }, &st::menuIconPhotoSet); } - if (_controller) { - const auto done = [=](UserpicBuilder::Result data) { - auto result = ChosenImage{ - base::take(data.image), - ChosenType::Set, - }; - result.markup.documentId = data.id; - result.markup.colors = base::take(data.colors); - _chosenImages.fire(std::move(result)); - }; - auto &session = _controller->session(); - UserpicBuilder::AddEmojiBuilderAction( - _controller, - _menu, - session.api().peerPhoto().emojiListValue(user - ? Api::PeerPhoto::EmojiListType::Profile - : Api::PeerPhoto::EmojiListType::Group), - done); - } + addUserpicBuilder(ChosenType::Set); } else { chooseFile(); }