/* * filedownloader.cpp * * Created on: Mar 7, 2014 * Author: nils */ #include #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; QNetworkRequest request(this->url); request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); QNetworkReply *reply = m_WebCtrl.get(request); if (reply == nullptr) 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 = reinterpret_cast(this->sender()); killReply(reply); emit downloaded(this->url, QByteArray()); } void FileDownloader::fileDownloaded() { QNetworkReply *reply = reinterpret_cast(this->sender()); if (reply == nullptr) return; QByteArray downloadedData(reply->readAll()); killReply(reply); //emit a signal emit downloaded(this->url, downloadedData); } void FileDownloader::downloadProgress(qint64 received, qint64 totalSize) { QNetworkReply *reply = reinterpret_cast(this->sender()); if (reply == nullptr) return; if (received > MAXSIZE || totalSize > MAXSIZE) { killReply(reply); emit downloaded(this->url, QByteArray()); } } void FileDownloader::killReply(QNetworkReply *reply) { if (reply == nullptr) return; reply->blockSignals(true); reply->abort(); reply->deleteLater(); }