diff --git a/src/fu-progressbar.c b/src/fu-progressbar.c index f34e3f638..9d147089e 100644 --- a/src/fu-progressbar.c +++ b/src/fu-progressbar.c @@ -103,6 +103,22 @@ fu_progressbar_erase_line(FuProgressbar *self) g_print("\033[G"); } +static gboolean +_fu_status_is_predictable(FwupdStatus status) +{ + if (status == FWUPD_STATUS_DEVICE_ERASE) + return TRUE; + if (status == FWUPD_STATUS_DEVICE_VERIFY) + return TRUE; + if (status == FWUPD_STATUS_DEVICE_READ) + return TRUE; + if (status == FWUPD_STATUS_DEVICE_WRITE) + return TRUE; + if (status == FWUPD_STATUS_DOWNLOADING) + return TRUE; + return FALSE; +} + static gboolean fu_progressbar_estimate_ready(FuProgressbar *self, guint percentage) { @@ -116,6 +132,10 @@ fu_progressbar_estimate_ready(FuProgressbar *self, guint percentage) return FALSE; } + /* allow-list things that make sense... */ + if (!_fu_status_is_predictable(self->status)) + return FALSE; + old = self->last_estimate; elapsed = g_timer_elapsed(self->time_elapsed, NULL); self->last_estimate = elapsed / percentage * (100 - percentage);