mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Added simple animation of stickers sending from inline bots.
This commit is contained in:
parent
2632ec45bd
commit
0a2fbb0d70
11 changed files with 66 additions and 10 deletions
|
@ -3616,14 +3616,17 @@ void ApiWrap::sendBotStart(not_null<UserData*> bot, PeerData *chat) {
|
||||||
void ApiWrap::sendInlineResult(
|
void ApiWrap::sendInlineResult(
|
||||||
not_null<UserData*> bot,
|
not_null<UserData*> bot,
|
||||||
not_null<InlineBots::Result*> data,
|
not_null<InlineBots::Result*> data,
|
||||||
const SendAction &action) {
|
const SendAction &action,
|
||||||
|
std::optional<MsgId> localMessageId) {
|
||||||
sendAction(action);
|
sendAction(action);
|
||||||
|
|
||||||
const auto history = action.history;
|
const auto history = action.history;
|
||||||
const auto peer = history->peer;
|
const auto peer = history->peer;
|
||||||
const auto newId = FullMsgId(
|
const auto newId = FullMsgId(
|
||||||
peer->id,
|
peer->id,
|
||||||
_session->data().nextLocalMessageId());
|
localMessageId
|
||||||
|
? (*localMessageId)
|
||||||
|
: _session->data().nextLocalMessageId());
|
||||||
const auto randomId = base::RandomValue<uint64>();
|
const auto randomId = base::RandomValue<uint64>();
|
||||||
|
|
||||||
auto flags = NewMessageFlags(peer);
|
auto flags = NewMessageFlags(peer);
|
||||||
|
|
|
@ -325,7 +325,8 @@ public:
|
||||||
void sendInlineResult(
|
void sendInlineResult(
|
||||||
not_null<UserData*> bot,
|
not_null<UserData*> bot,
|
||||||
not_null<InlineBots::Result*> data,
|
not_null<InlineBots::Result*> data,
|
||||||
const SendAction &action);
|
const SendAction &action,
|
||||||
|
std::optional<MsgId> localMessageId);
|
||||||
void sendMessageFail(
|
void sendMessageFail(
|
||||||
const MTP::Error &error,
|
const MTP::Error &error,
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
|
|
|
@ -6048,9 +6048,16 @@ void HistoryWidget::sendInlineResult(InlineBots::ResultSelected result) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
controller()->sendingAnimation().appendSending(
|
||||||
|
result.messageSendingFrom);
|
||||||
|
|
||||||
auto action = prepareSendAction(result.options);
|
auto action = prepareSendAction(result.options);
|
||||||
action.generateLocal = true;
|
action.generateLocal = true;
|
||||||
session().api().sendInlineResult(result.bot, result.result, action);
|
session().api().sendInlineResult(
|
||||||
|
result.bot,
|
||||||
|
result.result,
|
||||||
|
action,
|
||||||
|
result.messageSendingFrom.localId);
|
||||||
|
|
||||||
clearFieldText();
|
clearFieldText();
|
||||||
_saveDraftText = true;
|
_saveDraftText = true;
|
||||||
|
|
|
@ -563,7 +563,10 @@ void RepliesWidget::setupComposeControls() {
|
||||||
|
|
||||||
_composeControls->inlineResultChosen(
|
_composeControls->inlineResultChosen(
|
||||||
) | rpl::start_with_next([=](Selector::InlineChosen chosen) {
|
) | rpl::start_with_next([=](Selector::InlineChosen chosen) {
|
||||||
sendInlineResult(chosen.result, chosen.bot, chosen.options);
|
controller()->sendingAnimation().appendSending(
|
||||||
|
chosen.messageSendingFrom);
|
||||||
|
const auto localId = chosen.messageSendingFrom.localId;
|
||||||
|
sendInlineResult(chosen.result, chosen.bot, chosen.options, localId);
|
||||||
}, lifetime());
|
}, lifetime());
|
||||||
|
|
||||||
_composeControls->scrollRequests(
|
_composeControls->scrollRequests(
|
||||||
|
@ -1146,7 +1149,7 @@ void RepliesWidget::sendInlineResult(
|
||||||
controller()->show(Box<Ui::InformBox>(errorText));
|
controller()->show(Box<Ui::InformBox>(errorText));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sendInlineResult(result, bot, {});
|
sendInlineResult(result, bot, {}, std::nullopt);
|
||||||
//const auto callback = [=](Api::SendOptions options) {
|
//const auto callback = [=](Api::SendOptions options) {
|
||||||
// sendInlineResult(result, bot, options);
|
// sendInlineResult(result, bot, options);
|
||||||
//};
|
//};
|
||||||
|
@ -1158,10 +1161,11 @@ void RepliesWidget::sendInlineResult(
|
||||||
void RepliesWidget::sendInlineResult(
|
void RepliesWidget::sendInlineResult(
|
||||||
not_null<InlineBots::Result*> result,
|
not_null<InlineBots::Result*> result,
|
||||||
not_null<UserData*> bot,
|
not_null<UserData*> bot,
|
||||||
Api::SendOptions options) {
|
Api::SendOptions options,
|
||||||
|
std::optional<MsgId> localMessageId) {
|
||||||
auto action = prepareSendAction(options);
|
auto action = prepareSendAction(options);
|
||||||
action.generateLocal = true;
|
action.generateLocal = true;
|
||||||
session().api().sendInlineResult(bot, result, action);
|
session().api().sendInlineResult(bot, result, action, localMessageId);
|
||||||
|
|
||||||
_composeControls->clear();
|
_composeControls->clear();
|
||||||
//_saveDraftText = true;
|
//_saveDraftText = true;
|
||||||
|
|
|
@ -257,7 +257,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);
|
Api::SendOptions options,
|
||||||
|
std::optional<MsgId> localMessageId);
|
||||||
|
|
||||||
[[nodiscard]] bool showSlowmodeError();
|
[[nodiscard]] bool showSlowmodeError();
|
||||||
[[nodiscard]] std::optional<QString> writeRestriction() const;
|
[[nodiscard]] std::optional<QString> writeRestriction() const;
|
||||||
|
|
|
@ -752,7 +752,7 @@ void ScheduledWidget::sendInlineResult(
|
||||||
Api::SendOptions options) {
|
Api::SendOptions options) {
|
||||||
auto action = prepareSendAction(options);
|
auto action = prepareSendAction(options);
|
||||||
action.generateLocal = true;
|
action.generateLocal = true;
|
||||||
session().api().sendInlineResult(bot, result, action);
|
session().api().sendInlineResult(bot, result, action, std::nullopt);
|
||||||
|
|
||||||
_composeControls->clear();
|
_composeControls->clear();
|
||||||
//_saveDraftText = true;
|
//_saveDraftText = true;
|
||||||
|
|
|
@ -465,6 +465,20 @@ void Sticker::unloadHeavyPart() {
|
||||||
_webm = nullptr;
|
_webm = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QRect Sticker::innerContentRect() const {
|
||||||
|
ensureDataMediaCreated(getShownDocument());
|
||||||
|
|
||||||
|
const auto size = (_lottie && _lottie->ready())
|
||||||
|
? (_lottie->frame().size() / style::DevicePixelRatio())
|
||||||
|
: (!_thumb.isNull())
|
||||||
|
? (_thumb.size() / style::DevicePixelRatio())
|
||||||
|
: getThumbSize();
|
||||||
|
const auto pos = QPoint(
|
||||||
|
(st::stickerPanSize.width() - size.width()) / 2,
|
||||||
|
(st::stickerPanSize.height() - size.height()) / 2);
|
||||||
|
return QRect(pos, size);
|
||||||
|
}
|
||||||
|
|
||||||
void Sticker::paint(Painter &p, const QRect &clip, const PaintContext *context) const {
|
void Sticker::paint(Painter &p, const QRect &clip, const PaintContext *context) const {
|
||||||
ensureDataMediaCreated(getShownDocument());
|
ensureDataMediaCreated(getShownDocument());
|
||||||
|
|
||||||
|
|
|
@ -201,6 +201,8 @@ public:
|
||||||
|
|
||||||
void unloadHeavyPart() override;
|
void unloadHeavyPart() override;
|
||||||
|
|
||||||
|
QRect innerContentRect() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void ensureDataMediaCreated(not_null<DocumentData*> document) const;
|
void ensureDataMediaCreated(not_null<DocumentData*> document) const;
|
||||||
void setupLottie() const;
|
void setupLottie() const;
|
||||||
|
|
|
@ -109,6 +109,11 @@ public:
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual QRect innerContentRect() const {
|
||||||
|
// Only stickers are supported for now.
|
||||||
|
Unexpected("Unsupported type to get a rect of inner content.");
|
||||||
|
}
|
||||||
|
|
||||||
static std::unique_ptr<ItemBase> createLayout(
|
static std::unique_ptr<ItemBase> createLayout(
|
||||||
not_null<Context*> context,
|
not_null<Context*> context,
|
||||||
not_null<Result*> result,
|
not_null<Result*> result,
|
||||||
|
|
|
@ -10,6 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "data/data_cloud_file.h"
|
#include "data/data_cloud_file.h"
|
||||||
#include "api/api_common.h"
|
#include "api/api_common.h"
|
||||||
#include "media/view/media_view_open_common.h"
|
#include "media/view/media_view_open_common.h"
|
||||||
|
#include "ui/effects/message_sending_animation_common.h"
|
||||||
|
|
||||||
class FileLoader;
|
class FileLoader;
|
||||||
class History;
|
class History;
|
||||||
|
@ -132,6 +133,7 @@ struct ResultSelected {
|
||||||
not_null<Result*> result;
|
not_null<Result*> result;
|
||||||
not_null<UserData*> bot;
|
not_null<UserData*> bot;
|
||||||
Api::SendOptions options;
|
Api::SendOptions options;
|
||||||
|
Ui::MessageSendingAnimationFrom messageSendingFrom;
|
||||||
// Open in OverlayWidget;
|
// Open in OverlayWidget;
|
||||||
bool open = false;
|
bool open = false;
|
||||||
};
|
};
|
||||||
|
|
|
@ -11,10 +11,12 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "chat_helpers/gifs_list_widget.h" // ChatHelpers::AddGifAction
|
#include "chat_helpers/gifs_list_widget.h" // ChatHelpers::AddGifAction
|
||||||
#include "chat_helpers/send_context_menu.h" // SendMenu::FillSendMenu
|
#include "chat_helpers/send_context_menu.h" // SendMenu::FillSendMenu
|
||||||
#include "core/click_handler_types.h"
|
#include "core/click_handler_types.h"
|
||||||
|
#include "data/data_document.h"
|
||||||
#include "data/data_file_origin.h"
|
#include "data/data_file_origin.h"
|
||||||
#include "data/data_user.h"
|
#include "data/data_user.h"
|
||||||
#include "data/data_changes.h"
|
#include "data/data_changes.h"
|
||||||
#include "data/data_chat_participant_status.h"
|
#include "data/data_chat_participant_status.h"
|
||||||
|
#include "data/data_session.h"
|
||||||
#include "inline_bots/inline_bot_result.h"
|
#include "inline_bots/inline_bot_result.h"
|
||||||
#include "inline_bots/inline_bot_layout_item.h"
|
#include "inline_bots/inline_bot_layout_item.h"
|
||||||
#include "lang/lang_keys.h"
|
#include "lang/lang_keys.h"
|
||||||
|
@ -264,6 +266,20 @@ void Inner::selectInlineResult(
|
||||||
if (!item) {
|
if (!item) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
const auto messageSendingFrom = [&]() -> Ui::MessageSendingAnimationFrom {
|
||||||
|
const auto document = item->getDocument()
|
||||||
|
? item->getDocument()
|
||||||
|
: item->getPreviewDocument();
|
||||||
|
if (options.scheduled || !document || !document->sticker()) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
const auto rect = item->innerContentRect().translated(
|
||||||
|
_mosaic.findRect(index).topLeft());
|
||||||
|
return {
|
||||||
|
.localId = _controller->session().data().nextLocalMessageId(),
|
||||||
|
.globalStartGeometry = mapToGlobal(rect),
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
if (const auto inlineResult = item->getResult()) {
|
if (const auto inlineResult = item->getResult()) {
|
||||||
if (inlineResult->onChoose(item)) {
|
if (inlineResult->onChoose(item)) {
|
||||||
|
@ -271,6 +287,7 @@ void Inner::selectInlineResult(
|
||||||
.result = inlineResult,
|
.result = inlineResult,
|
||||||
.bot = _inlineBot,
|
.bot = _inlineBot,
|
||||||
.options = std::move(options),
|
.options = std::move(options),
|
||||||
|
.messageSendingFrom = messageSendingFrom(),
|
||||||
.open = open,
|
.open = open,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue