/* 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; } // namespace Data class ApiWrap { public: ApiWrap(Fn)> runner); void setFilesBaseFolder(const QString &folder); rpl::producer errors() const; void requestPersonalInfo(FnMut done); void requestUserpics( FnMut start, Fn slice, FnMut finish); void requestContacts(FnMut done); void requestSessions(FnMut done); void requestDialogs(FnMut done); ~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 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; QString _filesFolder; 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