144 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
	
		
			2.5 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/variant.h"
 | 
						|
#include "mtproto/mtproto_response.h"
 | 
						|
 | 
						|
#include <QtCore/QPointer>
 | 
						|
#include <crl/crl_object_on_queue.h>
 | 
						|
 | 
						|
namespace MTP {
 | 
						|
class Instance;
 | 
						|
} // namespace MTP
 | 
						|
 | 
						|
namespace Export {
 | 
						|
 | 
						|
class ControllerObject;
 | 
						|
struct Settings;
 | 
						|
struct Environment;
 | 
						|
 | 
						|
struct PasswordCheckState {
 | 
						|
	QString hint;
 | 
						|
	QString unconfirmedPattern;
 | 
						|
	bool requesting = true;
 | 
						|
	bool hasPassword = false;
 | 
						|
	bool checked = false;
 | 
						|
	MTPInputPeer singlePeer = MTP_inputPeerEmpty();
 | 
						|
};
 | 
						|
 | 
						|
struct ProcessingState {
 | 
						|
	enum class Step {
 | 
						|
		Initializing,
 | 
						|
		DialogsList,
 | 
						|
		PersonalInfo,
 | 
						|
		Userpics,
 | 
						|
		Stories,
 | 
						|
		Contacts,
 | 
						|
		Sessions,
 | 
						|
		OtherData,
 | 
						|
		Dialogs,
 | 
						|
	};
 | 
						|
	enum class EntityType {
 | 
						|
		Chat,
 | 
						|
		SavedMessages,
 | 
						|
		RepliesMessages,
 | 
						|
		Other,
 | 
						|
	};
 | 
						|
 | 
						|
	Step step = Step::Initializing;
 | 
						|
 | 
						|
	int substepsPassed = 0;
 | 
						|
	int substepsNow = 0;
 | 
						|
	int substepsTotal = 0;
 | 
						|
 | 
						|
	EntityType entityType = EntityType::Other;
 | 
						|
	QString entityName;
 | 
						|
	int entityIndex = 0;
 | 
						|
	int entityCount = 0;
 | 
						|
 | 
						|
	int itemIndex = 0;
 | 
						|
	int itemCount = 0;
 | 
						|
 | 
						|
	uint64 bytesRandomId = 0;
 | 
						|
	QString bytesName;
 | 
						|
	int64 bytesLoaded = 0;
 | 
						|
	int64 bytesCount = 0;
 | 
						|
};
 | 
						|
 | 
						|
struct ApiErrorState {
 | 
						|
	MTP::Error data;
 | 
						|
};
 | 
						|
 | 
						|
struct OutputErrorState {
 | 
						|
	QString path;
 | 
						|
};
 | 
						|
 | 
						|
struct CancelledState {
 | 
						|
};
 | 
						|
 | 
						|
struct FinishedState {
 | 
						|
	QString path;
 | 
						|
	int filesCount = 0;
 | 
						|
	int64 bytesCount = 0;
 | 
						|
};
 | 
						|
 | 
						|
using State = std::variant<
 | 
						|
	v::null_t,
 | 
						|
	PasswordCheckState,
 | 
						|
	ProcessingState,
 | 
						|
	ApiErrorState,
 | 
						|
	OutputErrorState,
 | 
						|
	CancelledState,
 | 
						|
	FinishedState>;
 | 
						|
 | 
						|
//struct PasswordUpdate {
 | 
						|
//	enum class Type {
 | 
						|
//		CheckSucceed,
 | 
						|
//		WrongPassword,
 | 
						|
//		FloodLimit,
 | 
						|
//		RecoverUnavailable,
 | 
						|
//	};
 | 
						|
//	Type type = Type::WrongPassword;
 | 
						|
//
 | 
						|
//};
 | 
						|
 | 
						|
class Controller {
 | 
						|
public:
 | 
						|
	Controller(
 | 
						|
		QPointer<MTP::Instance> mtproto,
 | 
						|
		const MTPInputPeer &peer);
 | 
						|
 | 
						|
	rpl::producer<State> state() const;
 | 
						|
 | 
						|
	// Password step.
 | 
						|
	//void submitPassword(const QString &password);
 | 
						|
	//void requestPasswordRecover();
 | 
						|
	//rpl::producer<PasswordUpdate> passwordUpdate() const;
 | 
						|
	//void reloadPasswordState();
 | 
						|
	//void cancelUnconfirmedPassword();
 | 
						|
 | 
						|
	// Processing step.
 | 
						|
	void startExport(
 | 
						|
		const Settings &settings,
 | 
						|
		const Environment &environment);
 | 
						|
	void skipFile(uint64 randomId);
 | 
						|
	void cancelExportFast();
 | 
						|
 | 
						|
	rpl::lifetime &lifetime();
 | 
						|
 | 
						|
	~Controller();
 | 
						|
 | 
						|
private:
 | 
						|
	using Implementation = ControllerObject;
 | 
						|
	crl::object_on_queue<Implementation> _wrapped;
 | 
						|
	rpl::lifetime _lifetime;
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
} // namespace Export
 |