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_rpc_sender.h"
|
|
|
|
#include <crl/crl_object_on_queue.h>
|
|
|
|
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,
|
|
Contacts,
|
|
Sessions,
|
|
OtherData,
|
|
Dialogs,
|
|
};
|
|
enum class FileType {
|
|
None,
|
|
Photo,
|
|
Video,
|
|
VoiceMessage,
|
|
VideoMessage,
|
|
Sticker,
|
|
GIF,
|
|
File,
|
|
};
|
|
enum class EntityType {
|
|
Chat,
|
|
SavedMessages,
|
|
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;
|
|
|
|
FileType bytesType = FileType::None;
|
|
QString bytesName;
|
|
int bytesLoaded = 0;
|
|
int bytesCount = 0;
|
|
};
|
|
|
|
struct ApiErrorState {
|
|
RPCError data;
|
|
};
|
|
|
|
struct OutputErrorState {
|
|
QString path;
|
|
};
|
|
|
|
struct CancelledState {
|
|
};
|
|
|
|
struct FinishedState {
|
|
QString path;
|
|
int filesCount = 0;
|
|
int64 bytesCount = 0;
|
|
};
|
|
|
|
using State = base::optional_variant<
|
|
PasswordCheckState,
|
|
ProcessingState,
|
|
ApiErrorState,
|
|
OutputErrorState,
|
|
CancelledState,
|
|
FinishedState>;
|
|
|
|
//struct PasswordUpdate {
|
|
// enum class Type {
|
|
// CheckSucceed,
|
|
// WrongPassword,
|
|
// FloodLimit,
|
|
// RecoverUnavailable,
|
|
// };
|
|
// Type type = Type::WrongPassword;
|
|
//
|
|
//};
|
|
|
|
class Controller {
|
|
public:
|
|
explicit Controller(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 cancelExportFast();
|
|
|
|
rpl::lifetime &lifetime();
|
|
|
|
~Controller();
|
|
|
|
private:
|
|
using Implementation = ControllerObject;
|
|
crl::object_on_queue<Implementation> _wrapped;
|
|
rpl::lifetime _lifetime;
|
|
|
|
};
|
|
|
|
} // namespace Export
|