/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once #include "data/data_star_gift.h" namespace ChatHelpers { class Show; } // namespace ChatHelpers namespace Main { class Session; } // namespace Main namespace Data { class RecentSharedMediaGifts final { public: explicit RecentSharedMediaGifts(not_null session); ~RecentSharedMediaGifts(); void request( not_null peer, Fn)> done, bool onlyPinnedToTop = false); void clearLastRequestTime(not_null peer); void togglePinned( std::shared_ptr show, not_null peer, const Data::SavedStarGiftId &manageId, bool pinned, std::shared_ptr uniqueData, std::shared_ptr replacingData = nullptr); void reorderPinned( std::shared_ptr show, not_null peer, int oldPosition, int newPosition); private: void updatePinnedOrder( std::shared_ptr show, not_null peer, const std::vector &gifts, const std::vector &manageIds, Fn done); [[nodiscard]] std::vector filterGifts( const std::deque &gifts, bool onlyPinnedToTop); struct Entry { std::deque gifts; crl::time lastRequestTime = 0; mtpRequestId requestId = 0; std::vector> pendingCallbacks; }; const not_null _session; base::flat_map _recent; }; } // namespace Data