convey icon indicating copy to clipboard operation
convey copied to clipboard

Support progress bars

Open killercup opened this issue 7 years ago • 4 comments

  • [ ] Render and update a progress bar for humans
    • will probably need to return something non-() from Output::print
  • [ ] Render other stuff above it while progress bar is visible
  • [ ] Render usable stuff to JSON (e.g. a 'tick' with current state each n seconds)

killercup avatar Oct 05 '18 19:10 killercup

Termcolor doesn't support advanced Windows stuff. We might be able to use some of what console does, though.

killercup avatar Oct 08 '18 19:10 killercup

Some notes from talking with @waywardmonkeys:

  • Output "records" can have different types
    • additive
    • replacing
  • Replacing works by supplying the UUID of the record to replace
    • introduce records that have UUIDs
    • track them in the output to be able to replace them
    • not all output media will be able to do replacements, e.g. json streams
  • Maybe the replacement mechanism is part of the layout (cf. #3), e.g. in a layout with "additive on top", "replaceable progressbar sticky at the bottom"

killercup avatar Nov 05 '18 08:11 killercup

This will require some more refactoring and design work before I'm happy with the API. Currently, my idea was to have something like

output.progress(convey::Progress::bar(i, 10).message(msg));

which would always replace the current progress bar. (Something like convey::Progress::none() would remove it.)

I think we should go one step further, though, and also help with managing the state of the progress bar in between calls. Maybe even have an iterator adapter to quickly update the progress bar in an iterator chain.

My experiments so far have been just that, experiments. I'll try to write more of this down in the future, and come up with more test cases to evaluate a design against.

killercup avatar Dec 31 '18 12:12 killercup