From: Michael Tremer Date: Sat, 10 Apr 2021 16:21:11 +0000 (+0000) Subject: progressbar: Make it resettable X-Git-Tag: 0.9.28~1285^2~376 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=54a1a4f2cf8f66b567e8b0352bb19762350e668d;p=pakfire.git progressbar: Make it resettable Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/include/pakfire/progressbar.h b/src/libpakfire/include/pakfire/progressbar.h index 2242cb161..9e99674ff 100644 --- a/src/libpakfire/include/pakfire/progressbar.h +++ b/src/libpakfire/include/pakfire/progressbar.h @@ -39,6 +39,9 @@ int pakfire_progressbar_start(struct pakfire_progressbar* p, unsigned long value int pakfire_progressbar_update(struct pakfire_progressbar* p, unsigned long value); int pakfire_progressbar_increment(struct pakfire_progressbar* p); int pakfire_progressbar_finish(struct pakfire_progressbar* p); +int pakfire_progressbar_reset(struct pakfire_progressbar* p); + +void pakfire_progressbar_set_max(struct pakfire_progressbar* p, unsigned long value); int pakfire_progressbar_add_string(struct pakfire_progressbar* p, const char* format, ...); int pakfire_progressbar_add_counter(struct pakfire_progressbar* p); diff --git a/src/libpakfire/progressbar.c b/src/libpakfire/progressbar.c index 8793f5c8c..318f02942 100644 --- a/src/libpakfire/progressbar.c +++ b/src/libpakfire/progressbar.c @@ -116,7 +116,7 @@ static void pakfire_progressbar_widget_free(struct pakfire_progressbar_widget* w free(widget); } -static void pakfire_progressbar_free(struct pakfire_progressbar* p) { +static void pakfire_progressbar_free_widgets(struct pakfire_progressbar* p) { struct pakfire_progressbar_widget* widget; // Free widgets @@ -126,7 +126,10 @@ static void pakfire_progressbar_free(struct pakfire_progressbar* p) { pakfire_progressbar_widget_free(widget); } +} +static void pakfire_progressbar_free(struct pakfire_progressbar* p) { + pakfire_progressbar_free_widgets(p); pakfire_unref(p->pakfire); free(p); } @@ -196,11 +199,8 @@ int pakfire_progressbar_start(struct pakfire_progressbar* p, unsigned long value // Set status p->status = PAKFIRE_PROGRESSBAR_RUNNING; - // Store maximum value - p->value_max = value; - - // Redraw immediately - p->value_redraw = 0; + // Set maximum value + pakfire_progressbar_set_max(p, value); // Set start time int r = clock_gettime(CLOCK_MONOTONIC, &p->time_start); @@ -250,6 +250,31 @@ int pakfire_progressbar_finish(struct pakfire_progressbar* p) { return 0; } +int pakfire_progressbar_reset(struct pakfire_progressbar* p) { + // Free all widgets + pakfire_progressbar_free_widgets(p); + + // Reset all values + p->value = 0; + p->value_max = 0; + p->value_redraw = 0; + p->update_interval = 0; + p->time_start.tv_sec = 0; + p->time_start.tv_nsec = 0; + p->time_redraw.tv_sec = 0; + p->time_redraw.tv_nsec = 0; + + return 0; +} + +void pakfire_progressbar_set_max(struct pakfire_progressbar* p, unsigned long value) { + // Store maximum value + p->value_max = value; + + // Redraw immediately + p->value_redraw = 0; +} + static int pakfire_progressbar_add_widget(struct pakfire_progressbar* p, const char* (*print)(struct pakfire_progressbar* p, struct pakfire_progressbar_widget* widget, unsigned int width, void* data),