56 std::unique_lock lock{d_mutex};
57 if (d_progress > 100.0f) {
60 os <<
"\r" << std::flush;
62 const auto completed =
static_cast<size_t>(
63 d_progress *
static_cast<float>(d_bar_width) / 100.0);
64 for (
size_t i = 0; i < d_bar_width; ++i) {
74 auto currTime = std::chrono::system_clock::now();
75 std::chrono::duration<double> elapsed = currTime - d_startTime;
76 std::chrono::duration<double> totToDo = elapsed / (d_progress / 100.0);
79 std::chrono::duration_cast<std::chrono::system_clock::duration>(
83 std::time_t finish_time_t =
84 std::chrono::system_clock::to_time_t(projFinish);
89 localtime_s(&local_tm, &finish_time_t);
91 localtime_r(&finish_time_t, &local_tm);
93 std::string fmt =
"%H:%M %a";
94 static constexpr std::int64_t weekSecs = 7 * 24 * 3600;
95 if (std::chrono::duration_cast<std::chrono::seconds>(totToDo).count() >
100 os <<
" " << std::min(
static_cast<size_t>(d_progress),
size_t(100)) <<
"%"
101 <<
" " << d_done <<
"/" << d_numToDo <<
" "
102 << std::put_time(&local_tm, fmt.c_str()) << std::flush;