1 #ifndef MYTHDOWNLOADMANAGER_H
2 #define MYTHDOWNLOADMANAGER_H
7 #include <QNetworkAccessManager>
8 #include <QNetworkCookieJar>
9 #include <QNetworkDiskCache>
10 #include <QNetworkProxy>
11 #include <QNetworkReply>
12 #if QT_VERSION >= QT_VERSION_CHECK(5,14,0)
13 #include <QRecursiveMutex>
17 #include <QWaitCondition>
48 using AuthCallback = void (*)(QNetworkReply*, QAuthenticator*,
void*);
60 #if QT_VERSION < QT_VERSION_CHECK(5,14,0)
61 m_infoLock(new QMutex(QMutex::Recursive))
63 m_infoLock(new QRecursiveMutex())
70 void run(
void)
override;
76 void preCache(
const QString &url);
77 void queueDownload(
const QString &url,
const QString &
dest,
78 QObject *caller,
bool reload =
false);
79 void queueDownload(QNetworkRequest *req, QByteArray *data,
81 bool download(
const QString &url,
const QString &
dest,
83 bool download(
const QString &url, QByteArray *data,
84 bool reload =
false, QString *finalUrl =
nullptr);
85 QNetworkReply *download(
const QString &url,
bool reload =
false);
86 bool download(QNetworkRequest *req, QByteArray *data);
87 bool downloadAuth(
const QString &url,
const QString &
dest,
90 void *authArg =
nullptr,
91 const QHash<QByteArray, QByteArray> *headers =
nullptr);
94 void queuePost(
const QString &url, QByteArray *data, QObject *caller);
95 void queuePost(QNetworkRequest *req, QByteArray *data, QObject *caller);
96 bool post(
const QString &url, QByteArray *data);
97 bool post(QNetworkRequest *req, QByteArray *data);
98 bool postAuth(
const QString &url, QByteArray *data,
100 const QHash<QByteArray, QByteArray> *headers =
nullptr);
103 void cancelDownload(
const QString &url,
bool block =
true);
104 void cancelDownload(
const QStringList &urls,
bool block =
true);
107 void removeListener(QObject *caller);
108 QDateTime GetLastModified(
const QString &url);
110 void loadCookieJar(
const QString &
filename);
111 void saveCookieJar(
const QString &
filename);
112 void setCookieJar(QNetworkCookieJar *cookieJar);
114 QNetworkCookieJar *copyCookieJar(
void);
115 void refreshCookieJar(QNetworkCookieJar *jar);
116 void updateCookieJar(
void);
118 QString getHeader(
const QUrl &url,
const QString &header);
119 static QString getHeader(
const QNetworkCacheMetaData &cacheData,
const QString &header);
123 void downloadFinished(QNetworkReply* reply);
124 void authCallback(QNetworkReply *reply, QAuthenticator *authenticator);
127 void downloadError(QNetworkReply::NetworkError errorCode);
128 void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
135 void queueItem(
const QString &url, QNetworkRequest *req,
136 const QString &
dest, QByteArray *data, QObject *caller,
138 bool reload =
false);
140 bool processItem(
const QString &url, QNetworkRequest *req,
141 const QString &
dest, QByteArray *data,
145 void *authArg =
nullptr,
146 const QHash<QByteArray, QByteArray> *headers =
nullptr,
147 QString *finalUrl =
nullptr);
153 static bool downloadNowLinkLocal(
MythDownloadInfo *dlInfo,
bool deleteInfo);
155 void downloadCanceled(
void);
157 static QUrl redirectUrl(
const QUrl& possibleRedirectUrl,
158 const QUrl& oldRedirectUrl) ;
160 static bool saveFile(
const QString &outFile,
const QByteArray &data,
161 bool append =
false);
163 void updateCookieJar(QNetworkCookieJar *jar);
165 QNetworkAccessManager *m_manager {
nullptr};
166 QNetworkDiskCache *m_diskCache {
nullptr};
167 QNetworkProxy *m_proxy {
nullptr};
172 #if QT_VERSION < QT_VERSION_CHECK(5,14,0)
173 QMutex *m_infoLock {
nullptr};
175 QRecursiveMutex *m_infoLock {
nullptr};
182 QThread *m_queueThread {
nullptr};
184 bool m_runThread {
false};
185 bool m_isRunning {
false};
187 QNetworkCookieJar *m_inCookieJar {
nullptr};