2
0
mirror of https://github.com/telegramdesktop/tdesktop synced 2025-09-05 08:55:59 +00:00

Support entities in star gift messages.

This commit is contained in:
John Preston
2024-09-26 22:05:58 +04:00
parent 8b11d2d5e7
commit 9ace04d2c9
11 changed files with 191 additions and 79 deletions

View File

@@ -423,18 +423,14 @@ Fn<void(QString now, Fn<void(QString)> save)> DefaultEditLanguageCallback(
};
}
void InitMessageFieldHandlers(
not_null<Main::Session*> session,
std::shared_ptr<Main::SessionShow> show,
not_null<Ui::InputField*> field,
Fn<bool()> customEmojiPaused,
Fn<bool(not_null<DocumentData*>)> allowPremiumEmoji,
const style::InputField *fieldStyle) {
const auto paused = [customEmojiPaused] {
return customEmojiPaused && customEmojiPaused();
void InitMessageFieldHandlers(MessageFieldHandlersArgs &&args) {
const auto paused = [passed = args.customEmojiPaused] {
return passed && passed();
};
const auto field = args.field;
const auto session = args.session;
field->setTagMimeProcessor(
FieldTagMimeProcessor(session, allowPremiumEmoji));
FieldTagMimeProcessor(session, args.allowPremiumEmoji));
field->setCustomTextContext([=](Fn<void()> repaint) {
return std::any(Core::MarkedTextContext{
.session = session,
@@ -448,12 +444,14 @@ void InitMessageFieldHandlers(
field->setInstantReplaces(Ui::InstantReplaces::Default());
field->setInstantReplacesEnabled(
Core::App().settings().replaceEmojiValue());
field->setMarkdownReplacesEnabled(true);
if (show) {
field->setMarkdownReplacesEnabled(rpl::single(Ui::MarkdownEnabledState{
Ui::MarkdownEnabled{ std::move(args.allowMarkdownTags) }
}));
if (const auto &show = args.show) {
field->setEditLinkCallback(
DefaultEditLinkCallback(show, field, fieldStyle));
DefaultEditLinkCallback(show, field, args.fieldStyle));
field->setEditLanguageCallback(DefaultEditLanguageCallback(show));
InitSpellchecker(show, field, fieldStyle != nullptr);
InitSpellchecker(show, field, args.fieldStyle != nullptr);
}
const auto style = field->lifetime().make_state<Ui::ChatStyle>(
session->colorIndicesValue());
@@ -553,12 +551,15 @@ void InitMessageFieldHandlers(
not_null<Ui::InputField*> field,
ChatHelpers::PauseReason pauseReasonLevel,
Fn<bool(not_null<DocumentData*>)> allowPremiumEmoji) {
InitMessageFieldHandlers(
&controller->session(),
controller->uiShow(),
field,
[=] { return controller->isGifPausedAtLeastFor(pauseReasonLevel); },
allowPremiumEmoji);
InitMessageFieldHandlers({
.session = &controller->session(),
.show = controller->uiShow(),
.field = field,
.customEmojiPaused = [=] {
return controller->isGifPausedAtLeastFor(pauseReasonLevel);
},
.allowPremiumEmoji = std::move(allowPremiumEmoji),
});
}
void InitMessageFieldGeometry(not_null<Ui::InputField*> field) {
@@ -574,12 +575,15 @@ void InitMessageField(
std::shared_ptr<ChatHelpers::Show> show,
not_null<Ui::InputField*> field,
Fn<bool(not_null<DocumentData*>)> allowPremiumEmoji) {
InitMessageFieldHandlers(
&show->session(),
show,
field,
[=] { return show->paused(ChatHelpers::PauseReason::Any); },
std::move(allowPremiumEmoji));
InitMessageFieldHandlers({
.session = &show->session(),
.show = show,
.field = field,
.customEmojiPaused = [=] {
return show->paused(ChatHelpers::PauseReason::Any);
},
.allowPremiumEmoji = std::move(allowPremiumEmoji),
});
InitMessageFieldGeometry(field);
}