| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- /*
- 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,
- VerifyCodes,
- 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
|