mirror of
https://git.proxmox.com/git/fwupd
synced 2025-08-13 05:45:21 +00:00
fixups
This commit is contained in:
parent
09774dd90b
commit
a913bcd271
@ -26,6 +26,7 @@ struct _FuProgressbar
|
|||||||
guint timer_id;
|
guint timer_id;
|
||||||
gint64 last_animated; /* monotonic */
|
gint64 last_animated; /* monotonic */
|
||||||
GTimer *time_elapsed;
|
GTimer *time_elapsed;
|
||||||
|
gdouble last_estimate;
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE (FuProgressbar, fu_progressbar, G_TYPE_OBJECT)
|
G_DEFINE_TYPE (FuProgressbar, fu_progressbar, G_TYPE_OBJECT)
|
||||||
@ -98,6 +99,23 @@ fu_progressbar_erase_line (FuProgressbar *self)
|
|||||||
self->to_erase = 0;
|
self->to_erase = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
fu_progressbar_estimate_ready (FuProgressbar *self, guint percentage)
|
||||||
|
{
|
||||||
|
gdouble old;
|
||||||
|
gdouble elapsed;
|
||||||
|
|
||||||
|
if (percentage == 0 || percentage == 100)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
old = self->last_estimate;
|
||||||
|
elapsed = g_timer_elapsed (self->time_elapsed, NULL);
|
||||||
|
self->last_estimate = elapsed / percentage * (100 - percentage);
|
||||||
|
|
||||||
|
/* estimate is ready if we have decreased */
|
||||||
|
return old > self->last_estimate;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fu_progressbar_refresh (FuProgressbar *self, FwupdStatus status, guint percentage)
|
fu_progressbar_refresh (FuProgressbar *self, FwupdStatus status, guint percentage)
|
||||||
{
|
{
|
||||||
@ -105,7 +123,6 @@ fu_progressbar_refresh (FuProgressbar *self, FwupdStatus status, guint percentag
|
|||||||
guint i;
|
guint i;
|
||||||
gboolean is_idle_newline = FALSE;
|
gboolean is_idle_newline = FALSE;
|
||||||
g_autoptr(GString) str = g_string_new (NULL);
|
g_autoptr(GString) str = g_string_new (NULL);
|
||||||
g_autofree gchar *time_remaining = NULL;
|
|
||||||
|
|
||||||
/* erase previous line */
|
/* erase previous line */
|
||||||
fu_progressbar_erase_line (self);
|
fu_progressbar_erase_line (self);
|
||||||
@ -138,14 +155,14 @@ fu_progressbar_refresh (FuProgressbar *self, FwupdStatus status, guint percentag
|
|||||||
}
|
}
|
||||||
g_string_append_c (str, ']');
|
g_string_append_c (str, ']');
|
||||||
|
|
||||||
/* once we have some data (10%) show an estimate of time remaining */
|
/* once we have good data show an estimate of time remaining */
|
||||||
if (percentage < 100 && percentage > 10) {
|
if (fu_progressbar_estimate_ready (self, percentage)) {
|
||||||
gdouble rate = percentage / g_timer_elapsed (self->time_elapsed, NULL);
|
g_autofree gchar *remaining = g_strdup_printf ("%.2f", self->last_estimate);
|
||||||
time_remaining = g_strdup_printf ("%.2f", (100-percentage) * rate);
|
|
||||||
g_string_append_c (str, ' ');
|
g_string_append_c (str, ' ');
|
||||||
|
/* TRANSLATORS: time remaining for completing firmware flash */
|
||||||
g_string_append (str, _("Estimated time remaining:"));
|
g_string_append (str, _("Estimated time remaining:"));
|
||||||
g_string_append_c (str, ' ');
|
g_string_append_c (str, ' ');
|
||||||
g_string_append (str, time_remaining);
|
g_string_append (str, remaining);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* dump to screen */
|
/* dump to screen */
|
||||||
@ -165,8 +182,6 @@ fu_progressbar_set_title (FuProgressbar *self, const gchar *title)
|
|||||||
{
|
{
|
||||||
fu_progressbar_erase_line (self);
|
fu_progressbar_erase_line (self);
|
||||||
g_print ("%s\n", title);
|
g_print ("%s\n", title);
|
||||||
/* reset when we change devices */
|
|
||||||
g_timer_start (self->time_elapsed);
|
|
||||||
fu_progressbar_refresh (self, self->status, self->percentage);
|
fu_progressbar_refresh (self, self->status, self->percentage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,6 +225,9 @@ fu_progressbar_spin_end (FuProgressbar *self)
|
|||||||
if (self->timer_id != 0) {
|
if (self->timer_id != 0) {
|
||||||
g_source_remove (self->timer_id);
|
g_source_remove (self->timer_id);
|
||||||
self->timer_id = 0;
|
self->timer_id = 0;
|
||||||
|
|
||||||
|
/* reset when the spinner has been stopped */
|
||||||
|
g_timer_start (self->time_elapsed);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* go back to the start when we next go into unknown percentage mode */
|
/* go back to the start when we next go into unknown percentage mode */
|
||||||
|
Loading…
Reference in New Issue
Block a user