reapack

Package manager for REAPER
Log | Files | Refs | Submodules | README | LICENSE

commit ae39774f819e7493acee31f777fa03a533164a54
parent 62690cd8cc894565e53cb4bd26855c2df89c74d0
Author: cfillion <cfillion@users.noreply.github.com>
Date:   Sun, 26 Feb 2017 20:34:37 -0500

download: split the content buffer from the error message buffer

Diffstat:
Msrc/download.cpp | 12++----------
Msrc/import.cpp | 2+-
Msrc/thread.cpp | 7+++++++
Msrc/thread.hpp | 5+++++
Msrc/transaction.cpp | 2+-
5 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/src/download.cpp b/src/download.cpp @@ -122,12 +122,6 @@ void Download::start() void Download::run(DownloadContext *ctx) { - const auto finish = [&](const State state, const string &contents) { - m_contents = contents; - - ThreadNotifier::get()->notify({this, state}); - }; - if(aborted()) { finish(Aborted, "cancelled"); return; @@ -135,8 +129,6 @@ void Download::run(DownloadContext *ctx) ThreadNotifier::get()->notify({this, Running}); - string contents; - curl_easy_setopt(ctx->m_curl, CURLOPT_URL, m_url.c_str()); curl_easy_setopt(ctx->m_curl, CURLOPT_PROXY, m_opts.proxy.c_str()); curl_easy_setopt(ctx->m_curl, CURLOPT_SSL_VERIFYPEER, m_opts.verifyPeer); @@ -145,7 +137,7 @@ void Download::run(DownloadContext *ctx) curl_easy_setopt(ctx->m_curl, CURLOPT_PROGRESSDATA, this); curl_easy_setopt(ctx->m_curl, CURLOPT_WRITEFUNCTION, WriteData); - curl_easy_setopt(ctx->m_curl, CURLOPT_WRITEDATA, &contents); + curl_easy_setopt(ctx->m_curl, CURLOPT_WRITEDATA, &m_contents); curl_slist *headers = nullptr; if(has(Download::NoCacheFlag)) @@ -164,7 +156,7 @@ void Download::run(DownloadContext *ctx) finish(Failure, err.str()); } else - finish(Success, contents); + finish(Success); curl_slist_free_all(headers); } diff --git a/src/import.cpp b/src/import.cpp @@ -106,7 +106,7 @@ void Import::fetch() setWaiting(false); if(state != Download::Success) { - const string msg = "Download failed: " + dl->contents(); + const string msg = "Download failed: " + dl->errorString(); MessageBox(handle(), make_autostring(msg).c_str(), TITLE, MB_OK); SetFocus(m_url); return; diff --git a/src/thread.cpp b/src/thread.cpp @@ -55,6 +55,13 @@ void ThreadTask::setState(const State state) } } +void ThreadTask::finish(const State state, const string &error) +{ + m_errorString = error; + + ThreadNotifier::get()->notify({this, state}); +}; + WorkerThread::WorkerThread() : m_exit(false) { m_wake = CreateEvent(nullptr, true, false, AUTO_STR("WakeEvent")); diff --git a/src/thread.hpp b/src/thread.hpp @@ -56,6 +56,7 @@ public: void setState(State); State state() const { return m_state; } + const std::string &errorString() { return m_errorString; } void onStart(const VoidSignal::slot_type &slot) { m_onStart.connect(slot); } void onFinish(const VoidSignal::slot_type &slot) { m_onFinish.connect(slot); } @@ -64,8 +65,12 @@ public: bool aborted() const { return m_abort; } void abort() { m_abort = true; } +protected: + void finish(State, const std::string &errorString = {}); + private: State m_state; + std::string m_errorString; std::atomic_bool m_abort; VoidSignal m_onStart; diff --git a/src/transaction.cpp b/src/transaction.cpp @@ -172,7 +172,7 @@ void Transaction::uninstall(const Registry::Entry &entry) bool Transaction::saveFile(Download *dl, const Path &path) { if(dl->state() != Download::Success) { - m_receipt.addError({dl->contents(), dl->url()}); + m_receipt.addError({dl->errorString(), dl->url()}); return false; }