commit 36998c591f413a0e695c816fc3fc82a2d34676a6
parent a62322619e54179eb487e0b8404329e7dfb643cb
Author: cfillion <cfillion@users.noreply.github.com>
Date: Wed, 16 Dec 2015 13:52:51 -0500
split the onFinish and onDestroy events, to help prevent future bugs
Diffstat:
5 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/src/download.cpp b/src/download.cpp
@@ -184,6 +184,7 @@ void Download::finishInMainThread()
}
m_onFinish();
+ m_onDestroy();
}
bool Download::isFinished()
@@ -216,13 +217,16 @@ void DownloadQueue::push(Download *dl)
{
m_onPush(dl);
- dl->onFinish([=]() {
+ dl->onFinish([=] {
m_running.erase(remove(m_running.begin(), m_running.end(), dl));
- delete dl;
start();
});
+ dl->onDestroy([=] {
+ delete dl;
+ });
+
m_queue.push(dl);
start();
diff --git a/src/download.hpp b/src/download.hpp
@@ -29,6 +29,7 @@ public:
void onStart(const Callback &callback) { m_onStart.connect(callback); }
void onFinish(const Callback &callback) { m_onFinish.connect(callback); }
+ void onDestroy(const Callback &callback) { m_onDestroy.connect(callback); }
void start();
void abort();
@@ -63,6 +64,7 @@ private:
Signal m_onStart;
Signal m_onFinish;
+ Signal m_onDestroy;
};
class DownloadQueue {
diff --git a/src/reapack.cpp b/src/reapack.cpp
@@ -163,15 +163,15 @@ Transaction *ReaPack::createTransaction()
m_progress->setEnabled(true);
m_progress->hide();
+
+ m_config->write();
});
- m_transaction->onFinish([=] {
+ m_transaction->onDestroy([=] {
m_progress->setTransaction(nullptr);
delete m_transaction;
m_transaction = nullptr;
-
- m_config->write();
});
return m_transaction;
diff --git a/src/transaction.cpp b/src/transaction.cpp
@@ -160,6 +160,7 @@ void Transaction::finish()
}
m_onFinish();
+ m_onDestroy();
}
void Transaction::addError(const string &message, const string &title)
diff --git a/src/transaction.hpp b/src/transaction.hpp
@@ -31,6 +31,7 @@ public:
void onReady(const Callback &callback) { m_onReady.connect(callback); }
void onFinish(const Callback &callback) { m_onFinish.connect(callback); }
+ void onDestroy(const Callback &callback) { m_onDestroy.connect(callback); }
void fetch(const RemoteMap &);
void fetch(const Remote &);
@@ -76,6 +77,7 @@ private:
Signal m_onReady;
Signal m_onFinish;
+ Signal m_onDestroy;
};
#endif