From 20815eecbc64e340e6c6eea33d0a6c883bbfa6fa Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Wed, 2 Jul 2025 10:18:14 +0300 Subject: [PATCH] Fixed request of recent gifts only when peer has gifts. --- .../info/media/info_media_buttons.cpp | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/Telegram/SourceFiles/info/media/info_media_buttons.cpp b/Telegram/SourceFiles/info/media/info_media_buttons.cpp index 23ab2eef3d..ad908c7e43 100644 --- a/Telegram/SourceFiles/info/media/info_media_buttons.cpp +++ b/Telegram/SourceFiles/info/media/info_media_buttons.cpp @@ -316,10 +316,10 @@ not_null AddPeerGiftsButton( }); struct State final { - std::optional api; std::vector> emojiList; rpl::event_stream<> textRefreshed; QPointer button; + rpl::lifetime appearedLifetime; }; const auto state = parent->lifetime().make_state(); @@ -329,8 +329,6 @@ not_null AddPeerGiftsButton( } }; - state->api.emplace(&navigation->session().mtp()); - auto customs = state->textRefreshed.events( ) | rpl::map([=]() -> TextWithEntities { auto result = TextWithEntities(); @@ -365,16 +363,21 @@ not_null AddPeerGiftsButton( wrap->toggleOn(rpl::duplicate(forked) | rpl::map(rpl::mappers::_1 > 0)); tracker.track(wrap); - const auto requestDone = crl::guard(wrap, [=]( - std::vector ids) { - state->emojiList.clear(); - for (const auto &id : ids) { - state->emojiList.push_back( - peer->owner().customEmojiManager().create(id, refresh)); - } - state->textRefreshed.fire({}); - }); - navigation->session().recentSharedGifts().request(peer, requestDone); + rpl::duplicate(forked) | rpl::filter( + rpl::mappers::_1 > 0 + ) | rpl::start_with_next([=] { + state->appearedLifetime.destroy(); + const auto requestDone = crl::guard(wrap, [=]( + std::vector ids) { + state->emojiList.clear(); + for (const auto &id : ids) { + state->emojiList.push_back( + peer->owner().customEmojiManager().create(id, refresh)); + } + state->textRefreshed.fire({}); + }); + navigation->session().recentSharedGifts().request(peer, requestDone); + }, state->appearedLifetime); state->button = wrap->entity();