diff --git a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp index 03cbc93f8..402caddbd 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp @@ -1157,6 +1157,22 @@ void ComposeControls::setMimeDataHook(MimeDataHook hook) { _field->setMimeDataHook(std::move(hook)); } +bool ComposeControls::confirmMediaEdit(Ui::PreparedList &list) { + if (!isEditingMessage()) { + return false; + } else if (_canReplaceMedia) { + EditCaptionBox::StartMediaReplace( + _window, + _editingId, + std::move(list), + _field->getTextWithTags(), + crl::guard(_wrap.get(), [=] { cancelEditMessage(); })); + } else { + _window->showToast({ tr::lng_edit_caption_attach(tr::now) }); + } + return true; +} + rpl::producer ComposeControls::fileChosen() const { return _fileChosen.events(); } @@ -1431,23 +1447,17 @@ void ComposeControls::init() { _voiceRecordBar->requestToSendWithOptions(options); }, _wrap->lifetime()); - { - const auto lastMsgId = _wrap->lifetime().make_state(); + _header->editMsgId( + ) | rpl::start_with_next([=](const auto &id) { + _editingId = id; + }, _wrap->lifetime()); - _header->editMsgId( - ) | rpl::filter([=](const auto &id) { - return !!id; - }) | rpl::start_with_next([=](const auto &id) { - *lastMsgId = id; - }, _wrap->lifetime()); - - session().data().itemRemoved( - ) | rpl::filter([=](not_null item) { - return item->id && ((*lastMsgId) == item->fullId()); - }) | rpl::start_with_next([=] { - cancelEditMessage(); - }, _wrap->lifetime()); - } + session().data().itemRemoved( + ) | rpl::filter([=](not_null item) { + return (_editingId == item->fullId()); + }) | rpl::start_with_next([=] { + cancelEditMessage(); + }, _wrap->lifetime()); _window->materializeLocalDraftsRequests( ) | rpl::start_with_next([=] { @@ -1921,7 +1931,7 @@ void ComposeControls::applyDraft(FieldHistoryAction fieldHistoryAction) { InvokeQueued(_autocomplete.get(), [=] { updateStickersByEmoji(); }); const auto guard = gsl::finally([&] { updateSendButtonType(); - updateReplaceMediaButton(editingId); + updateReplaceMediaButton(); updateControlsVisibility(); updateControlsGeometry(_wrap->size()); }); @@ -2588,7 +2598,7 @@ void ComposeControls::editMessage(not_null item) { if (_photoEditMedia) { _photoEditMedia->wanted(Data::PhotoSize::Large, item->fullId()); } - if (updateReplaceMediaButton(item->fullId())) { + if (updateReplaceMediaButton()) { updateControlsVisibility(); updateControlsGeometry(_wrap->size()); } @@ -2598,7 +2608,7 @@ void ComposeControls::editMessage(not_null item) { } } -bool ComposeControls::updateReplaceMediaButton(FullMsgId id) { +bool ComposeControls::updateReplaceMediaButton() { if (!_canReplaceMedia) { const auto result = (_replaceMedia != nullptr); _replaceMedia = nullptr; @@ -2612,7 +2622,7 @@ bool ComposeControls::updateReplaceMediaButton(FullMsgId id) { _replaceMedia->setClickedCallback([=] { EditCaptionBox::StartMediaReplace( _window, - id, + _editingId, _field->getTextWithTags(), crl::guard(_wrap.get(), [=] { cancelEditMessage(); })); }); diff --git a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h index 54596dd98..20be24131 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h +++ b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h @@ -55,6 +55,7 @@ class EmojiButton; class SendAsButton; class SilentToggle; class DropdownMenu; +struct PreparedList; } // namespace Ui namespace Main { @@ -143,6 +144,7 @@ public: not_null data, Ui::InputField::MimeAction action)>; void setMimeDataHook(MimeDataHook hook); + bool confirmMediaEdit(Ui::PreparedList &list); bool pushTabbedSelectorToThirdSection( not_null thread, @@ -228,7 +230,7 @@ private: void updateWrappingVisibility(); void updateControlsVisibility(); void updateControlsGeometry(QSize size); - bool updateReplaceMediaButton(FullMsgId id); + bool updateReplaceMediaButton(); void updateOuterGeometry(QRect rect); void paintBackground(QRect clip); @@ -236,8 +238,6 @@ private: [[nodiscard]] SendMenu::Type sendMenuType() const; [[nodiscard]] SendMenu::Type sendButtonMenuType() const; - void sendSilent(); - void sendScheduled(); [[nodiscard]] auto sendContentRequests( SendRequestType requestType = SendRequestType::Text) const; @@ -358,6 +358,7 @@ private: bool _isInlineBot = false; bool _botCommandShown = false; + FullMsgId _editingId; std::shared_ptr _photoEditMedia; bool _canReplaceMedia = false; diff --git a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp index cf9db15b4..ea7d8b491 100644 --- a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp @@ -937,7 +937,9 @@ bool RepliesWidget::confirmSendingFiles( bool RepliesWidget::confirmSendingFiles( Ui::PreparedList &&list, const QString &insertTextOnCancel) { - if (showSendingFilesError(list)) { + if (_composeControls->confirmMediaEdit(list)) { + return true; + } else if (showSendingFilesError(list)) { return false; } diff --git a/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp b/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp index bc8930e41..293e5798b 100644 --- a/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp @@ -402,7 +402,9 @@ bool ScheduledWidget::confirmSendingFiles( bool ScheduledWidget::confirmSendingFiles( Ui::PreparedList &&list, const QString &insertTextOnCancel) { - if (showSendingFilesError(list)) { + if (_composeControls->confirmMediaEdit(list)) { + return true; + } else if (showSendingFilesError(list)) { return false; }