return NULL;
}
+static time_t pakfire_progressbar_elapsed_time(struct pakfire_progressbar* p) {
+ struct timespec now;
+
+ int r = clock_gettime(CLOCK_MONOTONIC, &now);
+ if (r)
+ return r;
+
+ return now.tv_sec - p->time_start.tv_sec;
+}
+
int pakfire_progressbar_start(struct pakfire_progressbar* p, unsigned long value) {
if (p->status != PAKFIRE_PROGRESSBAR_INIT)
return EINVAL;
STAILQ_FOREACH(widget, &p->widgets, nodes) {
const char* element = elements[i];
- if (!widget->expandable) {
+ if (widget->expandable) {
element = widget->print(p, widget, width, widget->data);
}
}
int pakfire_progressbar_add_bar(struct pakfire_progressbar* p) {
- return pakfire_progressbar_add_widget(p, pakfire_progressbar_bar, NULL, 0, NULL);
+ return pakfire_progressbar_add_widget(p, pakfire_progressbar_bar, NULL, 1, NULL);
+}
+
+// Timer
+
+const char* pakfire_progressbar_timer(struct pakfire_progressbar* p,
+ struct pakfire_progressbar_widget* widget, unsigned int width, void* data) {
+ time_t t = pakfire_progressbar_elapsed_time(p);
+ if (t < 0)
+ return NULL;
+
+ int r = snprintf(widget->buffer, sizeof(widget->buffer), "%02lu:%02lu", t / 60, t % 60);
+ if (r < 0)
+ return NULL;
+
+ return widget->buffer;
+}
+
+int pakfire_progressbar_add_timer(struct pakfire_progressbar* p) {
+ return pakfire_progressbar_add_widget(p, pakfire_progressbar_timer, NULL, 0, NULL);
}