mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Added Api::SendOptions passing from TabbedSelector for inline results.
This commit is contained in:
parent
5b95585725
commit
d1d153e886
9 changed files with 43 additions and 24 deletions
|
@ -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 });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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(
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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());
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue