/* 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 "mtproto/concurrent_sender.h" namespace Export { namespace Data { struct File; struct FileLocation; struct PersonalInfo; struct UserpicsInfo; struct UserpicsSlice; struct ContactsList; struct SessionsList; struct DialogsInfo; struct DialogInfo; struct MessagesSlice; } // namespace Data struct Settings; class ApiWrap { public: ApiWrap(Fn)> runner); rpl::producer errors() const; void startExport(const Settings &settings); void requestPersonalInfo(FnMut done); void requestUserpics( FnMut start, Fn slice, FnMut finish); void requestContacts(FnMut done); void requestSessions(FnMut done); void requestDialogs( FnMut start, Fn startOne, Fn sliceOne, Fn finishOne, FnMut finish); ~ApiWrap(); private: void handleUserpicsSlice(const MTPphotos_Photos &result); void loadUserpicsFiles(Data::UserpicsSlice &&slice); void loadNextUserpic(); void loadUserpicDone(const QString &relativePath); void finishUserpics(); void requestDialogsSlice(); void appendDialogsSlice(Data::DialogsInfo &&info); void finishDialogsList(); void requestNextDialog(); void requestMessagesSlice(); void loadMessagesFiles(Data::MessagesSlice &&slice); void loadNextMessageFile(); void loadMessageFileDone(const QString &relativePath); void finishMessages(); void finishDialogs(); void loadFile(const Data::File &file, FnMut done); void loadFilePart(); void filePartDone(int offset, const MTPupload_File &result); template [[nodiscard]] auto mainRequest(Request &&request); [[nodiscard]] auto fileRequest( const Data::FileLocation &location, int offset); void error(RPCError &&error); void error(const QString &text); MTP::ConcurrentSender _mtp; std::unique_ptr _settings; MTPInputUser _user = MTP_inputUserSelf(); struct UserpicsProcess; std::unique_ptr _userpicsProcess; struct FileProcess; std::unique_ptr _fileProcess; struct DialogsProcess; std::unique_ptr _dialogsProcess; rpl::event_stream _errors; }; } // namespace Export