 34cea7f7c0
			
		
	
	
	34cea7f7c0
	
	
	
		
			
			LKML-Reference: <new-submission> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
		
			
				
	
	
		
			60 lines
		
	
	
	
		
			1.2 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
	
		
			1.2 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| #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);
 | |
| }
 |