2020-12-05 13:08:24 +01:00
|
|
|
#pragma once
|
2020-07-01 20:48:19 +02:00
|
|
|
|
|
|
|
|
#include <QObject>
|
2020-12-06 13:15:19 +01:00
|
|
|
#include "util/atomic.hpp"
|
2020-07-01 20:48:19 +02:00
|
|
|
|
2021-11-10 23:34:39 +01:00
|
|
|
namespace rpcs3
|
|
|
|
|
{
|
|
|
|
|
namespace curl
|
|
|
|
|
{
|
|
|
|
|
class curl_handle;
|
|
|
|
|
}
|
2025-04-05 21:50:45 +02:00
|
|
|
} // namespace rpcs3
|
2021-11-10 23:34:39 +01:00
|
|
|
|
2020-07-01 20:48:19 +02:00
|
|
|
class progress_dialog;
|
|
|
|
|
|
|
|
|
|
class downloader : public QObject
|
|
|
|
|
{
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
|
|
public:
|
2021-01-12 23:57:26 +01:00
|
|
|
explicit downloader(QWidget* parent = nullptr);
|
|
|
|
|
~downloader();
|
2020-07-01 20:48:19 +02:00
|
|
|
|
|
|
|
|
void start(const std::string& url, bool follow_location, bool show_progress_dialog, const QString& progress_dialog_title = "", bool keep_progress_dialog_open = false, int expected_size = -1);
|
2020-12-18 08:39:54 +01:00
|
|
|
usz update_buffer(char* data, usz size);
|
2020-07-01 20:48:19 +02:00
|
|
|
|
2021-04-07 23:05:18 +02:00
|
|
|
void update_progress_dialog(const QString& title) const;
|
2024-03-09 14:31:36 +01:00
|
|
|
void close_progress_dialog();
|
2020-07-01 20:48:19 +02:00
|
|
|
|
|
|
|
|
progress_dialog* get_progress_dialog() const;
|
|
|
|
|
|
|
|
|
|
private Q_SLOTS:
|
2021-04-07 23:05:18 +02:00
|
|
|
void handle_buffer_update(int size, int max) const;
|
2020-07-01 20:48:19 +02:00
|
|
|
|
|
|
|
|
Q_SIGNALS:
|
|
|
|
|
void signal_download_error(const QString& error);
|
|
|
|
|
void signal_download_finished(const QByteArray& data);
|
2022-02-01 20:53:46 +01:00
|
|
|
void signal_download_canceled();
|
2020-07-01 20:48:19 +02:00
|
|
|
void signal_buffer_update(int size, int max);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
QWidget* m_parent = nullptr;
|
|
|
|
|
|
2024-03-08 18:01:26 +01:00
|
|
|
std::unique_ptr<rpcs3::curl::curl_handle> m_curl;
|
2020-07-01 20:48:19 +02:00
|
|
|
QByteArray m_curl_buf;
|
2020-12-06 13:15:19 +01:00
|
|
|
atomic_t<bool> m_curl_abort = false;
|
|
|
|
|
atomic_t<bool> m_curl_success = false;
|
2020-07-01 20:48:19 +02:00
|
|
|
double m_actual_download_size = -1.0;
|
|
|
|
|
|
|
|
|
|
progress_dialog* m_progress_dialog = nullptr;
|
2020-12-06 13:15:19 +01:00
|
|
|
atomic_t<bool> m_keep_progress_dialog_open = false;
|
2020-07-01 20:48:19 +02:00
|
|
|
QString m_progress_dialog_title;
|
2021-01-12 23:57:26 +01:00
|
|
|
|
|
|
|
|
QThread* m_thread = nullptr;
|
2020-07-01 20:48:19 +02:00
|
|
|
};
|