summaryrefslogtreecommitdiffstats
path: root/src/filedownloader.cpp
diff options
context:
space:
mode:
authorSimon Rettberg2018-06-15 10:56:20 +0200
committerSimon Rettberg2018-06-15 10:56:20 +0200
commit4fb6c46f7aebe0754647c142bb653185f8139907 (patch)
tree74303256ff6866fbaaee07763234127d0d1a97ea /src/filedownloader.cpp
parentFileDownloader.* -> fileDownloader.* (diff)
downloadvmchooser2-4fb6c46f7aebe0754647c142bb653185f8139907.tar.gz
vmchooser2-4fb6c46f7aebe0754647c142bb653185f8139907.tar.xz
vmchooser2-4fb6c46f7aebe0754647c142bb653185f8139907.zip
fileDownloader.* -> filedownloader.*
Diffstat (limited to 'src/filedownloader.cpp')
-rw-r--r--src/filedownloader.cpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/filedownloader.cpp b/src/filedownloader.cpp
new file mode 100644
index 0000000..0af2544
--- /dev/null
+++ b/src/filedownloader.cpp
@@ -0,0 +1,73 @@
+/*
+ * filedownloader.cpp
+ *
+ * Created on: Mar 7, 2014
+ * Author: nils
+ */
+
+#include <QFileInfo>
+
+#include "filedownloader.h"
+
+// Maximum size of download
+#define MAXSIZE (200000)
+
+static QNetworkAccessManager m_WebCtrl;
+
+FileDownloader::FileDownloader(const QUrl& fileUrl, QObject *parent) :
+ QObject(parent), started(false), url(fileUrl) {
+}
+
+FileDownloader::~FileDownloader() {
+
+}
+
+bool FileDownloader::downloadFile() {
+ if (this->started)
+ return true;
+ QNetworkReply *reply = m_WebCtrl.get(QNetworkRequest(this->url));
+ if (reply == NULL)
+ return false;
+ this->started = true;
+ connect(reply, SIGNAL(finished()), SLOT(fileDownloaded()));
+ connect(reply, SIGNAL(downloadProgress(qint64, qint64)), SLOT(downloadProgress(qint64, qint64)));
+ return true;
+}
+
+/*
+ * Slots from networkreply
+ */
+
+void FileDownloader::downloadFailed(QNetworkReply::NetworkError) {
+ QNetworkReply *reply = (QNetworkReply*)this->sender();
+ killReply(reply);
+ emit downloaded(this->url, QByteArray());
+}
+
+void FileDownloader::fileDownloaded() {
+ QNetworkReply *reply = (QNetworkReply*)this->sender();
+ if (reply == NULL)
+ return;
+ QByteArray downloadedData(reply->readAll());
+ killReply(reply);
+ //emit a signal
+ emit downloaded(this->url, downloadedData);
+}
+
+void FileDownloader::downloadProgress(qint64 received, qint64 totalSize) {
+ QNetworkReply *reply = (QNetworkReply*)this->sender();
+ if (reply == NULL)
+ return;
+ if (received > MAXSIZE || totalSize > MAXSIZE) {
+ killReply(reply);
+ emit downloaded(this->url, QByteArray());
+ }
+}
+
+void FileDownloader::killReply(QNetworkReply *reply) {
+ if (reply == NULL)
+ return;
+ reply->blockSignals(true);
+ reply->abort();
+ reply->deleteLater();
+}