// Copyright © 2010-2012 b0ris //. // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. //. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. //. // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef DOWNLOAD_CLIENT_H #define DOWNLOAD_CLIENT_H #include #include #include #include "SslClient.h" using std::map; using std::pair; using std::string; using std::vector; class QFile; class DownloadClient: public SslClient { Q_OBJECT public: /** * @brief Initialize new DownloadClient instance */ DownloadClient(); /** * @brief Initialize new DownloadClient instance * @param addr server address or hostname to connect to */ DownloadClient(QString addr); /** * @brief Download file from server * @param file file path on client machine */ void Download(const string &file); /** * @brief Download file from server * @param file pair of file name and it's md5 hash value */ void Download(const pair &file); /** * @brief Download list of files * @param files associative array of file names and it's md5 hashes * @note this is designated method among all of three */ void Download(const vector > &files); signals: /** * @brief This signal is emitted when all files have been downloaded */ void downloadFinished(); private slots: void FileDataRecieved(SslClient::RequestType &type, QByteArray &confdata); private: /** * @brief maximum number of retries when downloading files */ static const int MAX_DOWNLOAD_ATTEMPTS = 3; /** * @brief indicates that program is downloading file(s) right now */ bool isDownloading; /** * @brief name of file that is being downloaded */ QFile *current; /** * @brief index of file that is being downloaded */ int currentId; /** * @brief number of failed download attempt per single file */ map status; /** * @brief List of file to */ vector > files; /** * @brief start file-by-file downloading process */ void DoDownload(); }; #endif