| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /*
- 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 "storage/file_download.h"
- #include "storage/cache/storage_cache_types.h"
- #include "data/data_file_origin.h"
- namespace Media {
- namespace Streaming {
- class Reader;
- struct LoadedPart;
- } // namespace Streaming
- } // namespace Media
- namespace Storage {
- class StreamedFileDownloader final : public FileLoader {
- public:
- StreamedFileDownloader(
- not_null<Main::Session*> session,
- uint64 objectId,
- MTP::DcId dcId,
- Data::FileOrigin origin,
- Cache::Key cacheKey,
- MediaKey fileLocationKey,
- std::shared_ptr<Media::Streaming::Reader> reader,
- // For FileLoader
- const QString &toFile,
- int64 size,
- LocationType locationType,
- LoadToCacheSetting toCache,
- LoadFromCloudSetting fromCloud,
- bool autoLoading,
- uint8 cacheTag);
- ~StreamedFileDownloader();
- uint64 objId() const override;
- Data::FileOrigin fileOrigin() const override;
- QByteArray readLoadedPart(int64 offset);
- private:
- void startLoading() override;
- Cache::Key cacheKey() const override;
- std::optional<MediaKey> fileLocationKey() const override;
- void cancelHook() override;
- void requestParts();
- void requestPart();
- void savePart(const Media::Streaming::LoadedPart &part);
- uint64 _objectId = 0;
- Data::FileOrigin _origin;
- Cache::Key _cacheKey;
- MediaKey _fileLocationKey;
- std::shared_ptr<Media::Streaming::Reader> _reader;
- std::vector<bool> _partIsSaved; // vector<bool> :D
- mutable int _nextPartIndex = 0;
- int _partsCount = 0;
- int _partsRequested = 0;
- int _partsSaved = 0;
- rpl::lifetime _lifetime;
- };
- } // namespace Storage
|