From 4ff543fe1f36bef43b9cc5b9b8d80dd354cfdc3c Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 30 Nov 2018 15:00:48 +0100 Subject: WTF did we have two classes for downloading files? --- src/filedownloader.cpp | 84 +++++++++++++++++--------------------------------- 1 file changed, 29 insertions(+), 55 deletions(-) (limited to 'src/filedownloader.cpp') diff --git a/src/filedownloader.cpp b/src/filedownloader.cpp index e0b0289..30f30da 100644 --- a/src/filedownloader.cpp +++ b/src/filedownloader.cpp @@ -1,72 +1,46 @@ -/* - * filedownloader.cpp - * - * Created on: Mar 7, 2014 - * Author: nils - */ - -#include - #include "filedownloader.h" +#include +#include + // Maximum size of download -#define MAXSIZE (200000) +#define MAXSIZE (400000) static QNetworkAccessManager m_WebCtrl; -FileDownloader::FileDownloader(const QUrl& fileUrl, QObject *parent) : - QObject(parent), started(false), url(fileUrl) { -} - -FileDownloader::~FileDownloader() { +static void killReply(QNetworkReply *reply); -} - -bool FileDownloader::downloadFile() { - if (this->started) - return true; - QNetworkRequest request(this->url); +bool FileDownloader::download(const QUrl& fileUrl, const std::function & f) { + QNetworkRequest request(fileUrl); 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) { + // Handle normal finish + QObject::connect(reply, &QNetworkReply::finished, [reply, f, fileUrl]() { + QByteArray downloadedData(reply->readAll()); killReply(reply); - emit downloaded(this->url, QByteArray()); - } + f(QNetworkReply::NoError, downloadedData); + }); + // Handle files that are too large + QObject::connect(reply, &QNetworkReply::downloadProgress, [reply, f, fileUrl](qint64 received, qint64 totalSize) { + if (received > MAXSIZE || totalSize > MAXSIZE) { + qDebug() << fileUrl << "too large"; + killReply(reply); + f(QNetworkReply::NetworkError::UnknownNetworkError, QByteArray()); + } + }); + // Handle errors + QObject::connect(reply, static_cast(&QNetworkReply::error), + [reply, f, fileUrl](QNetworkReply::NetworkError err) { + qDebug() << fileUrl << "error" << err; + killReply(reply); + f(err, QByteArray()); + }); + return true; } -void FileDownloader::killReply(QNetworkReply *reply) { +static void killReply(QNetworkReply *reply) { if (reply == nullptr) return; reply->blockSignals(true); -- cgit v1.2.3-55-g7522