1 #ifndef MYTHDOWNLOADMANAGER_H 2 #define MYTHDOWNLOADMANAGER_H 7 #include <QNetworkAccessManager> 8 #include <QNetworkDiskCache> 9 #include <QNetworkReply> 10 #include <QNetworkProxy> 11 #include <QWaitCondition> 30 using AuthCallback = void (*)(QNetworkReply*, QAuthenticator*,
void*);
42 m_infoLock(new QMutex(QMutex::Recursive)) {}
47 void run(
void)
override;
53 void preCache(
const QString &url);
54 void queueDownload(
const QString &url,
const QString &
dest,
55 QObject *caller,
const bool reload =
false);
56 void queueDownload(QNetworkRequest *req, QByteArray *data,
58 bool download(
const QString &url,
const QString &
dest,
59 const bool reload =
false);
60 bool download(
const QString &url, QByteArray *data,
61 const bool reload =
false, QString *finalUrl =
nullptr);
62 QNetworkReply *download(
const QString &url,
const bool reload =
false);
63 bool download(QNetworkRequest *req, QByteArray *data);
64 bool downloadAuth(
const QString &url,
const QString &
dest,
65 const bool reload =
false,
67 void *authArg =
nullptr,
68 const QHash<QByteArray, QByteArray> *headers =
nullptr);
71 void queuePost(
const QString &url, QByteArray *data, QObject *caller);
72 void queuePost(QNetworkRequest *req, QByteArray *data, QObject *caller);
73 bool post(
const QString &url, QByteArray *data);
74 bool post(QNetworkRequest *req, QByteArray *data);
75 bool postAuth(
const QString &url, QByteArray *data,
77 const QHash<QByteArray, QByteArray> *headers =
nullptr);
80 void cancelDownload(
const QString &url,
bool block =
true);
81 void cancelDownload(
const QStringList &urls,
bool block =
true);
84 void removeListener(QObject *caller);
85 QDateTime GetLastModified(
const QString &url);
87 void loadCookieJar(
const QString &
filename);
88 void saveCookieJar(
const QString &
filename);
89 void setCookieJar(QNetworkCookieJar *cookieJar);
91 QNetworkCookieJar *copyCookieJar(
void);
92 void refreshCookieJar(QNetworkCookieJar *jar);
93 void updateCookieJar(
void);
95 QString getHeader(
const QUrl &url,
const QString &header);
96 static QString getHeader(
const QNetworkCacheMetaData &cacheData,
const QString &header);
100 void downloadFinished(QNetworkReply* reply);
101 void authCallback(QNetworkReply *reply, QAuthenticator *authenticator);
104 void downloadError(QNetworkReply::NetworkError errorCode);
105 void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
112 void queueItem(
const QString &url, QNetworkRequest *req,
113 const QString &
dest, QByteArray *data, QObject *caller,
115 const bool reload =
false);
117 bool processItem(
const QString &url, QNetworkRequest *req,
118 const QString &
dest, QByteArray *data,
120 const bool reload =
false,
122 void *authArg =
nullptr,
123 const QHash<QByteArray, QByteArray> *headers =
nullptr,
124 QString *finalUrl =
nullptr);
130 static bool downloadNowLinkLocal(
MythDownloadInfo *dlInfo,
bool deleteInfo);
132 void downloadCanceled(
void);
134 static QUrl redirectUrl(
const QUrl& possibleRedirectUrl,
135 const QUrl& oldRedirectUrl) ;
137 static bool saveFile(
const QString &outFile,
const QByteArray &data,
138 const bool append =
false);
140 void updateCookieJar(QNetworkCookieJar *jar);
142 QNetworkAccessManager *m_manager {
nullptr};
143 QNetworkDiskCache *m_diskCache {
nullptr};
144 QNetworkProxy *m_proxy {
nullptr};
149 QMutex *m_infoLock {
nullptr};
155 QThread *m_queueThread {
nullptr};
157 bool m_runThread {
false};
158 bool m_isRunning {
false};
160 QNetworkCookieJar *m_inCookieJar {
nullptr};
QList< MythDownloadInfo * > m_cancellationQueue
This is a wrapper around QThread that does several additional things.
QMap< QString, MythDownloadInfo * > m_downloadInfos
virtual void run(void)
Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead.
void ShutdownMythDownloadManager(void)
Deletes the running MythDownloadManager at program exit.
QList< MythDownloadInfo * > m_downloadQueue
MythDownloadManager()
Constructor for MythDownloadManager.
static QString downloadRemoteFile(const QString &cmd, const QString &url, const QString &storageGroup, const QString &filename)
QWaitCondition m_queueWaitCond
MBASE_PUBLIC MythDownloadManager * GetMythDownloadManager(void)
Gets the pointer to the MythDownloadManager singleton.
void(*)(QNetworkReply *, QAuthenticator *, void *) AuthCallback
QMap< QNetworkReply *, MythDownloadInfo * > m_downloadReplies
QThread * getQueueThread(void)