mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-06-26 21:10:02 +02:00
Improved FileDownloader
This commit is contained in:
parent
3cd4761fa7
commit
6f50ea0faa
2 changed files with 44 additions and 12 deletions
|
@ -9,12 +9,15 @@
|
||||||
|
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QNetworkRequest>
|
#include <QNetworkRequest>
|
||||||
#include <QNetworkReply>
|
|
||||||
#include <QEventLoop>
|
#include <QEventLoop>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
#include "FileDownloader.h"
|
#include "FileDownloader.h"
|
||||||
|
|
||||||
FileDownloader::FileDownloader(const QUrl dataURL, QObject* parent) : QObject(parent) {
|
FileDownloader::FileDownloader(const QUrl dataURL, QObject* parent) :
|
||||||
|
QObject(parent),
|
||||||
|
_done(false)
|
||||||
|
{
|
||||||
connect(&_networkAccessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(processReply(QNetworkReply*)));
|
connect(&_networkAccessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(processReply(QNetworkReply*)));
|
||||||
|
|
||||||
QNetworkRequest request(dataURL);
|
QNetworkRequest request(dataURL);
|
||||||
|
@ -22,21 +25,41 @@ FileDownloader::FileDownloader(const QUrl dataURL, QObject* parent) : QObject(pa
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileDownloader::processReply(QNetworkReply *reply) {
|
void FileDownloader::processReply(QNetworkReply *reply) {
|
||||||
if (reply->error() != QNetworkReply::NoError) {
|
if (reply->error() == QNetworkReply::NoError) {
|
||||||
emit done(reply->error());
|
_downloadedData = reply->readAll();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_downloadedData = reply->readAll();
|
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
|
_done = true;
|
||||||
emit done(QNetworkReply::NoError);
|
emit done(reply->error());
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray FileDownloader::download(const QUrl dataURL) {
|
void FileDownloader::waitForFile(int timeout) {
|
||||||
|
QTimer timer;
|
||||||
QEventLoop loop;
|
QEventLoop loop;
|
||||||
FileDownloader downloader(dataURL);
|
connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
|
||||||
connect(&downloader, SIGNAL(done()), &loop, SLOT(quit()));
|
connect(this, SIGNAL(done(QNetworkReply::NetworkError)), &loop, SLOT(quit()));
|
||||||
|
|
||||||
|
if (!_done) {
|
||||||
|
if (timeout > 0) {
|
||||||
|
timer.start(timeout);
|
||||||
|
}
|
||||||
loop.exec();
|
loop.exec();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QByteArray FileDownloader::download(const QUrl dataURL, int timeout) {
|
||||||
|
QTimer timer;
|
||||||
|
QEventLoop loop;
|
||||||
|
connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit));
|
||||||
|
|
||||||
|
FileDownloader downloader(dataURL);
|
||||||
|
connect(&downloader, SIGNAL(done(QNetworkReply::NetworkError)), &loop, SLOT(quit()));
|
||||||
|
|
||||||
|
if (timeout > 0) {
|
||||||
|
timer.start(timeout);
|
||||||
|
}
|
||||||
|
loop.exec();
|
||||||
|
|
||||||
return downloader.getData();
|
return downloader.getData();
|
||||||
}
|
}
|
|
@ -12,13 +12,20 @@
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QNetworkAccessManager>
|
#include <QNetworkAccessManager>
|
||||||
|
#include <QNetworkReply>
|
||||||
|
|
||||||
class FileDownloader : public QObject {
|
class FileDownloader : public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FileDownloader(const QUrl dataURL, QObject* parent = NULL);
|
FileDownloader(const QUrl dataURL, QObject* parent = NULL);
|
||||||
QByteArray getData() const { return _downloadedData; }
|
|
||||||
|
|
||||||
static QByteArray download(const QUrl dataURL);
|
void waitForFile(int timeout = 0);
|
||||||
|
|
||||||
|
QByteArray getData() const { return _downloadedData; }
|
||||||
|
bool done() { return _done; }
|
||||||
|
|
||||||
|
static QByteArray download(const QUrl dataURL, int timeout = 0);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void done(QNetworkReply::NetworkError);
|
void done(QNetworkReply::NetworkError);
|
||||||
|
@ -29,6 +36,8 @@ private slots:
|
||||||
private:
|
private:
|
||||||
QNetworkAccessManager _networkAccessManager;
|
QNetworkAccessManager _networkAccessManager;
|
||||||
QByteArray _downloadedData;
|
QByteArray _downloadedData;
|
||||||
|
|
||||||
|
bool _done;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue