/* 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 "base/flags.h" class FileLoader; namespace Data { class DocumentMedia final { public: explicit DocumentMedia(not_null owner); ~DocumentMedia(); [[nodiscard]] not_null owner() const; void goodThumbnailWanted(); [[nodiscard]] Image *goodThumbnail() const; void setGoodThumbnail(QImage thumbnail); [[nodiscard]] Image *thumbnailInline() const; void checkStickerLarge(); void checkStickerSmall(); [[nodiscard]] Image *getStickerSmall(); [[nodiscard]] Image *getStickerLarge(); void checkStickerLarge(not_null loader); void setBytes(const QByteArray &bytes); [[nodiscard]] QByteArray bytes() const; [[nodiscard]] bool loaded(bool check = false) const; [[nodiscard]] float64 progress() const; [[nodiscard]] bool canBePlayed() const; // For DocumentData. static void CheckGoodThumbnail(not_null document); private: enum class Flag : uchar { GoodThumbnailWanted = 0x01, }; inline constexpr bool is_flag_type(Flag) { return true; }; using Flags = base::flags; static void ReadOrGenerateThumbnail(not_null document); static void GenerateGoodThumbnail( not_null document, QByteArray data); const not_null _owner; std::unique_ptr _goodThumbnail; mutable std::unique_ptr _inlineThumbnail; std::unique_ptr _sticker; QByteArray _bytes; Flags _flags; }; } // namespace Data