libmain/progress-bar: move implementation out of the header

Change-Id: Ib4b42ebea290ee575294df6b2f17a38a5d850b80
This commit is contained in:
Alois Wohlschlager 2024-06-24 18:26:05 +02:00
parent d86009bd76
commit 206a5dbb8f
No known key found for this signature in database
GPG key ID: E0F59EA5E5216914
2 changed files with 21 additions and 20 deletions

View file

@ -13,6 +13,11 @@
namespace nix { namespace nix {
// 100 years ought to be enough for anyone (yet sufficiently smaller than max() to not cause signed integer overflow).
constexpr const auto A_LONG_TIME = std::chrono::duration_cast<std::chrono::milliseconds>(
100 * 365 * std::chrono::seconds(86400)
);
using namespace std::literals::chrono_literals; using namespace std::literals::chrono_literals;
static std::string_view getS(const std::vector<Logger::Field> & fields, size_t n) static std::string_view getS(const std::vector<Logger::Field> & fields, size_t n)
@ -36,6 +41,21 @@ static std::string_view storePathToName(std::string_view path)
return i == std::string::npos ? base.substr(0, 0) : base.substr(i + 1); return i == std::string::npos ? base.substr(0, 0) : base.substr(i + 1);
} }
ProgressBar::ProgressBar(bool isTTY)
: isTTY(isTTY)
{
state_.lock()->active = isTTY;
updateThread = std::thread([&]() {
auto state(state_.lock());
auto nextWakeup = A_LONG_TIME;
while (state->active) {
if (!state->haveUpdate)
state.wait_for(updateCV, nextWakeup);
nextWakeup = draw(*state, {});
state.wait_for(quitCV, std::chrono::milliseconds(50));
}
});
}
ProgressBar::~ProgressBar() ProgressBar::~ProgressBar()
{ {

View file

@ -8,11 +8,6 @@
namespace nix { namespace nix {
// 100 years ought to be enough for anyone (yet sufficiently smaller than max() to not cause signed integer overflow).
constexpr const auto A_LONG_TIME = std::chrono::duration_cast<std::chrono::milliseconds>(
100 * 365 * std::chrono::seconds(86400)
);
struct ProgressBar : public Logger struct ProgressBar : public Logger
{ {
struct ActInfo struct ActInfo
@ -68,21 +63,7 @@ struct ProgressBar : public Logger
bool printMultiline = false; bool printMultiline = false;
bool isTTY; bool isTTY;
ProgressBar(bool isTTY) ProgressBar(bool isTTY);
: isTTY(isTTY)
{
state_.lock()->active = isTTY;
updateThread = std::thread([&]() {
auto state(state_.lock());
auto nextWakeup = A_LONG_TIME;
while (state->active) {
if (!state->haveUpdate)
state.wait_for(updateCV, nextWakeup);
nextWakeup = draw(*state, {});
state.wait_for(quitCV, std::chrono::milliseconds(50));
}
});
}
~ProgressBar(); ~ProgressBar();