1#ifndef MYTHDOWNLOADMANAGER_H
2#define MYTHDOWNLOADMANAGER_H
5#if QT_VERSION >= QT_VERSION_CHECK(6,5,0)
6#include <QtSystemDetection>
12#include <QNetworkAccessManager>
13#include <QNetworkCookieJar>
14#include <QNetworkDiskCache>
15#include <QNetworkProxy>
16#include <QNetworkReply>
17#include <QRecursiveMutex>
20#include <QWaitCondition>
51using AuthCallback = void (*)(QNetworkReply*, QAuthenticator*,
void*);
63 m_infoLock(new QRecursiveMutex())
74 void preCache(
const QString &url);
75 void queueDownload(
const QString &url,
const QString &
dest,
76 QObject *caller,
bool reload =
false);
77 void queueDownload(QNetworkRequest *req, QByteArray *data,
79 bool download(
const QString &url,
const QString &
dest,
81 bool download(
const QString &url, QByteArray *data,
82 bool reload =
false, QString *finalUrl =
nullptr);
83 QNetworkReply *download(
const QString &url,
bool reload =
false);
84 bool download(QNetworkRequest *req, QByteArray *data);
85 bool downloadAuth(
const QString &url,
const QString &
dest,
88 void *authArg =
nullptr,
89 const QHash<QByteArray, QByteArray> *
headers =
nullptr);
92 void queuePost(
const QString &url, QByteArray *data, QObject *caller);
93 void queuePost(QNetworkRequest *req, QByteArray *data, QObject *caller);
94 bool post(
const QString &url, QByteArray *data);
95 bool post(QNetworkRequest *req, QByteArray *data);
96 bool postAuth(
const QString &url, QByteArray *data,
98 const QHash<QByteArray, QByteArray> *
headers =
nullptr);
101 void cancelDownload(
const QString &url,
bool block =
true);
102 void cancelDownload(
const QStringList &urls,
bool block =
true);
105 void removeListener(QObject *caller);
106 QDateTime GetLastModified(
const QString &url);
108 void loadCookieJar(
const QString &
filename);
109 void saveCookieJar(
const QString &
filename);
110 void setCookieJar(QNetworkCookieJar *cookieJar);
112 QNetworkCookieJar *copyCookieJar(
void);
113 void refreshCookieJar(QNetworkCookieJar *jar);
114 void updateCookieJar(
void);
116 QString getHeader(
const QUrl &url,
const QString &header);
117 static QString getHeader(
const QNetworkCacheMetaData &cacheData,
const QString &header);
120 void run(
void)
override;
124 void downloadFinished(QNetworkReply* reply);
125 void authCallback(QNetworkReply *reply, QAuthenticator *authenticator);
128 void downloadError(QNetworkReply::NetworkError errorCode);
129 void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
136 void queueItem(
const QString &url, QNetworkRequest *req,
137 const QString &
dest, QByteArray *data, QObject *caller,
139 bool reload =
false);
141 bool processItem(
const QString &url, QNetworkRequest *req,
142 const QString &
dest, QByteArray *data,
146 void *authArg =
nullptr,
147 const QHash<QByteArray, QByteArray> *
headers =
nullptr,
148 QString *finalUrl =
nullptr);
154 static bool downloadNowLinkLocal(
MythDownloadInfo *dlInfo,
bool deleteInfo);
156 void downloadCanceled(
void);
158 static QUrl redirectUrl(
const QUrl& possibleRedirectUrl,
159 const QUrl& oldRedirectUrl) ;
161 static bool saveFile(
const QString &outFile,
const QByteArray &data,
162 bool append =
false);
166 QNetworkAccessManager *m_manager {
nullptr};
167 QNetworkDiskCache *m_diskCache {
nullptr};
168 QNetworkProxy *m_proxy {
nullptr};
173 QRecursiveMutex *m_infoLock {
nullptr};
179 QThread *m_queueThread {
nullptr};
181 bool m_runThread {
false};
182 bool m_isRunning {
false};
184 QNetworkCookieJar *m_inCookieJar {
nullptr};
This is a wrapper around QThread that does several additional things.
A subclassed QNetworkCookieJar that allows for reading and writing cookie files that contain raw form...
QMap< QString, MythDownloadInfo * > m_downloadInfos
bool isRunning(void) const
QWaitCondition m_queueWaitCond
void updateCookieJar(QNetworkCookieJar *jar)
QList< MythDownloadInfo * > m_cancellationQueue
QMap< QNetworkReply *, MythDownloadInfo * > m_downloadReplies
QList< MythDownloadInfo * > m_downloadQueue
QThread * getQueueThread(void)
MythDownloadManager()
Constructor for MythDownloadManager.
MBASE_PUBLIC MythDownloadManager * GetMythDownloadManager(void)
Gets the pointer to the MythDownloadManager singleton.
void ShutdownMythDownloadManager(void)
Deletes the running MythDownloadManager at program exit.
void(*)(QNetworkReply *, QAuthenticator *, void *) AuthCallback
void run(const QString &name, Class *object, void(Class::*fn)())
static QString downloadRemoteFile(const QString &cmd, const QString &url, const QString &storageGroup, const QString &filename)