2
0
mirror of https://github.com/kotatogram/kotatogram-desktop synced 2025-09-02 07:35:12 +00:00

Show premium emoji tooltip on paste.

This commit is contained in:
John Preston
2022-07-15 17:52:36 +03:00
parent 4ca6af33d4
commit 5ce8ed80bf
19 changed files with 225 additions and 49 deletions

View File

@@ -54,23 +54,29 @@ constexpr auto kParseLinksTimeout = crl::time(1000);
// ignore tags for different users.
class FieldTagMimeProcessor final {
public:
explicit FieldTagMimeProcessor(not_null<Main::Session*> _session);
FieldTagMimeProcessor(
not_null<Main::Session*> _session,
Fn<void(not_null<DocumentData*>)> unavailableEmojiPasted);
QString operator()(QStringView mimeTag);
private:
const not_null<Main::Session*> _session;
const Fn<void(not_null<DocumentData*>)> _unavailableEmojiPasted;
};
FieldTagMimeProcessor::FieldTagMimeProcessor(
not_null<Main::Session*> session)
: _session(session) {
not_null<Main::Session*> session,
Fn<void(not_null<DocumentData*>)> unavailableEmojiPasted)
: _session(session)
, _unavailableEmojiPasted(unavailableEmojiPasted) {
}
QString FieldTagMimeProcessor::operator()(QStringView mimeTag) {
const auto id = _session->userId().bare;
auto all = TextUtilities::SplitTags(mimeTag);
auto premiumSkipped = (DocumentData*)nullptr;
for (auto i = all.begin(); i != all.end();) {
const auto tag = *i;
if (TextUtilities::IsMentionLink(tag)
@@ -86,7 +92,8 @@ QString FieldTagMimeProcessor::operator()(QStringView mimeTag) {
}
if (!_session->premium()) {
const auto document = _session->data().document(emoji.id);
if (document->isPremiumSticker()) {
if (document->isPremiumEmoji()) {
premiumSkipped = document;
i = all.erase(i);
continue;
}
@@ -94,6 +101,11 @@ QString FieldTagMimeProcessor::operator()(QStringView mimeTag) {
}
++i;
}
if (premiumSkipped
&& _session->premiumPossible()
&& _unavailableEmojiPasted) {
_unavailableEmojiPasted(premiumSkipped);
}
return TextUtilities::JoinTag(all);
}
@@ -301,8 +313,10 @@ void InitMessageFieldHandlers(
std::shared_ptr<Ui::Show> show,
not_null<Ui::InputField*> field,
Fn<bool()> customEmojiPaused,
Fn<void(not_null<DocumentData*>)> unavailableEmojiPasted,
const style::InputField *fieldStyle) {
field->setTagMimeProcessor(FieldTagMimeProcessor(session));
field->setTagMimeProcessor(
FieldTagMimeProcessor(session, unavailableEmojiPasted));
field->setCustomEmojiFactory([=](QStringView data, Fn<void()> update) {
return session->data().customEmojiManager().create(
data,
@@ -322,12 +336,14 @@ void InitMessageFieldHandlers(
void InitMessageFieldHandlers(
not_null<Window::SessionController*> controller,
not_null<Ui::InputField*> field,
Window::GifPauseReason pauseReasonLevel) {
Window::GifPauseReason pauseReasonLevel,
Fn<void(not_null<DocumentData*>)> unavailableEmojiPasted) {
InitMessageFieldHandlers(
&controller->session(),
std::make_shared<Window::Show>(controller),
field,
[=] { return controller->isGifPausedAtLeastFor(pauseReasonLevel); });
[=] { return controller->isGifPausedAtLeastFor(pauseReasonLevel); },
unavailableEmojiPasted);
}
void InitMessageFieldGeometry(not_null<Ui::InputField*> field) {
@@ -341,8 +357,13 @@ void InitMessageFieldGeometry(not_null<Ui::InputField*> field) {
void InitMessageField(
not_null<Window::SessionController*> controller,
not_null<Ui::InputField*> field) {
InitMessageFieldHandlers(controller, field, Window::GifPauseReason::Any);
not_null<Ui::InputField*> field,
Fn<void(not_null<DocumentData*>)> unavailableEmojiPasted) {
InitMessageFieldHandlers(
controller,
field,
Window::GifPauseReason::Any,
unavailableEmojiPasted);
InitMessageFieldGeometry(field);
field->customTab(true);
}