From 4c52178626ac72a70c43f5072cb073feec43b9c6 Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Sat, 20 Jan 2024 21:32:43 +0100 Subject: [PATCH] feat: fancy spinner, plus some refactoring --- src/dwarfs/console_writer.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/dwarfs/console_writer.cpp b/src/dwarfs/console_writer.cpp index c81ec175..c5085bda 100644 --- a/src/dwarfs/console_writer.cpp +++ b/src/dwarfs/console_writer.cpp @@ -21,6 +21,7 @@ #include #include +#include #include @@ -38,11 +39,20 @@ namespace dwarfs { namespace { -constexpr std::array asc_bar{ +constexpr std::array asc_bar{ {"=", "=", "=", "=", "=", "=", "=", "="}}; -constexpr std::array uni_bar{ +constexpr std::array uni_bar{ {"▏", "▎", "▍", "▌", "▋", "▊", "▉", "█"}}; +constexpr std::array asc_spinner_def{ + {"-", "\\", "|", "/"}}; + +constexpr std::array uni_spinner_def{ + {"🌑", "🌒", "🌓", "🌔", "🌕", "🌖", "🌗", "🌘"}}; + +constexpr std::span asc_spinner{asc_spinner_def}; +constexpr std::span uni_spinner{uni_spinner_def}; + std::string progress_bar(size_t width, double frac, bool unicode) { size_t barlen = 8 * width * frac; size_t w = barlen / 8; @@ -318,10 +328,11 @@ void console_writer::update(progress& p, bool last) { } } else { auto w = width.get(); + auto spinner{pg_mode_ == UNICODE ? uni_spinner : asc_spinner}; - oss << progress_bar(w - 6, frac_, pg_mode_ == UNICODE) - << fmt::format("{:3.0f}% ", 100 * frac_) << "-\\|/"[counter_ % 4] - << '\n'; + oss << progress_bar(w - 8, frac_, pg_mode_ == UNICODE) + << fmt::format("{:3.0f}% ", 100 * frac_) + << spinner[counter_ % spinner.size()] << '\n'; ++counter_;