17da5c85dSNamhyung Kim #include "../cache.h" 27da5c85dSNamhyung Kim #include "../progress.h" 37da5c85dSNamhyung Kim #include "../libslang.h" 47da5c85dSNamhyung Kim #include "../ui.h" 54779a2e9SArnaldo Carvalho de Melo #include "tui.h" 67da5c85dSNamhyung Kim #include "../browser.h" 77da5c85dSNamhyung Kim 825cc4eb4SJiri Olsa static void __tui_progress__init(struct ui_progress *p) 925cc4eb4SJiri Olsa { 1025cc4eb4SJiri Olsa p->next = p->step = p->total / (SLtt_Screen_Cols - 2) ?: 1; 1125cc4eb4SJiri Olsa } 1225cc4eb4SJiri Olsa 134d3001fdSArnaldo Carvalho de Melo static void tui_progress__update(struct ui_progress *p) 147da5c85dSNamhyung Kim { 157da5c85dSNamhyung Kim int bar, y; 167da5c85dSNamhyung Kim /* 177da5c85dSNamhyung Kim * FIXME: We should have a per UI backend way of showing progress, 187da5c85dSNamhyung Kim * stdio will just show a percentage as NN%, etc. 197da5c85dSNamhyung Kim */ 207da5c85dSNamhyung Kim if (use_browser <= 0) 217da5c85dSNamhyung Kim return; 227da5c85dSNamhyung Kim 234d3001fdSArnaldo Carvalho de Melo if (p->total == 0) 247da5c85dSNamhyung Kim return; 257da5c85dSNamhyung Kim 26d53e57d0SPatrick Palka ui__refresh_dimensions(false); 277da5c85dSNamhyung Kim pthread_mutex_lock(&ui__lock); 287da5c85dSNamhyung Kim y = SLtt_Screen_Rows / 2 - 2; 297da5c85dSNamhyung Kim SLsmg_set_color(0); 307da5c85dSNamhyung Kim SLsmg_draw_box(y, 0, 3, SLtt_Screen_Cols); 317da5c85dSNamhyung Kim SLsmg_gotorc(y++, 1); 324d3001fdSArnaldo Carvalho de Melo SLsmg_write_string((char *)p->title); 33d53e57d0SPatrick Palka SLsmg_fill_region(y, 1, 1, SLtt_Screen_Cols - 2, ' '); 347da5c85dSNamhyung Kim SLsmg_set_color(HE_COLORSET_SELECTED); 354d3001fdSArnaldo Carvalho de Melo bar = ((SLtt_Screen_Cols - 2) * p->curr) / p->total; 367da5c85dSNamhyung Kim SLsmg_fill_region(y, 1, 1, bar, ' '); 377da5c85dSNamhyung Kim SLsmg_refresh(); 387da5c85dSNamhyung Kim pthread_mutex_unlock(&ui__lock); 397da5c85dSNamhyung Kim } 40688f2f5bSNamhyung Kim 411e259ad4SArnaldo Carvalho de Melo static void tui_progress__finish(void) 421e259ad4SArnaldo Carvalho de Melo { 431e259ad4SArnaldo Carvalho de Melo int y; 441e259ad4SArnaldo Carvalho de Melo 451e259ad4SArnaldo Carvalho de Melo if (use_browser <= 0) 461e259ad4SArnaldo Carvalho de Melo return; 471e259ad4SArnaldo Carvalho de Melo 481e259ad4SArnaldo Carvalho de Melo ui__refresh_dimensions(false); 491e259ad4SArnaldo Carvalho de Melo pthread_mutex_lock(&ui__lock); 501e259ad4SArnaldo Carvalho de Melo y = SLtt_Screen_Rows / 2 - 2; 511e259ad4SArnaldo Carvalho de Melo SLsmg_set_color(0); 521e259ad4SArnaldo Carvalho de Melo SLsmg_fill_region(y, 0, 3, SLtt_Screen_Cols, ' '); 531e259ad4SArnaldo Carvalho de Melo SLsmg_refresh(); 541e259ad4SArnaldo Carvalho de Melo pthread_mutex_unlock(&ui__lock); 551e259ad4SArnaldo Carvalho de Melo } 561e259ad4SArnaldo Carvalho de Melo 5725cc4eb4SJiri Olsa static struct ui_progress_ops tui_progress__ops = { 5825cc4eb4SJiri Olsa .init = __tui_progress__init, 59688f2f5bSNamhyung Kim .update = tui_progress__update, 601e259ad4SArnaldo Carvalho de Melo .finish = tui_progress__finish, 61688f2f5bSNamhyung Kim }; 62688f2f5bSNamhyung Kim 634779a2e9SArnaldo Carvalho de Melo void tui_progress__init(void) 64688f2f5bSNamhyung Kim { 654779a2e9SArnaldo Carvalho de Melo ui_progress__ops = &tui_progress__ops; 66688f2f5bSNamhyung Kim } 67