• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <stdlib.h>
2 #include <newt.h>
3 #include "../cache.h"
4 #include "progress.h"
5 
6 struct ui_progress {
7 	newtComponent form, scale;
8 };
9 
ui_progress__new(const char * title,u64 total)10 struct ui_progress *ui_progress__new(const char *title, u64 total)
11 {
12 	struct ui_progress *self = malloc(sizeof(*self));
13 
14 	if (self != NULL) {
15 		int cols;
16 
17 		if (use_browser <= 0)
18 			return self;
19 		newtGetScreenSize(&cols, NULL);
20 		cols -= 4;
21 		newtCenteredWindow(cols, 1, title);
22 		self->form  = newtForm(NULL, NULL, 0);
23 		if (self->form == NULL)
24 			goto out_free_self;
25 		self->scale = newtScale(0, 0, cols, total);
26 		if (self->scale == NULL)
27 			goto out_free_form;
28 		newtFormAddComponent(self->form, self->scale);
29 		newtRefresh();
30 	}
31 
32 	return self;
33 
34 out_free_form:
35 	newtFormDestroy(self->form);
36 out_free_self:
37 	free(self);
38 	return NULL;
39 }
40 
ui_progress__update(struct ui_progress * self,u64 curr)41 void ui_progress__update(struct ui_progress *self, u64 curr)
42 {
43 	/*
44 	 * FIXME: We should have a per UI backend way of showing progress,
45 	 * stdio will just show a percentage as NN%, etc.
46 	 */
47 	if (use_browser <= 0)
48 		return;
49 	newtScaleSet(self->scale, curr);
50 	newtRefresh();
51 }
52 
ui_progress__delete(struct ui_progress * self)53 void ui_progress__delete(struct ui_progress *self)
54 {
55 	if (use_browser > 0) {
56 		newtFormDestroy(self->form);
57 		newtPopWindow();
58 	}
59 	free(self);
60 }
61