summaryrefslogtreecommitdiff
path: root/client/DownloadClient.h
diff options
context:
space:
mode:
Diffstat (limited to 'client/DownloadClient.h')
-rw-r--r--client/DownloadClient.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/client/DownloadClient.h b/client/DownloadClient.h
new file mode 100644
index 0000000..5b75c2c
--- /dev/null
+++ b/client/DownloadClient.h
@@ -0,0 +1,95 @@
+
+
+#ifndef DOWNLOAD_CLIENT_H
+#define DOWNLOAD_CLIENT_H
+
+#include <string>
+#include <vector>
+#include <QObject>
+#include "SslClient.h"
+
+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<string, string> &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
+ * @todo It seems that std::map isn't best choice for this purpose
+ * it's quite unsuitable to iterate through(
+ */
+ void Download(const vector<pair<string, string> > &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 size of file data fragment
+ */
+ static const int FRAGMENT_SIZE = 4096;
+
+ /**
+ * @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 List of file to
+ */
+ vector<pair<string, string> > files;
+
+ /**
+ * @brief start file-by-file downloading process
+ */
+ void DoDownload();
+};
+
+#endif