mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2026-07-25 06:54:43 +00:00
Replaced raw DocumentId with full star gift data in api recent gifts.
This commit is contained in:
@@ -30,14 +30,14 @@ RecentSharedMediaGifts::RecentSharedMediaGifts(
|
||||
|
||||
RecentSharedMediaGifts::~RecentSharedMediaGifts() = default;
|
||||
|
||||
std::vector<DocumentId> RecentSharedMediaGifts::filterGifts(
|
||||
const std::deque<GiftItem> &gifts,
|
||||
std::vector<Data::SavedStarGift> RecentSharedMediaGifts::filterGifts(
|
||||
const std::deque<Data::SavedStarGift> &gifts,
|
||||
bool onlyPinnedToTop) {
|
||||
auto result = std::vector<DocumentId>();
|
||||
auto result = std::vector<Data::SavedStarGift>();
|
||||
const auto maxCount = onlyPinnedToTop ? kMaxPinnedGifts : kMaxGifts;
|
||||
for (const auto &gift : gifts) {
|
||||
if (!onlyPinnedToTop || gift.pinned) {
|
||||
result.push_back(gift.id);
|
||||
result.push_back(gift);
|
||||
if (result.size() >= maxCount) {
|
||||
break;
|
||||
}
|
||||
@@ -48,7 +48,7 @@ std::vector<DocumentId> RecentSharedMediaGifts::filterGifts(
|
||||
|
||||
void RecentSharedMediaGifts::request(
|
||||
not_null<PeerData*> peer,
|
||||
Fn<void(std::vector<DocumentId>)> done,
|
||||
Fn<void(std::vector<SavedStarGift>)> done,
|
||||
bool onlyPinnedToTop) {
|
||||
const auto it = _recent.find(peer->id);
|
||||
if (it != _recent.end()) {
|
||||
@@ -88,10 +88,7 @@ void RecentSharedMediaGifts::request(
|
||||
|
||||
for (const auto &gift : data.vgifts().v) {
|
||||
if (auto parsed = Api::FromTL(peer, gift)) {
|
||||
entry.gifts.push_back({
|
||||
.id = parsed->info.document->id,
|
||||
.pinned = parsed->pinned
|
||||
});
|
||||
entry.gifts.push_back(std::move(*parsed));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "data/data_star_gift.h"
|
||||
|
||||
namespace Main {
|
||||
class Session;
|
||||
} // namespace Main
|
||||
@@ -20,21 +22,16 @@ public:
|
||||
|
||||
void request(
|
||||
not_null<PeerData*> peer,
|
||||
Fn<void(std::vector<DocumentId>)> done,
|
||||
Fn<void(std::vector<Data::SavedStarGift>)> done,
|
||||
bool onlyPinnedToTop = false);
|
||||
|
||||
private:
|
||||
struct GiftItem {
|
||||
DocumentId id;
|
||||
bool pinned = false;
|
||||
};
|
||||
|
||||
[[nodiscard]] std::vector<DocumentId> filterGifts(
|
||||
const std::deque<GiftItem> &gifts,
|
||||
[[nodiscard]] std::vector<Data::SavedStarGift> filterGifts(
|
||||
const std::deque<SavedStarGift> &gifts,
|
||||
bool onlyPinnedToTop);
|
||||
|
||||
struct Entry {
|
||||
std::deque<GiftItem> gifts;
|
||||
std::deque<SavedStarGift> gifts;
|
||||
crl::time lastRequestTime = 0;
|
||||
mtpRequestId requestId = 0;
|
||||
std::vector<Fn<void()>> pendingCallbacks;
|
||||
|
||||
@@ -13,6 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
#include "core/ui_integration.h"
|
||||
#include "data/components/recent_shared_media_gifts.h"
|
||||
#include "data/data_channel.h"
|
||||
#include "data/data_document.h"
|
||||
#include "data/data_saved_messages.h"
|
||||
#include "data/data_saved_sublist.h"
|
||||
#include "data/data_session.h"
|
||||
@@ -371,11 +372,13 @@ not_null<Ui::SettingsButton*> AddPeerGiftsButton(
|
||||
) | rpl::start_with_next([=] {
|
||||
state->appearedLifetime.destroy();
|
||||
const auto requestDone = crl::guard(wrap, [=](
|
||||
std::vector<DocumentId> ids) {
|
||||
std::vector<Data::SavedStarGift> gifts) {
|
||||
state->emojiList.clear();
|
||||
for (const auto &id : ids) {
|
||||
for (const auto &gift : gifts) {
|
||||
state->emojiList.push_back(
|
||||
peer->owner().customEmojiManager().create(id, refresh));
|
||||
peer->owner().customEmojiManager().create(
|
||||
gift.info.document->id,
|
||||
refresh));
|
||||
}
|
||||
state->textRefreshed.fire({});
|
||||
});
|
||||
|
||||
@@ -1098,11 +1098,11 @@ void TopBar::paintAnimatedPattern(QPainter &p, const QRect &rect) {
|
||||
|
||||
void TopBar::setupPinnedToTopGifts() {
|
||||
const auto requestDone = crl::guard(this, [=](
|
||||
std::vector<DocumentId> ids) {
|
||||
std::vector<Data::SavedStarGift> gifts) {
|
||||
_pinnedToTopGifts.clear();
|
||||
_pinnedToTopGifts.reserve(ids.size());
|
||||
_pinnedToTopGifts.reserve(gifts.size());
|
||||
_giftsLoadingLifetime.destroy();
|
||||
if (ids.empty()) {
|
||||
if (gifts.empty()) {
|
||||
_lottiePlayer = nullptr;
|
||||
} else if (!_lottiePlayer) {
|
||||
_lottiePlayer = std::make_unique<Lottie::MultiPlayer>(
|
||||
@@ -1119,8 +1119,9 @@ void TopBar::setupPinnedToTopGifts() {
|
||||
kMaxPinnedToTopGifts) | ranges::to_vector;
|
||||
ranges::shuffle(positions);
|
||||
|
||||
for (auto i = 0; i < ids.size() && i < kMaxPinnedToTopGifts; ++i) {
|
||||
const auto document = _peer->owner().document(ids[i]);
|
||||
for (auto i = 0; i < gifts.size() && i < kMaxPinnedToTopGifts; ++i) {
|
||||
const auto document = _peer->owner().document(
|
||||
gifts[i].info.document->id);
|
||||
auto entry = PinnedToTopGiftEntry();
|
||||
entry.media = document->createMediaView();
|
||||
entry.media->checkStickerSmall();
|
||||
|
||||
Reference in New Issue
Block a user