| #include <stdlib.h> | 
 | #include <newt.h> | 
 | #include "../cache.h" | 
 | #include "progress.h" | 
 |  | 
 | struct ui_progress { | 
 | 	newtComponent form, scale; | 
 | }; | 
 |  | 
 | struct ui_progress *ui_progress__new(const char *title, u64 total) | 
 | { | 
 | 	struct ui_progress *self = malloc(sizeof(*self)); | 
 |  | 
 | 	if (self != NULL) { | 
 | 		int cols; | 
 |  | 
 | 		if (use_browser <= 0) | 
 | 			return self; | 
 | 		newtGetScreenSize(&cols, NULL); | 
 | 		cols -= 4; | 
 | 		newtCenteredWindow(cols, 1, title); | 
 | 		self->form  = newtForm(NULL, NULL, 0); | 
 | 		if (self->form == NULL) | 
 | 			goto out_free_self; | 
 | 		self->scale = newtScale(0, 0, cols, total); | 
 | 		if (self->scale == NULL) | 
 | 			goto out_free_form; | 
 | 		newtFormAddComponent(self->form, self->scale); | 
 | 		newtRefresh(); | 
 | 	} | 
 |  | 
 | 	return self; | 
 |  | 
 | out_free_form: | 
 | 	newtFormDestroy(self->form); | 
 | out_free_self: | 
 | 	free(self); | 
 | 	return NULL; | 
 | } | 
 |  | 
 | void ui_progress__update(struct ui_progress *self, u64 curr) | 
 | { | 
 | 	/* | 
 | 	 * FIXME: We should have a per UI backend way of showing progress, | 
 | 	 * stdio will just show a percentage as NN%, etc. | 
 | 	 */ | 
 | 	if (use_browser <= 0) | 
 | 		return; | 
 | 	newtScaleSet(self->scale, curr); | 
 | 	newtRefresh(); | 
 | } | 
 |  | 
 | void ui_progress__delete(struct ui_progress *self) | 
 | { | 
 | 	if (use_browser > 0) { | 
 | 		newtFormDestroy(self->form); | 
 | 		newtPopWindow(); | 
 | 	} | 
 | 	free(self); | 
 | } |