| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #pragma once
- #include <QSharedPointer>
- #include <QtNetwork/QNetworkReply>
- class QFile;
- class CDownloadManager: public QObject
- {
- Q_OBJECT
- struct FileEntry
- {
- enum Status
- {
- IN_PROGRESS,
- FINISHED,
- FAILED
- };
- QNetworkReply * reply;
- QSharedPointer<QFile> file;
- Status status;
- qint64 bytesReceived;
- qint64 totalSize;
- };
- QStringList encounteredErrors;
- QNetworkAccessManager manager;
- QList<FileEntry> currentDownloads;
- FileEntry & getEntry(QNetworkReply * reply);
- public:
- CDownloadManager();
- // returns true if download with such URL is in progress/queued
- // FIXME: not sure what's right place for "mod download in progress" check
- bool downloadInProgress(const QUrl &url);
- // returns network reply so caller can connect to required signals
- void downloadFile(const QUrl &url, const QString &file);
- public slots:
- void downloadFinished(QNetworkReply *reply);
- void downloadProgressChanged(qint64 bytesReceived, qint64 bytesTotal);
- signals:
- // for status bar updates. Merges all queued downloads into one
- void downloadProgress(qint64 currentAmount, qint64 maxAmount);
- // called when all files were downloaded and manager goes to idle state
- // Lists contains files that were successfully downloaded / failed to download
- void finished(QStringList savedFiles, QStringList failedFiles, QStringList errors);
- };
|