/* # Copyright (c) 2010,2011 - RZ Uni Freiburg # Copyright (c) 2010,2011 - OpenSLX Project # # This program/file is free software distributed under the GPL version 2. # See http://openslx.org/COPYING # # If you have any feedback please consult http://openslx.org/feedback and # send your feedback to feedback@openslx.org # # General information about OpenSLX can be found under http://openslx.org # # # Class managing download requests: # - provides queueing functionality # - static info: filename, filesize # - dynamic info: download progress, current speed # */ #ifndef DOWNLOADMANAGER_H #define DOWNLOADMANAGER_H #include "fbgui.h" extern bool debug; extern QUrl baseURL; extern QString binPath; extern QString downloadPath; extern int updateInterval; class DownloadManager : public QObject { Q_OBJECT public: DownloadManager(); private: // checks for valid download directory, ran once in constructor void checkDownloadDirectory(); // private control function for queueing mechanism. void processDownloadRequest(const QUrl& url); // base objects for downloading QNetworkAccessManager* qnam; QQueue dlQ; QNetworkReply* currentDownload; QFile outfile; QDir downloadDir; // download progress variables QTime dltime; int currentProgress, lastProgress; // download in progress flag bool dip; // static counter static int downloaded; signals: // notify sends a message to the javascript interface to be evaluated there void notify(const QString& msg); // downloadInfo sends static information (name, size) to the interface. void downloadInfo(const QString& filename, const double& filesize); // updateProgress sends download progress information to the interface. void updateProgress(const int& percent, const double& speed, const QString& unit); // signal emitted when download queue is empty. void downloadQueueEmpty(); public slots: // public slots to receive download requests. void downloadFile(const QUrl& fileUrl); // convenience function void downloadFile(const QString& fileUrl); private slots: // private slots to manage the downloading process void startNextDownload(); void processMetaInfo(); void downloadReady(); void downloadProgress(qint64 bytesIn, qint64 bytesTotal); void downloadFinished(); }; #endif // DOWNLOADMANAGER_H