From ae819eb1a6954a1617e00123bf8a32e1a053695e Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 10 Dec 2022 07:21:27 +0400 Subject: [PATCH] Open settings when done changing photo. --- .../editor/photo_editor_layer_widget.cpp | 3 +- .../media/history_view_userpic_suggestion.cpp | 4 +++ .../settings/settings_information.cpp | 33 ++++++++++--------- .../settings/settings_information.h | 2 ++ 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/Telegram/SourceFiles/editor/photo_editor_layer_widget.cpp b/Telegram/SourceFiles/editor/photo_editor_layer_widget.cpp index b82b65fd8..b49717cea 100644 --- a/Telegram/SourceFiles/editor/photo_editor_layer_widget.cpp +++ b/Telegram/SourceFiles/editor/photo_editor_layer_widget.cpp @@ -184,11 +184,12 @@ LayerWidget::LayerWidget( closeLayer(); }, lifetime()); + const auto weak = Ui::MakeWeak(_content.get()); _content->doneRequests( ) | rpl::start_with_next([=, done = std::move(doneCallback)]( const PhotoModifications &mods) { done(mods); - closeLayer(); + if (weak) closeLayer(); }, lifetime()); sizeValue( diff --git a/Telegram/SourceFiles/history/view/media/history_view_userpic_suggestion.cpp b/Telegram/SourceFiles/history/view/media/history_view_userpic_suggestion.cpp index 9c0f771b8..e40bb45f4 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_userpic_suggestion.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_userpic_suggestion.cpp @@ -26,6 +26,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "mainwidget.h" #include "apiwrap.h" #include "api/api_peer_photo.h" +#include "settings/settings_information.h" // UpdatePhotoLocally #include "styles/style_chat.h" namespace HistoryView { @@ -76,8 +77,10 @@ ClickHandlerPtr UserpicSuggestion::createViewLink() { const auto original = std::make_shared( media->image(Data::PhotoSize::Large)->original()); const auto callback = [=](QImage &&image) { + using namespace Settings; const auto session = &photo->session(); const auto user = session->user(); + UpdatePhotoLocally(user, image); auto &peerPhotos = session->api().peerPhoto(); if (original->size() == image.size() && original->constBits() == image.constBits()) { @@ -85,6 +88,7 @@ ClickHandlerPtr UserpicSuggestion::createViewLink() { } else { peerPhotos.upload(user, std::move(image)); } + controller->showSettings(Information::Id()); }; Editor::PrepareProfilePhoto( controller->content(), diff --git a/Telegram/SourceFiles/settings/settings_information.cpp b/Telegram/SourceFiles/settings/settings_information.cpp index 87810caa3..d51c9dd2c 100644 --- a/Telegram/SourceFiles/settings/settings_information.cpp +++ b/Telegram/SourceFiles/settings/settings_information.cpp @@ -266,20 +266,6 @@ private: return upload; } -void UploadPhoto(not_null user, QImage image) { - auto bytes = QByteArray(); - auto buffer = QBuffer(&bytes); - image.save(&buffer, "JPG", 87); - user->setUserpic( - base::RandomValue(), - ImageLocation( - { .data = InMemoryLocation{ .bytes = bytes } }, - image.width(), - image.height()), - false); - user->session().api().peerPhoto().upload(user, std::move(image)); -} - void SetupPhoto( not_null container, not_null controller, @@ -297,8 +283,10 @@ void SetupPhoto( upload->chosenImages( ) | rpl::start_with_next([=](Ui::UserpicButton::ChosenImage &&chosen) { - UploadPhoto(self, chosen.image); - photo->changeTo(std::move(chosen.image)); + auto &image = chosen.image; + UpdatePhotoLocally(self, image); + photo->changeTo(base::duplicate(image)); + self->session().api().peerPhoto().upload(self, std::move(image)); }, upload->lifetime()); const auto name = Ui::CreateChild( @@ -976,6 +964,19 @@ AccountsEvents SetupAccounts( }; } +void UpdatePhotoLocally(not_null user, const QImage &image) { + auto bytes = QByteArray(); + auto buffer = QBuffer(&bytes); + image.save(&buffer, "JPG", 87); + user->setUserpic( + base::RandomValue(), + ImageLocation( + { .data = InMemoryLocation{ .bytes = bytes } }, + image.width(), + image.height()), + false); +} + namespace Badge { Dialogs::Ui::UnreadBadgeStyle Style() { diff --git a/Telegram/SourceFiles/settings/settings_information.h b/Telegram/SourceFiles/settings/settings_information.h index 2fea258aa..3b3c78975 100644 --- a/Telegram/SourceFiles/settings/settings_information.h +++ b/Telegram/SourceFiles/settings/settings_information.h @@ -40,6 +40,8 @@ AccountsEvents SetupAccounts( not_null container, not_null controller); +void UpdatePhotoLocally(not_null user, const QImage &image); + namespace Badge { [[nodiscard]] Dialogs::Ui::UnreadBadgeStyle Style();