Added Api::SendOptions passing from TabbedSelector for inline results.

This commit is contained in:
23rd 2020-08-07 19:13:47 +03:00 committed by John Preston
parent 5b95585725
commit d1d153e886
9 changed files with 43 additions and 24 deletions

View file

@ -189,7 +189,8 @@ rpl::producer<TabbedSelector::FileChosen> GifsListWidget::fileChosen() const {
return _fileChosen.events(); return _fileChosen.events();
} }
rpl::producer<not_null<PhotoData*>> GifsListWidget::photoChosen() const { auto GifsListWidget::photoChosen() const
-> rpl::producer<TabbedSelector::PhotoChosen> {
return _photoChosen.events(); return _photoChosen.events();
} }
@ -457,7 +458,9 @@ void GifsListWidget::selectInlineResult(
if (forceSend if (forceSend
|| (media && media->image(PhotoSize::Thumbnail)) || (media && media->image(PhotoSize::Thumbnail))
|| (media && media->image(PhotoSize::Large))) { || (media && media->image(PhotoSize::Large))) {
_photoChosen.fire_copy(photo); _photoChosen.fire_copy({
.photo = photo,
.options = options });
} else if (!photo->loading(PhotoSize::Thumbnail)) { } else if (!photo->loading(PhotoSize::Thumbnail)) {
photo->load(PhotoSize::Thumbnail, Data::FileOrigin()); photo->load(PhotoSize::Thumbnail, Data::FileOrigin());
} }
@ -479,7 +482,7 @@ void GifsListWidget::selectInlineResult(
} }
} else if (const auto inlineResult = item->getResult()) { } else if (const auto inlineResult = item->getResult()) {
if (inlineResult->onChoose(item)) { if (inlineResult->onChoose(item)) {
_inlineResultChosen.fire({ inlineResult, _searchBot }); _inlineResultChosen.fire({ inlineResult, _searchBot, options });
} }
} }
} }

View file

@ -50,7 +50,7 @@ public:
GifsListWidget(QWidget *parent, not_null<Window::SessionController*> controller); GifsListWidget(QWidget *parent, not_null<Window::SessionController*> controller);
rpl::producer<TabbedSelector::FileChosen> fileChosen() const; rpl::producer<TabbedSelector::FileChosen> fileChosen() const;
rpl::producer<not_null<PhotoData*>> photoChosen() const; rpl::producer<TabbedSelector::PhotoChosen> photoChosen() const;
rpl::producer<InlineChosen> inlineResultChosen() const; rpl::producer<InlineChosen> inlineResultChosen() const;
void refreshRecent() override; void refreshRecent() override;
@ -196,7 +196,7 @@ private:
mtpRequestId _inlineRequestId = 0; mtpRequestId _inlineRequestId = 0;
rpl::event_stream<TabbedSelector::FileChosen> _fileChosen; rpl::event_stream<TabbedSelector::FileChosen> _fileChosen;
rpl::event_stream<not_null<PhotoData*>> _photoChosen; rpl::event_stream<TabbedSelector::PhotoChosen> _photoChosen;
rpl::event_stream<InlineChosen> _inlineResultChosen; rpl::event_stream<InlineChosen> _inlineResultChosen;
rpl::event_stream<> _cancelled; rpl::event_stream<> _cancelled;

View file

@ -417,7 +417,8 @@ rpl::producer<TabbedSelector::FileChosen> TabbedSelector::fileChosen() const {
: rpl::never<TabbedSelector::FileChosen>() | rpl::type_erased(); : rpl::never<TabbedSelector::FileChosen>() | rpl::type_erased();
} }
rpl::producer<not_null<PhotoData*>> TabbedSelector::photoChosen() const { auto TabbedSelector::photoChosen() const
-> rpl::producer<TabbedSelector::PhotoChosen>{
return full() ? gifs()->photoChosen() : nullptr; return full() ? gifs()->photoChosen() : nullptr;
} }

View file

