diff --git a/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp b/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp index aacd3ddf0..3d32f233c 100644 --- a/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp @@ -189,7 +189,8 @@ rpl::producer GifsListWidget::fileChosen() const { return _fileChosen.events(); } -rpl::producer> GifsListWidget::photoChosen() const { +auto GifsListWidget::photoChosen() const +-> rpl::producer { return _photoChosen.events(); } @@ -457,7 +458,9 @@ void GifsListWidget::selectInlineResult( if (forceSend || (media && media->image(PhotoSize::Thumbnail)) || (media && media->image(PhotoSize::Large))) { - _photoChosen.fire_copy(photo); + _photoChosen.fire_copy({ + .photo = photo, + .options = options }); } else if (!photo->loading(PhotoSize::Thumbnail)) { photo->load(PhotoSize::Thumbnail, Data::FileOrigin()); } @@ -479,7 +482,7 @@ void GifsListWidget::selectInlineResult( } } else if (const auto inlineResult = item->getResult()) { if (inlineResult->onChoose(item)) { - _inlineResultChosen.fire({ inlineResult, _searchBot }); + _inlineResultChosen.fire({ inlineResult, _searchBot, options }); } } } diff --git a/Telegram/SourceFiles/chat_helpers/gifs_list_widget.h b/Telegram/SourceFiles/chat_helpers/gifs_list_widget.h index 9b16ff71c..4a78c147a 100644 --- a/Telegram/SourceFiles/chat_helpers/gifs_list_widget.h +++ b/Telegram/SourceFiles/chat_helpers/gifs_list_widget.h @@ -50,7 +50,7 @@ public: GifsListWidget(QWidget *parent, not_null controller); rpl::producer fileChosen() const; - rpl::producer> photoChosen() const; + rpl::producer photoChosen() const; rpl::producer inlineResultChosen() const; void refreshRecent() override; @@ -196,7 +196,7 @@ private: mtpRequestId _inlineRequestId = 0; rpl::event_stream _fileChosen; - rpl::event_stream> _photoChosen; + rpl::event_stream _photoChosen; rpl::event_stream _inlineResultChosen; rpl::event_stream<> _cancelled; diff --git a/Telegram/SourceFiles/chat_helpers/tabbed_selector.cpp b/Telegram/SourceFiles/chat_helpers/tabbed_selector.cpp index fbb46532b..0802ace53 100644 --- a/Telegram/SourceFiles/chat_helpers/tabbed_selector.cpp +++ b/Telegram/SourceFiles/chat_helpers/tabbed_selector.cpp @@ -417,7 +417,8 @@ rpl::producer TabbedSelector::fileChosen() const { : rpl::never() | rpl::type_erased(); } -rpl::producer> TabbedSelector::photoChosen() const { +auto TabbedSelector::photoChosen() const +-> rpl::producer{ return full() ? gifs()->photoChosen() : nullptr; } diff --git a/Telegram/SourceFiles/chat_helpers/tabbed_selector.h b/Telegram/SourceFiles/chat_helpers/tabbed_selector.h index 1ec902e27..4b9e61987 100644 --- a/Telegram/SourceFiles/chat_helpers/tabbed_selector.h +++ b/Telegram/SourceFiles/chat_helpers/tabbed_selector.h @@ -54,9 +54,14 @@ public: not_null document; Api::SendOptions options; }; + struct PhotoChosen { + not_null photo; + Api::SendOptions options; + }; struct InlineChosen { not_null result; not_null bot; + Api::SendOptions options; }; enum class Mode { Full, @@ -73,7 +78,7 @@ public: rpl::producer emojiChosen() const; rpl::producer fileChosen() const; - rpl::producer> photoChosen() const; + rpl::producer photoChosen() const; rpl::producer inlineResultChosen() const; rpl::producer<> cancelled() const; diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index b7137c620..34540cb9f 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -825,15 +825,15 @@ void HistoryWidget::initTabbedSelector() { selector->photoChosen( ) | rpl::filter([=] { return !isHidden(); - }) | rpl::start_with_next([=](not_null photo) { - sendExistingPhoto(photo); + }) | rpl::start_with_next([=](TabbedSelector::PhotoChosen data) { + sendExistingPhoto(data.photo, data.options); }, lifetime()); selector->inlineResultChosen( ) | rpl::filter([=] { return !isHidden(); }) | rpl::start_with_next([=](TabbedSelector::InlineChosen data) { - sendInlineResult(data.result, data.bot); + sendInlineResult(data.result, data.bot, data.options); }, lifetime()); selector->setSendMenuType([=] { return sendMenuType(); }); @@ -1200,7 +1200,7 @@ void HistoryWidget::applyInlineBotQuery(UserData *bot, const QString &query) { _inlineResults->setResultSelectedCallback([=]( InlineBots::Result *result, UserData *bot) { - sendInlineResult(result, bot); + sendInlineResult(result, bot, Api::SendOptions()); }); _inlineResults->requesting( ) | rpl::start_with_next([=](bool requesting) { @@ -5218,7 +5218,8 @@ void HistoryWidget::onFieldTabbed() { void HistoryWidget::sendInlineResult( not_null result, - not_null bot) { + not_null bot, + Api::SendOptions options) { if (!_peer || !_peer->canWrite()) { return; } else if (showSlowmodeError()) { @@ -5233,6 +5234,7 @@ void HistoryWidget::sendInlineResult( auto action = Api::SendAction(_history); action.replyTo = replyToId(); + action.options = std::move(options); action.generateLocal = true; session().api().sendInlineResult(bot, result, action); @@ -5404,7 +5406,9 @@ bool HistoryWidget::sendExistingDocument( return true; } -bool HistoryWidget::sendExistingPhoto(not_null photo) { +bool HistoryWidget::sendExistingPhoto( + not_null photo, + Api::SendOptions options) { const auto error = _peer ? Data::RestrictionError(_peer, ChatRestriction::f_send_media) : std::nullopt; @@ -5419,6 +5423,7 @@ bool HistoryWidget::sendExistingPhoto(not_null photo) { auto message = Api::MessageToSend(_history); message.action.replyTo = replyToId(); + message.action.options = std::move(options); Api::SendExistingPhoto(std::move(message), photo); hideSelectorControlsAnimated(); diff --git a/Telegram/SourceFiles/history/history_widget.h b/Telegram/SourceFiles/history/history_widget.h index 28e9b506d..c73ec6cb7 100644 --- a/Telegram/SourceFiles/history/history_widget.h +++ b/Telegram/SourceFiles/history/history_widget.h @@ -251,7 +251,9 @@ public: bool sendExistingDocument( not_null document, Api::SendOptions options); - bool sendExistingPhoto(not_null photo); + bool sendExistingPhoto( + not_null photo, + Api::SendOptions options); void showInfoTooltip( const TextWithEntities &text, @@ -501,7 +503,8 @@ private: void sendInlineResult( not_null result, - not_null bot); + not_null bot, + Api::SendOptions options); void drawField(Painter &p, const QRect &rect); void paintEditHeader( diff --git a/Telegram/SourceFiles/history/view/history_view_compose_controls.cpp b/Telegram/SourceFiles/history/view/history_view_compose_controls.cpp index a4ac23c37..c43d26298 100644 --- a/Telegram/SourceFiles/history/view/history_view_compose_controls.cpp +++ b/Telegram/SourceFiles/history/view/history_view_compose_controls.cpp @@ -40,6 +40,7 @@ namespace HistoryView { namespace { using FileChosen = ComposeControls::FileChosen; +using PhotoChosen = ComposeControls::PhotoChosen; using MessageToEdit = ComposeControls::MessageToEdit; constexpr auto kMouseEvent = { @@ -507,7 +508,7 @@ rpl::producer ComposeControls::fileChosen() const { return _fileChosen.events(); } -rpl::producer> ComposeControls::photoChosen() const { +rpl::producer ComposeControls::photoChosen() const { return _photoChosen.events(); } diff --git a/Telegram/SourceFiles/history/view/history_view_compose_controls.h b/Telegram/SourceFiles/history/view/history_view_compose_controls.h index 7e9bd2c3f..13179d945 100644 --- a/Telegram/SourceFiles/history/view/history_view_compose_controls.h +++ b/Telegram/SourceFiles/history/view/history_view_compose_controls.h @@ -55,6 +55,7 @@ class FieldHeader; class ComposeControls final { public: using FileChosen = ChatHelpers::TabbedSelector::FileChosen; + using PhotoChosen = ChatHelpers::TabbedSelector::PhotoChosen; enum class Mode { Normal, Scheduled, @@ -87,7 +88,7 @@ public: [[nodiscard]] rpl::producer editRequests() const; [[nodiscard]] rpl::producer<> attachRequests() const; [[nodiscard]] rpl::producer fileChosen() const; - [[nodiscard]] rpl::producer> photoChosen() const; + [[nodiscard]] rpl::producer photoChosen() const; [[nodiscard]] rpl::producer scrollRequests() const; [[nodiscard]] rpl::producer> keyEvents() const; [[nodiscard]] auto inlineResultChosen() const @@ -156,7 +157,7 @@ private: rpl::event_stream<> _cancelRequests; rpl::event_stream _fileChosen; - rpl::event_stream> _photoChosen; + rpl::event_stream _photoChosen; rpl::event_stream _inlineResultChosen; TextWithTags _localSavedText; diff --git a/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp b/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp index 021a3d516..8d0a2fdc6 100644 --- a/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp @@ -198,20 +198,20 @@ void ScheduledWidget::setupComposeControls() { [=] { _choosingAttach = false; chooseAttach(); }); }, lifetime()); + using Selector = ChatHelpers::TabbedSelector; + _composeControls->fileChosen( - ) | rpl::start_with_next([=]( - ChatHelpers::TabbedSelector::FileChosen chosen) { + ) | rpl::start_with_next([=](Selector::FileChosen chosen) { sendExistingDocument(chosen.document); }, lifetime()); _composeControls->photoChosen( - ) | rpl::start_with_next([=](not_null photo) { - sendExistingPhoto(photo); + ) | rpl::start_with_next([=](Selector::PhotoChosen chosen) { + sendExistingPhoto(chosen.photo); }, lifetime()); _composeControls->inlineResultChosen( - ) | rpl::start_with_next([=]( - ChatHelpers::TabbedSelector::InlineChosen chosen) { + ) | rpl::start_with_next([=](Selector::InlineChosen chosen) { sendInlineResult(chosen.result, chosen.bot); }, lifetime());