1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "../cache.h" 2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "../progress.h" 3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "../libslang.h" 4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "../ui.h" 5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "../browser.h" 6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic void tui_progress__update(u64 curr, u64 total, const char *title) 8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng int bar, y; 10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * FIXME: We should have a per UI backend way of showing progress, 12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * stdio will just show a percentage as NN%, etc. 13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (use_browser <= 0) 15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return; 16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (total == 0) 18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return; 19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ui__refresh_dimensions(true); 21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng pthread_mutex_lock(&ui__lock); 22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng y = SLtt_Screen_Rows / 2 - 2; 23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng SLsmg_set_color(0); 24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng SLsmg_draw_box(y, 0, 3, SLtt_Screen_Cols); 25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng SLsmg_gotorc(y++, 1); 26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng SLsmg_write_string((char *)title); 27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng SLsmg_set_color(HE_COLORSET_SELECTED); 28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng bar = ((SLtt_Screen_Cols - 2) * curr) / total; 29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng SLsmg_fill_region(y, 1, 1, bar, ' '); 30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng SLsmg_refresh(); 31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng pthread_mutex_unlock(&ui__lock); 32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic struct ui_progress tui_progress_fns = 35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .update = tui_progress__update, 37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengvoid ui_progress__init(void) 40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng progress_fns = &tui_progress_fns; 42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 43