File indexing completed on 2024-04-14 14:08:54
0001 /* 0002 SPDX-FileCopyrightText: 2016 Jasem Mutlaq <mutlaqja@ikarustech.com> 0003 0004 Adapted from https://wiki.qt.io/Download_Data_from_URL 0005 0006 SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #pragma once 0010 0011 #include <QByteArray> 0012 #include <QFile> 0013 #include <QNetworkAccessManager> 0014 #include <QNetworkRequest> 0015 #include <QNetworkReply> 0016 #include <QObject> 0017 #include <QTemporaryFile> 0018 0019 #include <functional> 0020 0021 class QProgressDialog; 0022 0023 class FileDownloader : public QObject 0024 { 0025 Q_OBJECT 0026 public: 0027 explicit FileDownloader(QObject *parent = nullptr); 0028 ~FileDownloader() override = default; 0029 0030 void get(const QUrl &fileUrl); 0031 void post(const QUrl &fileUrl, QByteArray &data); 0032 void post(const QUrl &fileUrl, QHttpMultiPart *parts); 0033 0034 QByteArray downloadedData() const; 0035 0036 QUrl getDownloadedFileURL() const; 0037 bool setDownloadedFileURL(const QUrl &DownloadedFile); 0038 0039 void setProgressDialogEnabled(bool ShowProgressDialog, const QString &textTitle = QString(), 0040 const QString &textLabel = QString()); 0041 0042 // Callbacks to verify data before being accepted 0043 void registerDataVerification(std::function<bool(const QByteArray &data)> verifyFunc) { m_verifyData = verifyFunc; } 0044 void registerFileVerification(std::function<bool(const QString &filename)> verifyFile){ m_verifyFile = verifyFile; } 0045 0046 signals: 0047 void downloaded(); 0048 void canceled(); 0049 void error(const QString &errorString); 0050 void downloadProgress(qint64 bytesReceived, qint64 bytesTotal); 0051 0052 private slots: 0053 void dataFinished(QNetworkReply *pReply); 0054 void dataReady(); 0055 void slotError(); 0056 void setDownloadProgress(qint64 bytesReceived, qint64 bytesTotal); 0057 0058 private: 0059 QNetworkAccessManager m_WebCtrl; 0060 QByteArray m_DownloadedData; 0061 0062 // Downloaded file 0063 QUrl m_DownloadedFileURL; 0064 0065 // Temporary file used until download is successful 0066 QTemporaryFile m_downloadTemporaryFile; 0067 0068 // Network reply 0069 QNetworkReply *m_Reply { nullptr }; 0070 0071 // Optional Progress dialog 0072 bool m_ShowProgressDialog { false }; 0073 0074 #ifndef KSTARS_LITE 0075 QProgressDialog *progressDialog { nullptr }; 0076 #endif 0077 bool isCancelled { false }; 0078 QString label; 0079 QString title; 0080 0081 std::function<bool(const QByteArray &data)> m_verifyData; 0082 std::function<bool(const QString &filename)> m_verifyFile; 0083 };