Adds a small class to download files from the Qt frontend

This commit is contained in:
Xawotihs
2011-12-20 22:37:32 +00:00
parent 3803d126bc
commit c74f22dae3
2 changed files with 81 additions and 0 deletions

View File

@@ -0,0 +1,54 @@
#ifndef FILEDOWNLOADER_H
#define FILEDOWNLOADER_H
#include <QObject>
#include <QByteArray>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <qdeclarative.h>
#include <QTemporaryFile>
class FileDownloader : public QObject
{
Q_OBJECT
Q_PROPERTY(qint64 received READ received NOTIFY receivedChanged)
public:
explicit FileDownloader(QUrl url, QString localPath, QObject *parent = 0);
virtual ~FileDownloader();
qint64 received() const {return m_received;};
bool isDone() {return m_done;};
signals:
void downloaded();
void receivedChanged();
private slots:
void fileDownloaded(QNetworkReply* pReply){
if(m_tmp.write(pReply->readAll()) == -1) return;
if(!m_tmp.rename(m_localPath)) return;
m_tmp.setAutoRemove(false);
//emit a signal
emit downloaded();
};
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal){
m_received = bytesReceived*100/bytesTotal;
emit receivedChanged();
};
private:
QNetworkAccessManager m_WebCtrl;
qint64 m_received;
QTemporaryFile m_tmp;
QString m_localPath;
bool m_OK;
bool m_done;
};
QML_DECLARE_TYPEINFO(FileDownloader, QML_HAS_ATTACHED_PROPERTIES)
#endif // FILEDOWNLOADER_H

View File

@@ -0,0 +1,27 @@
#include "filedownloader.h"
FileDownloader::FileDownloader(QUrl url, QString localPath, QObject *parent) :
QObject(parent), m_received(0), m_localPath(localPath), m_OK(false), m_done(false)
{
QFile local(m_localPath);
if(local.exists()) {
m_done = true;
return;
}
connect(&m_WebCtrl, SIGNAL(finished(QNetworkReply*)),
SLOT(fileDownloaded(QNetworkReply*)));
QNetworkRequest request(url);
QNetworkReply* reply = m_WebCtrl.get(request);
connect(reply, SIGNAL(downloadProgress(qint64, qint64)),
SLOT(downloadProgress(qint64, qint64)));
m_OK = m_tmp.open();
}
FileDownloader::~FileDownloader()
{
}