diff --git a/Telegram/SourceFiles/boxes/edit_caption_box.cpp b/Telegram/SourceFiles/boxes/edit_caption_box.cpp index f9cbfdcad..dfed37e4f 100644 --- a/Telegram/SourceFiles/boxes/edit_caption_box.cpp +++ b/Telegram/SourceFiles/boxes/edit_caption_box.cpp @@ -11,6 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "api/api_editing.h" #include "api/api_text_entities.h" #include "main/main_session.h" +#include "main/main_session_settings.h" #include "chat_helpers/emoji_suggestions_widget.h" #include "chat_helpers/message_field.h" #include "chat_helpers/tabbed_panel.h" @@ -392,7 +393,11 @@ EditCaptionBox::EditCaptionBox( st::editMediaHintLabel), st::editMediaLabelMargins); _hintLabel = label.data(); - _hintLabel->toggle(_photo, anim::type::instant); + _hintLabel->toggle( + _controller->session().settings().photoEditorHintShown() + ? _photo + : false, + anim::type::instant); auto r = object_ptr>( this, @@ -649,7 +654,9 @@ void EditCaptionBox::updateEditPreview() { const auto showCheckbox = _photo && (_albumType == Ui::AlbumType::None); _wayWrap->toggle(showCheckbox, anim::type::instant); - _hintLabel->toggle(_photo, anim::type::instant); + if (_controller->session().settings().photoEditorHintShown()) { + _hintLabel->toggle(_photo, anim::type::instant); + } _photoEditorButton->setVisible(_photo); if (!_doc) { @@ -1160,7 +1167,10 @@ void EditCaptionBox::save() { action.options = options; action.replaceMediaOf = item->fullId().msg; - Storage::ApplyModifications(_preparedList); + if (Storage::ApplyModifications(_preparedList)) { + _controller->session().settings().incrementPhotoEditorHintShown(); + _controller->session().saveSettings(); + } _controller->session().api().editMedia( std::move(_preparedList), diff --git a/Telegram/SourceFiles/main/main_session_settings.cpp b/Telegram/SourceFiles/main/main_session_settings.cpp index 44003707b..2db310386 100644 --- a/Telegram/SourceFiles/main/main_session_settings.cpp +++ b/Telegram/SourceFiles/main/main_session_settings.cpp @@ -70,6 +70,7 @@ QByteArray SessionSettings::serialize() const { } stream << qint32(_dialogsFiltersEnabled ? 1 : 0); stream << qint32(_supportAllSilent ? 1 : 0); + stream << qint32(_photoEditorHintShowsCount); } return result; } @@ -129,6 +130,7 @@ void SessionSettings::addFromSerialized(const QByteArray &serialized) { base::flat_map hiddenPinnedMessages; qint32 dialogsFiltersEnabled = _dialogsFiltersEnabled ? 1 : 0; qint32 supportAllSilent = _supportAllSilent ? 1 : 0; + qint32 photoEditorHintShowsCount = _photoEditorHintShowsCount; stream >> versionTag; if (versionTag == kVersionTag) { @@ -327,6 +329,9 @@ void SessionSettings::addFromSerialized(const QByteArray &serialized) { if (!stream.atEnd()) { stream >> supportAllSilent; } + if (!stream.atEnd()) { + stream >> photoEditorHintShowsCount; + } if (stream.status() != QDataStream::Ok) { LOG(("App Error: " "Bad data for SessionSettings::addFromSerialized()")); @@ -369,6 +374,7 @@ void SessionSettings::addFromSerialized(const QByteArray &serialized) { _hiddenPinnedMessages = std::move(hiddenPinnedMessages); _dialogsFiltersEnabled = (dialogsFiltersEnabled == 1); _supportAllSilent = (supportAllSilent == 1); + _photoEditorHintShowsCount = std::move(photoEditorHintShowsCount); if (version < 2) { app.setLastSeenWarningSeen(appLastSeenWarningSeen == 1); @@ -507,4 +513,14 @@ rpl::producer SessionSettings::skipArchiveInSearchChanges() const { return _skipArchiveInSearch.changes(); } +bool SessionSettings::photoEditorHintShown() const { + return _photoEditorHintShowsCount < kPhotoEditorHintMaxShowsCount; +} + +void SessionSettings::incrementPhotoEditorHintShown() { + if (photoEditorHintShown()) { + _photoEditorHintShowsCount++; + } +} + } // namespace Main diff --git a/Telegram/SourceFiles/main/main_session_settings.h b/Telegram/SourceFiles/main/main_session_settings.h index 2cd331e7e..2f0e34b09 100644 --- a/Telegram/SourceFiles/main/main_session_settings.h +++ b/Telegram/SourceFiles/main/main_session_settings.h @@ -120,8 +120,12 @@ public: _dialogsFiltersEnabled = value; } + [[nodiscard]] bool photoEditorHintShown() const; + void incrementPhotoEditorHintShown(); + private: static constexpr auto kDefaultSupportChatsLimitSlice = 7 * 24 * 60 * 60; + static constexpr auto kPhotoEditorHintMaxShowsCount = 10; ChatHelpers::SelectorTab _selectorTab; // per-window base::flat_set _groupStickersSectionHidden; @@ -133,6 +137,7 @@ private: std::vector> _mediaLastPlaybackPosition; base::flat_map _hiddenPinnedMessages; bool _dialogsFiltersEnabled = false; + int _photoEditorHintShowsCount = 0; Support::SwitchSettings _supportSwitch; bool _supportFixChatsOrder = true; diff --git a/Telegram/SourceFiles/storage/storage_media_prepare.cpp b/Telegram/SourceFiles/storage/storage_media_prepare.cpp index e2dad21e8..94dace24c 100644 --- a/Telegram/SourceFiles/storage/storage_media_prepare.cpp +++ b/Telegram/SourceFiles/storage/storage_media_prepare.cpp @@ -309,16 +309,19 @@ void UpdateImageDetails(PreparedFile &file, int previewWidth) { file.preview.setDevicePixelRatio(cRetinaFactor()); } -void ApplyModifications(const PreparedList &list) { +bool ApplyModifications(const PreparedList &list) { + auto applied = false; for (auto &file : list.files) { const auto image = std::get_if(&file.information->media); if (!image || !image->modifications) { continue; } + applied = true; image->data = Editor::ImageModified( std::move(image->data), image->modifications); } + return applied; } } // namespace Storage diff --git a/Telegram/SourceFiles/storage/storage_media_prepare.h b/Telegram/SourceFiles/storage/storage_media_prepare.h index f4e158922..67b150660 100644 --- a/Telegram/SourceFiles/storage/storage_media_prepare.h +++ b/Telegram/SourceFiles/storage/storage_media_prepare.h @@ -44,6 +44,6 @@ Ui::PreparedList PrepareMediaFromImage( void PrepareDetails(Ui::PreparedFile &file, int previewWidth); void UpdateImageDetails(Ui::PreparedFile &file, int previewWidth); -void ApplyModifications(const Ui::PreparedList &list); +bool ApplyModifications(const Ui::PreparedList &list); } // namespace Storage