Download manager implementation

This commit is contained in:
Dan Paulat 2024-03-24 23:48:35 -05:00
parent 94726631cb
commit 4ac2626b65
5 changed files with 351 additions and 2 deletions

View file

@ -0,0 +1,57 @@
#include <scwx/qt/request/download_request.hpp>
namespace scwx
{
namespace qt
{
namespace request
{
static const std::string logPrefix_ = "scwx::qt::request::download_request";
class DownloadRequest::Impl
{
public:
explicit Impl(const std::string& url,
const std::filesystem::path& destinationPath) :
url_ {url}, destinationPath_ {destinationPath}
{
}
~Impl() = default;
const std::string url_;
const std::filesystem::path destinationPath_;
bool canceled_ = false;
};
DownloadRequest::DownloadRequest(const std::string& url,
const std::filesystem::path& destinationPath) :
p(std::make_unique<Impl>(url, destinationPath))
{
}
DownloadRequest::~DownloadRequest() = default;
const std::string& DownloadRequest::url() const
{
return p->url_;
}
const std::filesystem::path& DownloadRequest::destination_path() const
{
return p->destinationPath_;
}
void DownloadRequest::Cancel()
{
p->canceled_ = true;
}
bool DownloadRequest::IsCanceled() const
{
return p->canceled_;
}
} // namespace request
} // namespace qt
} // namespace scwx

View file

@ -0,0 +1,51 @@
#pragma once
#include <filesystem>
#include <memory>
#include <QObject>
namespace scwx
{
namespace qt
{
namespace request
{
class DownloadRequest : public QObject
{
Q_OBJECT
public:
enum class CompleteReason
{
OK,
Canceled,
IOError,
RemoteError
};
explicit DownloadRequest(const std::string& url,
const std::filesystem::path& destinationPath);
~DownloadRequest();
const std::string& url() const;
const std::filesystem::path& destination_path() const;
void Cancel();
bool IsCanceled() const;
private:
class Impl;
std::unique_ptr<Impl> p;
signals:
void ProgressUpdated(std::ptrdiff_t downloadedBytes,
std::ptrdiff_t totalBytes);
void RequestComplete(CompleteReason reason);
};
} // namespace request
} // namespace qt
} // namespace scwx