@ -54,9 +54,14 @@ public:
not_null<DocumentData*> document; not_null<DocumentData*> document;
Api::SendOptions options; Api::SendOptions options;
}; };
struct PhotoChosen {
not_null<PhotoData*> photo;
Api::SendOptions options;
};
struct InlineChosen { struct InlineChosen {
not_null<InlineBots::Result*> result; not_null<InlineBots::Result*> result;
not_null<UserData*> bot; not_null<UserData*> bot;
Api::SendOptions options;
}; };
enum class Mode { enum class Mode {
Full, Full,
@ -73,7 +78,7 @@ public:
rpl::producer<EmojiPtr> emojiChosen() const; rpl::producer<EmojiPtr> emojiChosen() const;
rpl::producer<FileChosen> fileChosen() const; rpl::producer<FileChosen> fileChosen() const;
rpl::producer<not_null<PhotoData*>> photoChosen() const; rpl::producer<PhotoChosen> photoChosen() const;
rpl::producer<InlineChosen> inlineResultChosen() const; rpl::producer<InlineChosen> inlineResultChosen() const;
rpl::producer<> cancelled() const; rpl::producer<> cancelled() const;

View file

@ -825,15 +825,15 @@ void HistoryWidget::initTabbedSelector() {
selector->photoChosen( selector->photoChosen(
) | rpl::filter([=] { ) | rpl::filter([=] {
return !isHidden(); return !isHidden();
}) | rpl::start_with_next([=](not_null<PhotoData*> photo) { }) | rpl::start_with_next([=](TabbedSelector::PhotoChosen data) {
sendExistingPhoto(photo); sendExistingPhoto(data.photo, data.options);
}, lifetime()); }, lifetime());
selector->inlineResultChosen( selector->inlineResultChosen(
) | rpl::filter([=] { ) | rpl::filter([=] {
return !isHidden(); return !isHidden();
}) | rpl::start_with_next([=](TabbedSelector::InlineChosen data) { }) | rpl::start_with_next([=](TabbedSelector::InlineChosen data) {
sendInlineResult(data.result, data.bot); sendInlineResult(data.result, data.bot, data.options);
}, lifetime()); }, lifetime());
selector->setSendMenuType([=] { return sendMenuType(); }); selector->setSendMenuType([=] { return sendMenuType(); });
@ -1200,7 +1200,7 @@ void HistoryWidget::applyInlineBotQuery(UserData *bot, const QString &query) {
_inlineResults->setResultSelectedCallback([=]( _inlineResults->setResultSelectedCallback([=](
InlineBots::Result *result, InlineBots::Result *result,
UserData *bot) { UserData *bot) {
sendInlineResult(result, bot); sendInlineResult(result, bot, Api::SendOptions());
}); });
_inlineResults->requesting( _inlineResults->requesting(
) | rpl::start_with_next([=](bool requesting) { ) | rpl::start_with_next([=](bool requesting) {
@ -5218,7 +5218,8 @@ void HistoryWidget::onFieldTabbed() {
void HistoryWidget::sendInlineResult( void HistoryWidget::sendInlineResult(
not_null<InlineBots::Result*> result, not_null<InlineBots::Result*> result,
not_null<UserData*> bot) { not_null<UserData*> bot,
Api::SendOptions options) {
if (!_peer || !_peer->canWrite()) { if (!_peer || !_peer->canWrite()) {
return; return;
} else if (showSlowmodeError()) { } else if (showSlowmodeError()) {
@ -5233,6 +5234,7 @@ void HistoryWidget::sendInlineResult(
auto action = Api::SendAction(_history); auto action = Api::SendAction(_history);
action.replyTo = replyToId(); action.replyTo = replyToId();
action.options = std::move(options);
action.generateLocal = true; action.generateLocal = true;
session().api().sendInlineResult(bot, result, action); session().api().sendInlineResult(bot, result, action);
@ -5404,7 +5406,9 @@ bool HistoryWidget::sendExistingDocument(
return true; return true;
} }
bool HistoryWidget::sendExistingPhoto(not_null<PhotoData*> photo) { bool HistoryWidget::sendExistingPhoto(
not_null<PhotoData*> photo,
Api::SendOptions options) {
const auto error = _peer const auto error = _peer
? Data::RestrictionError(_peer, ChatRestriction::f_send_media) ? Data::RestrictionError(_peer, ChatRestriction::f_send_media)
: std::nullopt; : std::nullopt;
@ -5419,6 +5423,7 @@ bool HistoryWidget::sendExistingPhoto(not_null<PhotoData*> photo) {
auto message = Api::MessageToSend(_history); auto message = Api::MessageToSend(_history);
message.action.replyTo = replyToId(); message.action.replyTo = replyToId();
message.action.options = std::move(options);
Api::SendExistingPhoto(std::move(message), photo); Api::SendExistingPhoto(std::move(message), photo);
hideSelectorControlsAnimated(); hideSelectorControlsAnimated();

View file

@ -251,7 +251,9 @@ public:
bool sendExistingDocument( bool sendExistingDocument(
not_null<DocumentData*> document, not_null<DocumentData*> document,
Api::SendOptions options); Api::SendOptions options);
bool sendExistingPhoto(not_null<PhotoData*> photo); bool sendExistingPhoto(
not_null<PhotoData*> photo,
Api::SendOptions options);
void showInfoTooltip( void showInfoTooltip(
const TextWithEntities &text, const TextWithEntities &text,
@ -501,7 +503,8 @@ private:
void sendInlineResult( void sendInlineResult(
not_null<InlineBots::Result*> result, not_null<InlineBots::Result*> result,
not_null<UserData*> bot); not_null<UserData*> bot,
Api::SendOptions options);
void drawField(Painter &p, const QRect &rect); void drawField(Painter &p, const QRect &rect);
void paintEditHeader( void paintEditHeader(

View file

@ -40,6 +40,7 @@ namespace HistoryView {
namespace { namespace {
using FileChosen = ComposeControls::FileChosen; using FileChosen = ComposeControls::FileChosen;
using PhotoChosen = ComposeControls::PhotoChosen;
using MessageToEdit = ComposeControls::MessageToEdit; using MessageToEdit = ComposeControls::MessageToEdit;
constexpr auto kMouseEvent = { constexpr auto kMouseEvent = {
@ -507,7 +508,7 @@ rpl::producer<FileChosen> ComposeControls::fileChosen() const {
return _fileChosen.events(); return _fileChosen.events();
} }
rpl::producer<not_null<PhotoData*>> ComposeControls::photoChosen() const { rpl::producer<PhotoChosen> ComposeControls::photoChosen() const {
return _photoChosen.events(); return _photoChosen.events();
} }

View file

@ -55,6 +55,7 @@ class FieldHeader;
class ComposeControls final { class ComposeControls final {
public: public:
using FileChosen = ChatHelpers::TabbedSelector::FileChosen; using FileChosen = ChatHelpers::TabbedSelector::FileChosen;
using PhotoChosen = ChatHelpers::TabbedSelector::PhotoChosen;
enum class Mode { enum class Mode {
Normal, Normal,
Scheduled, Scheduled,
@ -87,7 +88,7 @@ public:
[[nodiscard]] rpl::producer<MessageToEdit> editRequests() const; [[nodiscard]] rpl::producer<MessageToEdit> editRequests() const;
[[nodiscard]] rpl::producer<> attachRequests() const; [[nodiscard]] rpl::producer<> attachRequests() const;
[[nodiscard]] rpl::producer<FileChosen> fileChosen() const; [[nodiscard]] rpl::producer<FileChosen> fileChosen() const;
[[nodiscard]] rpl::producer<not_null<PhotoData*>> photoChosen() const; [[nodiscard]] rpl::producer<PhotoChosen> photoChosen() const;
[[nodiscard]] rpl::producer<Data::MessagePosition> scrollRequests() const; [[nodiscard]] rpl::producer<Data::MessagePosition> scrollRequests() const;
[[nodiscard]] rpl::producer<not_null<QKeyEvent*>> keyEvents() const; [[nodiscard]] rpl::producer<not_null<QKeyEvent*>> keyEvents() const;
[[nodiscard]] auto inlineResultChosen() const [[nodiscard]] auto inlineResultChosen() const
@ -156,7 +157,7 @@ private:
rpl::event_stream<> _cancelRequests; rpl::event_stream<> _cancelRequests;
rpl::event_stream<FileChosen> _fileChosen; rpl::event_stream<FileChosen> _fileChosen;
rpl::event_stream<not_null<PhotoData*>> _photoChosen; rpl::event_stream<PhotoChosen> _photoChosen;
rpl::event_stream<ChatHelpers::TabbedSelector::InlineChosen> _inlineResultChosen; rpl::event_stream<ChatHelpers::TabbedSelector::InlineChosen> _inlineResultChosen;
TextWithTags _localSavedText; TextWithTags _localSavedText;

View file

@ -198,20 +198,20 @@ void ScheduledWidget::setupComposeControls() {
[=] { _choosingAttach = false; chooseAttach(); }); [=] { _choosingAttach = false; chooseAttach(); });
}, lifetime()); }, lifetime());
using Selector = ChatHelpers::TabbedSelector;
_composeControls->fileChosen( _composeControls->fileChosen(
) | rpl::start_with_next([=]( ) | rpl::start_with_next([=](Selector::FileChosen chosen) {
ChatHelpers::TabbedSelector::FileChosen chosen) {
sendExistingDocument(chosen.document); sendExistingDocument(chosen.document);
}, lifetime()); }, lifetime());
_composeControls->photoChosen( _composeControls->photoChosen(
) | rpl::start_with_next([=](not_null<PhotoData*> photo) { ) | rpl::start_with_next([=](Selector::PhotoChosen chosen) {
sendExistingPhoto(photo); sendExistingPhoto(chosen.photo);
}, lifetime()); }, lifetime());
_composeControls->inlineResultChosen( _composeControls->inlineResultChosen(
) | rpl::start_with_next([=]( ) | rpl::start_with_next([=](Selector::InlineChosen chosen) {
ChatHelpers::TabbedSelector::InlineChosen chosen) {
sendInlineResult(chosen.result, chosen.bot); sendInlineResult(chosen.result, chosen.bot);
}, lifetime()); }, lifetime());