61 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
	
		
			1.4 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 "base/timer.h"
 | |
| 
 | |
| class DocumentData;
 | |
| 
 | |
| namespace Media {
 | |
| namespace Streaming {
 | |
| class Reader;
 | |
| class Document;
 | |
| } // namespace Streaming
 | |
| } // namespace Media
 | |
| 
 | |
| namespace Data {
 | |
| 
 | |
| class Session;
 | |
| struct FileOrigin;
 | |
| 
 | |
| class Streaming final {
 | |
| public:
 | |
| 	explicit Streaming(not_null<Session*> owner);
 | |
| 	Streaming(const Streaming &other) = delete;
 | |
| 	Streaming &operator=(const Streaming &other) = delete;
 | |
| 	~Streaming();
 | |
| 
 | |
| 	using Reader = ::Media::Streaming::Reader;
 | |
| 	using Document = ::Media::Streaming::Document;
 | |
| 
 | |
| 	[[nodiscard]] std::shared_ptr<Reader> sharedReader(
 | |
| 		not_null<DocumentData*> document,
 | |
| 		FileOrigin origin,
 | |
| 		bool forceRemoteLoader = false);
 | |
| 	[[nodiscard]] std::shared_ptr<Document> sharedDocument(
 | |
| 		not_null<DocumentData*> document,
 | |
| 		FileOrigin origin);
 | |
| 
 | |
| 	void keepAlive(not_null<DocumentData*> document);
 | |
| 
 | |
| private:
 | |
| 	void clearKeptAlive();
 | |
| 
 | |
| 	const not_null<Session*> _owner;
 | |
| 
 | |
| 	base::flat_map<not_null<DocumentData*>, std::weak_ptr<Reader>> _readers;
 | |
| 	base::flat_map<
 | |
| 		not_null<DocumentData*>,
 | |
| 		std::weak_ptr<Document>> _documents;
 | |
| 
 | |
| 	base::flat_map<std::shared_ptr<Document>, crl::time> _keptAlive;
 | |
| 	base::Timer _keptAliveTimer;
 | |
| 
 | |
| };
 | |
| 
 | |
| } // namespace Data
 | 
