summaryrefslogtreecommitdiffstats
path: root/src/downloadmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/downloadmanager.cpp')
-rw-r--r--src/downloadmanager.cpp160
1 files changed, 73 insertions, 87 deletions
diff --git a/src/downloadmanager.cpp b/src/downloadmanager.cpp
index 22c1c09..8f7d8bb 100644
--- a/src/downloadmanager.cpp
+++ b/src/downloadmanager.cpp
@@ -1,55 +1,48 @@
#include "downloadmanager.h"
-int DownloadManager::downloaded = 0;
+int DownloadManager::_downloaded = 0;
// -------------------------------------------------------------------------------------------------------
DownloadManager::DownloadManager() {
qxtLog->debug() << "Initializing download manager...";
- checkDownloadDirectory();
+ check_downloadDirectory();
_qnam = new QNetworkAccessManager();
_qnam->moveToThread(&dmThread);
- dip = false;
+ _dip = false;
}
DownloadManager::~DownloadManager() {
delete _qnam;
}
// -------------------------------------------------------------------------------------------------------
-void DownloadManager::checkDownloadDirectory() {
+void DownloadManager::check_downloadDirectory() {
// check if downloadPath exists, if not create it.
- downloadDir = QDir(downloadPath);
- if (!downloadDir.exists()) {
- qxtLog->debug() << "[dm] Download directory: " << downloadDir.path()
- << " doesn't exist.";
+ _downloadDir = QDir(downloadPath);
+ if (!_downloadDir.exists()) {
+ qxtLog->debug() << "[dm] Download directory: " << _downloadDir.path() << " doesn't exist.";
// try to create the directory
if (QDir::current().mkdir(downloadPath))
- qxtLog->debug() << "[dm] Created download directory: "
- << downloadDir.path();
+ qxtLog->debug() << "[dm] Created download directory: " << _downloadDir.path();
else {
- qxtLog->debug() << "[dm] Failed to create directory: "
- << downloadDir.path();
+ qxtLog->debug() << "[dm] Failed to create directory: " << _downloadDir.path();
// try to save to /tmp/fbgui
- downloadDir.setPath(QDir::tempPath() + "/fbgui");
- if (!downloadDir.exists()) {
+ _downloadDir.setPath(QDir::tempPath() + "/fbgui");
+ if (!_downloadDir.exists()) {
if (QDir::current().mkdir(QDir::tempPath() + "/fbgui"))
- qxtLog->debug() << "[dm] Successfully created: "
- << downloadDir.absolutePath();
+ qxtLog->debug() << "[dm] Successfully created: " << _downloadDir.absolutePath();
else {
// just in case
- qxtLog->debug() << "[dm] Failed to create: "
- << downloadDir.absolutePath();
+ qxtLog->debug() << "[dm] Failed to create: " << _downloadDir.absolutePath();
qxtLog->debug() << "[dm] Exiting...";
exit( EXIT_FAILURE);
}
} else
- qxtLog->debug() << "[dm] " << downloadDir.absolutePath()
- << " already exists.";
+ qxtLog->debug() << "[dm] " << _downloadDir.absolutePath() << " already exists.";
}
} else
- qxtLog->debug() << "[dm] Download directory: "
- << downloadDir.absolutePath() << " already exists.";
+ qxtLog->debug() << "[dm] Download directory: " << _downloadDir.absolutePath()
+ << " already exists.";
- qxtLog->debug() << "[dm] Saving downloads to: "
- << downloadDir.absolutePath();
- downloadPath = downloadDir.absolutePath();
+ qxtLog->debug() << "[dm] Saving downloads to: " << _downloadDir.absolutePath();
+ downloadPath = _downloadDir.absolutePath();
}
// -------------------------------------------------------------------------------------------------------
// Public access
@@ -71,11 +64,11 @@ void DownloadManager::processDownloadRequest(const QUrl& url) {
return;
}
qxtLog->debug() << "[dm] Enqueueing: " << url.toString();
- dlQ.enqueue(url);
- if (dip) {
+ _downloadQueue.enqueue(url);
+ if (_dip) {
// download in progress, return.
- qxtLog->debug() << "[dm] Download in progress! Queued:" << url.toString()
- << "(" << dlQ.size() << " in queue)";
+ qxtLog->debug() << "[dm] Download in progress! Queued:" << url.toString() << "("
+ << _downloadQueue.size() << " in queue)";
return;
}
// no running downloads: start next in queue
@@ -84,53 +77,51 @@ void DownloadManager::processDownloadRequest(const QUrl& url) {
// -------------------------------------------------------------------------------------------------------
void DownloadManager::startNextDownload() {
QWSServer::instance()->setCursorVisible(false);
- if (dlQ.isEmpty()) {
+ if (_downloadQueue.isEmpty()) {
emit downloadQueueEmpty();
qxtLog->debug() << "[dm] Download manager ready. (1)";
return;
}
- qxtLog->debug() << "[dm] Starting next download: " << dlQ.head().toString()
- << " (" << dlQ.size() - 1 << " in queue.)";
+ qxtLog->debug() << "[dm] Starting next download: " << _downloadQueue.head().toString() << " ("
+ << _downloadQueue.size() - 1 << " in queue.)";
// dequeue next URL to download.
- QUrl url = dlQ.dequeue();
+ QUrl url = _downloadQueue.dequeue();
// get filename from URL.
QString tmp = url.path();
tmp.remove(0, tmp.lastIndexOf(QChar('/')) + 1);
// check if filename exists on target file system
- if (downloadDir.exists(tmp)) {
- qxtLog->debug() << "[dm] File already exists: "
- << downloadDir.absoluteFilePath(tmp);
- outfile.setFileName(
- QString(downloadDir.absolutePath() + "/" + tmp + ".\%1").arg(
- downloaded));
+ if (_downloadDir.exists(tmp)) {
+ qxtLog->debug() << "[dm] File already exists: " << _downloadDir.absoluteFilePath(tmp);
+ _outfile.setFileName(
+ QString(_downloadDir.absolutePath() + "/" + tmp + ".\%1").arg(_downloaded));
} else
- outfile.setFileName(downloadDir.absoluteFilePath(tmp));
- qxtLog->debug() << "[dm] Saving to: " << outfile.fileName();
+ _outfile.setFileName(_downloadDir.absoluteFilePath(tmp));
+ qxtLog->debug() << "[dm] Saving to: " << _outfile.fileName();
// try to open for writing
- if (!outfile.open(QIODevice::WriteOnly)) {
- qxtLog->debug() << "[dm] No write access to " << outfile.fileName()
+ if (!_outfile.open(QIODevice::WriteOnly)) {
+ qxtLog->debug() << "[dm] No write access to " << _outfile.fileName()
<< " . Skipping download...";
return;
}
// send the request for the file
QNetworkRequest request(url);
- currentDownload = _qnam->get(request);
- lastProgress = 0;
- currentProgress = 0;
- dip = true;
- _time.start();
- QObject::connect(currentDownload, SIGNAL(readyRead()), this, SLOT(
+ _currentDownload = _qnam->get(request);
+ _lastProgress = 0;
+ _currentProgress = 0;
+ _dip = true;
+ time.start();
+ QObject::connect(_currentDownload, SIGNAL(readyRead()), this, SLOT(
downloadReady()));
- QObject::connect(currentDownload, SIGNAL(metaDataChanged()), this, SLOT(
+ QObject::connect(_currentDownload, SIGNAL(metaDataChanged()), this, SLOT(
processMetaInfo()));
- QObject::connect(currentDownload, SIGNAL(downloadProgress(qint64, qint64)),
- this, SLOT(downloadProgress(qint64, qint64)));
- QObject::connect(currentDownload, SIGNAL(finished()), this, SLOT(
+ QObject::connect(_currentDownload, SIGNAL(downloadProgress(qint64, qint64)), this,
+ SLOT(downloadProgress(qint64, qint64)));
+ QObject::connect(_currentDownload, SIGNAL(finished()), this, SLOT(
downloadFinished()));
}
// -------------------------------------------------------------------------------------------------------
@@ -139,26 +130,26 @@ void DownloadManager::startNextDownload() {
void DownloadManager::processMetaInfo() {
// fetch filesize from header & filename from URL (for now)
const QByteArray cltag = "Content-Length";
- QByteArray clinfo = currentDownload->rawHeader(cltag);
- QFileInfo fi(outfile);
- qxtLog->debug() << "[dm] Download Info: " << fi.fileName() << " (Size: "
- << clinfo.toDouble() << ")";
+ QByteArray clinfo = _currentDownload->rawHeader(cltag);
+ QFileInfo fi(_outfile);
+ qxtLog->debug() << "[dm] Download Info: " << fi.fileName() << " (Size: " << clinfo.toDouble()
+ << ")";
emit downloadInfo(fi.fileName(), clinfo.toDouble());
}
// -------------------------------------------------------------------------------------------------------
void DownloadManager::downloadReady() {
// data ready, save it
- outfile.write(currentDownload->readAll());
+ _outfile.write(_currentDownload->readAll());
}
// -------------------------------------------------------------------------------------------------------
void DownloadManager::downloadProgress(qint64 bytesIn, qint64 bytesTotal) {
if (bytesIn > bytesTotal || bytesTotal <= 0) {
- qxtLog->debug() << "[dm] downloadProgress invalid values:" << "In:"
- << bytesIn << " / Total: " << bytesTotal;
+ qxtLog->debug() << "[dm] downloadProgress invalid values:" << "In:" << bytesIn
+ << " / Total: " << bytesTotal;
return;
}
// calculate current speed
- double speed = bytesIn * 1000 / _time.elapsed();
+ double speed = bytesIn * 1000 / time.elapsed();
QString unit;
if (speed < 1024) {
unit = "bytes/sec";
@@ -170,46 +161,41 @@ void DownloadManager::downloadProgress(qint64 bytesIn, qint64 bytesTotal) {
unit = "MB/s";
}
// update progress only if difference higher than the updateInterval setting
- currentProgress = ((bytesIn * 100) / bytesTotal);
- if (currentProgress - lastProgress >= updateInterval) {
- lastProgress = currentProgress;
+ _currentProgress = ((bytesIn * 100) / bytesTotal);
+ if (_currentProgress - _lastProgress >= updateInterval) {
+ _lastProgress = _currentProgress;
emit
- updateProgress(currentProgress, speed, unit);
- qxtLog->debug() << "[dm] Download progress of "
- << currentDownload->url().toString() << ": " << bytesIn << "/"
- << bytesTotal << "(" << currentProgress << "\%)";
+ updateProgress(_currentProgress, speed, unit);
+ qxtLog->debug() << "[dm] Download progress of " << _currentDownload->url().toString() << ": "
+ << bytesIn << "/" << bytesTotal << "(" << _currentProgress << "\%)";
}
}
// -------------------------------------------------------------------------------------------------------
void DownloadManager::downloadFinished() {
// check for errors
- if (currentDownload->error()) {
- outfile.close();
- outfile.remove();
- int statusCode = currentDownload->attribute(
- QNetworkRequest::HttpStatusCodeAttribute).toInt();
- qxtLog->debug() << "[dm] Download of "
- << currentDownload->url().toString()
+ if (_currentDownload->error()) {
+ _outfile.close();
+ _outfile.remove();
+ int statusCode =
+ _currentDownload->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
+ qxtLog->debug() << "[dm] Download of " << _currentDownload->url().toString()
<< " failed with HTTP error code: " << statusCode;
emit
notify(QString("Download failed! HTTP Status Code: %1").arg(statusCode));
- currentDownload->deleteLater();
+ _currentDownload->deleteLater();
} else {
// end download
- outfile.close();
- downloaded++;
- qxtLog->debug() << "[dm] Download of "
- << currentDownload->url().toString() << " finished. (downloaded = "
- << downloaded << ")";
+ _outfile.close();
+ _downloaded++;
+ qxtLog->debug() << "[dm] Download of " << _currentDownload->url().toString()
+ << " finished. (_downloaded = " << _downloaded << ")";
emit
- notify(
- QString("Successfully downloaded %1").arg(
- currentDownload->url().toString()));
- currentDownload->deleteLater();
+ notify(QString("Successfully _downloaded %1").arg(_currentDownload->url().toString()));
+ _currentDownload->deleteLater();
}
- dip = false;
+ _dip = false;
// process next in queue, if any
- if (dlQ.isEmpty()) {
+ if (_downloadQueue.isEmpty()) {
emit downloadQueueEmpty();
qxtLog->debug() << "[dm] Download manager ready. (2)";
return;