Current section
Files
Jump to
Current section
Files
lib/progress_bar/indeterminate.ex
defmodule ProgressBar.Indeterminate do
@default_format [
bars: ["=---", "-=--", "--=-", "---="],
done: "=",
left: "|",
right: "|",
bars_color: [],
done_color: [],
interval: 500,
width: :auto,
]
def render(custom_format \\ @default_format, fun) do
format = Keyword.merge(@default_format, custom_format)
config = [
interval: format[:interval],
render_frame: fn (count) -> render_frame(format, count) end,
render_done: fn -> render_done(format) end,
]
ProgressBar.AnimationServer.start(config)
value = fun.()
ProgressBar.AnimationServer.stop
value
end
defp render_frame(format, count) do
parts = format[:bars]
index = rem(count, length(parts))
part = Enum.at(parts, index)
ProgressBar.BarFormatter.write(
format,
{part, format[:bars_color]},
""
)
end
defp render_done(format) do
ProgressBar.BarFormatter.write(
format,
{format[:done], format[:done_color]},
"\n"
)
end
end