diff options
author | bogdasar1985 <bogdasar1985@gmail.com> | 2023-10-11 15:24:03 +0500 |
---|---|---|
committer | Dennis van der Schagt <dennisschagt@gmail.com> | 2024-04-05 01:01:16 +0200 |
commit | be9f60b03c3e0a7394d634cfa2eb4010db26604d (patch) | |
tree | 64894e49184e8b0042ec6950b05a4f87307dde43 | |
parent | d994dc918b9a0fcfa9d06dee94ca67e29886478c (diff) |
Migrate Download to Filepath
-rw-r--r-- | include/download.h | 12 | ||||
-rw-r--r-- | src/download.cpp | 45 | ||||
-rw-r--r-- | src/poddlthread.cpp | 5 | ||||
-rw-r--r-- | src/queueloader.cpp | 2 |
4 files changed, 49 insertions, 15 deletions
diff --git a/include/download.h b/include/download.h index 56474b1e..5061acd0 100644 --- a/include/download.h +++ b/include/download.h @@ -4,6 +4,8 @@ #include <functional> #include <string> +#include "filepath.h" + namespace podboat { enum class DlStatus { @@ -23,6 +25,8 @@ class Download { public: explicit Download(std::function<void()> cb_require_view_update); ~Download(); + Download(const Download& download); + Download& operator=(const Download& download); double percents_finished() const; const std::string status_text() const; DlStatus status() const @@ -33,10 +37,10 @@ public: { return msg; } - const std::string filename() const; - const std::string basename() const; + const newsboat::Filepath filename() const; + const newsboat::Filepath basename() const; const std::string url() const; - void set_filename(const std::string& str); + void set_filename(const newsboat::Filepath& str); void set_url(const std::string& url); void set_progress(double downloaded, double total); void set_status(DlStatus dls, const std::string& msg_ = {}); @@ -54,7 +58,7 @@ public: } private: - std::string fn; + newsboat::Filepath fn; std::string url_; DlStatus download_status; std::string msg; diff --git a/src/download.cpp b/src/download.cpp index 89534b7d..097a5d05 100644 --- a/src/download.cpp +++ b/src/download.cpp @@ -24,19 +24,48 @@ Download::Download(std::function<void()> cb_require_view_update_) Download::~Download() {} -const std::string Download::filename() const +Download::Download(const Download& download) : + url_(download.url_), + download_status(download.download_status), + msg(download.msg), + cursize(download.cursize), + totalsize(download.totalsize), + curkbps(download.curkbps), + offs(download.offs), + cb_require_view_update(download.cb_require_view_update) { - return fn; + fn = download.fn.clone(); } -const std::string Download::basename() const +Download& Download::operator=(const Download& download) { - std::string::size_type start = fn.rfind(NEWSBEUTER_PATH_SEP); + if (this == &download) { + return *this; + } + url_ = download.url_; + download_status = download.download_status; + msg = download.msg; + cursize = download.cursize; + totalsize = download.totalsize; + curkbps = download.curkbps; + offs = download.offs; + fn = download.fn.clone(); + return *this; +} + +const newsboat::Filepath Download::filename() const +{ + return fn.clone(); +} + +const newsboat::Filepath Download::basename() const +{ + std::string::size_type start = fn.to_locale_string().rfind(NEWSBEUTER_PATH_SEP); if (start != std::string::npos) { - return fn.substr(start+1); + return fn.to_locale_string().substr(start+1); } - return fn; + return fn.clone(); } const std::string Download::url() const @@ -44,9 +73,9 @@ const std::string Download::url() const return url_; } -void Download::set_filename(const std::string& str) +void Download::set_filename(const newsboat::Filepath& str) { - fn = str; + fn = str.clone(); } double Download::percents_finished() const diff --git a/src/poddlthread.cpp b/src/poddlthread.cpp index e3cdc7d3..e3a9a9eb 100644 --- a/src/poddlthread.cpp +++ b/src/poddlthread.cpp @@ -75,7 +75,7 @@ void PodDlThread::run() struct stat sb; Filepath filename = - dl->filename() + newsboat::ConfigContainer::PARTIAL_FILE_SUFFIX; + dl->filename().join(newsboat::ConfigContainer::PARTIAL_FILE_SUFFIX); if (stat(filename.to_locale_string().c_str(), &sb) == -1) { LOG(Level::INFO, @@ -122,7 +122,8 @@ void PodDlThread::run() LOG(Level::DEBUG, "PodDlThread::run: download complete, deleting " "temporary suffix"); - if (rename(filename.to_locale_string().c_str(), dl->filename().c_str()) == 0) { + if (rename(filename.to_locale_string().c_str(), + dl->filename().to_locale_string().c_str()) == 0) { dl->set_status(DlStatus::READY); } else { dl->set_status(DlStatus::RENAME_FAILED, strerror(errno)); diff --git a/src/queueloader.cpp b/src/queueloader.cpp index dd713365..f4767d37 100644 --- a/src/queueloader.cpp +++ b/src/queueloader.cpp @@ -243,7 +243,7 @@ void QueueLoader::delete_played_files(const CategorizedDownloads& downloads) const { for (const auto& dl : downloads.to_delete) { - const Filepath filename = dl.filename(); + const Filepath filename = dl.filename().clone(); LOG(Level::INFO, "Deleting file %s", filename); if (std::remove(filename.to_locale_string().c_str()) != 0) { if (errno != ENOENT) { |