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:
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;
}