96 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
	
		
			2.1 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 "iv/iv_delegate.h"
 | |
| 
 | |
| namespace Main {
 | |
| class Session;
 | |
| class SessionShow;
 | |
| } // namespace Main
 | |
| 
 | |
| namespace Window {
 | |
| class SessionController;
 | |
| } // namespace Window
 | |
| 
 | |
| namespace Iv {
 | |
| 
 | |
| class Data;
 | |
| class Shown;
 | |
| 
 | |
| class Instance final {
 | |
| public:
 | |
| 	explicit Instance(not_null<Delegate*> delegate);
 | |
| 	~Instance();
 | |
| 
 | |
| 	void show(
 | |
| 		not_null<Window::SessionController*> controller,
 | |
| 		not_null<Data*> data,
 | |
| 		QString hash);
 | |
| 	void show(
 | |
| 		std::shared_ptr<Main::SessionShow> show,
 | |
| 		not_null<Data*> data,
 | |
| 		QString hash);
 | |
| 	void show(
 | |
| 		not_null<Main::Session*> session,
 | |
| 		not_null<Data*> data,
 | |
| 		QString hash);
 | |
| 
 | |
| 	void openWithIvPreferred(
 | |
| 		not_null<Window::SessionController*> controller,
 | |
| 		QString uri,
 | |
| 		QVariant context = {});
 | |
| 	void openWithIvPreferred(
 | |
| 		not_null<Main::Session*> session,
 | |
| 		QString uri,
 | |
| 		QVariant context = {});
 | |
| 
 | |
| 	[[nodiscard]] bool hasActiveWindow(
 | |
| 		not_null<Main::Session*> session) const;
 | |
| 
 | |
| 	bool closeActive();
 | |
| 	bool minimizeActive();
 | |
| 
 | |
| 	void closeAll();
 | |
| 
 | |
| 	[[nodiscard]] rpl::lifetime &lifetime();
 | |
| 
 | |
| private:
 | |
| 	void processOpenChannel(const QString &context);
 | |
| 	void processJoinChannel(const QString &context);
 | |
| 	void requestFull(not_null<Main::Session*> session, const QString &id);
 | |
| 
 | |
| 	void trackSession(not_null<Main::Session*> session);
 | |
| 
 | |
| 	const not_null<Delegate*> _delegate;
 | |
| 
 | |
| 	std::unique_ptr<Shown> _shown;
 | |
| 	Main::Session *_shownSession = nullptr;
 | |
| 	base::flat_set<not_null<Main::Session*>> _tracking;
 | |
| 	base::flat_map<
 | |
| 		not_null<Main::Session*>,
 | |
| 		base::flat_set<not_null<ChannelData*>>> _joining;
 | |
| 	base::flat_map<
 | |
| 		not_null<Main::Session*>,
 | |
| 		base::flat_set<QString>> _fullRequested;
 | |
| 
 | |
| 	base::flat_map<
 | |
| 		not_null<Main::Session*>,
 | |
| 		base::flat_map<QString, WebPageData*>> _ivCache;
 | |
| 	Main::Session *_ivRequestSession = nullptr;
 | |
| 	QString _ivRequestUri;
 | |
| 	mtpRequestId _ivRequestId = 0;
 | |
| 
 | |
| 
 | |
| 	rpl::lifetime _lifetime;
 | |
| 
 | |
| };
 | |
| 
 | |
| [[nodiscard]] bool PreferForUri(const QString &uri);
 | |
| 
 | |
| } // namespace Iv
 | 
