76 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
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,
 | 
						|
		int32 size,
 | 
						|
		LocationType locationType,
 | 
						|
		LoadToCacheSetting toCache,
 | 
						|
		LoadFromCloudSetting fromCloud,
 | 
						|
		bool autoLoading,
 | 
						|
		uint8 cacheTag);
 | 
						|
	~StreamedFileDownloader();
 | 
						|
 | 
						|
	uint64 objId() const override;
 | 
						|
	Data::FileOrigin fileOrigin() const override;
 | 
						|
 | 
						|
	QByteArray readLoadedPart(int 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
 |