From 0efa97229a97dbbe6f0767486c762d3f3a46bc8c Mon Sep 17 00:00:00 2001 From: Richard Hughes Date: Fri, 23 Jul 2021 10:27:41 +0100 Subject: [PATCH] Automatically clear the update error as required This is less fragile than patching all the callers. --- libfwupdplugin/fu-device.c | 20 ++++++++++++++++++++ libfwupdplugin/fu-device.h | 3 ++- libfwupdplugin/fwupdplugin.map | 1 + src/fu-engine.c | 1 - 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/libfwupdplugin/fu-device.c b/libfwupdplugin/fu-device.c index d822b8569..7ea5eae64 100644 --- a/libfwupdplugin/fu-device.c +++ b/libfwupdplugin/fu-device.c @@ -3195,6 +3195,26 @@ fu_device_sleep_with_progress (FuDevice *self, guint delay_secs) } } +/** + * fu_device_set_update_state: + * @self: a #FuDevice + * @update_state: the state, e.g. %FWUPD_UPDATE_STATE_PENDING + * + * Sets the update state, clearing the update error as required. + * + * Since: 1.6.2 + **/ +void +fu_device_set_update_state (FuDevice *self, FwupdUpdateState update_state) +{ + g_return_if_fail (FU_IS_DEVICE (self)); + if (update_state == FWUPD_UPDATE_STATE_SUCCESS || + update_state == FWUPD_UPDATE_STATE_PENDING || + update_state == FWUPD_UPDATE_STATE_NEEDS_REBOOT) + fu_device_set_update_error (self, NULL); + fwupd_device_set_update_state (FWUPD_DEVICE (self), update_state); +} + static void fu_device_ensure_battery_inhibit (FuDevice *self) { diff --git a/libfwupdplugin/fu-device.h b/libfwupdplugin/fu-device.h index 5d001bba4..54ff072e0 100644 --- a/libfwupdplugin/fu-device.h +++ b/libfwupdplugin/fu-device.h @@ -188,7 +188,6 @@ FuDevice *fu_device_new_with_context (FuContext *ctx); #define fu_device_set_update_message(d,v) fwupd_device_set_update_message(FWUPD_DEVICE(d),v) #define fu_device_set_update_image(d,v) fwupd_device_set_update_image(FWUPD_DEVICE(d),v) #define fu_device_set_update_error(d,v) fwupd_device_set_update_error(FWUPD_DEVICE(d),v) -#define fu_device_set_update_state(d,v) fwupd_device_set_update_state(FWUPD_DEVICE(d),v) #define fu_device_add_vendor_id(d,v) fwupd_device_add_vendor_id(FWUPD_DEVICE(d),v) #define fu_device_add_protocol(d,v) fwupd_device_add_protocol(FWUPD_DEVICE(d),v) #define fu_device_set_version_raw(d,v) fwupd_device_set_version_raw(FWUPD_DEVICE(d),v) @@ -403,6 +402,8 @@ void fu_device_set_progress_full (FuDevice *self, gsize progress_total); void fu_device_sleep_with_progress (FuDevice *self, guint delay_secs); +void fu_device_set_update_state (FuDevice *self, + FwupdUpdateState update_state); void fu_device_set_context (FuDevice *self, FuContext *ctx); FuContext *fu_device_get_context (FuDevice *self); diff --git a/libfwupdplugin/fwupdplugin.map b/libfwupdplugin/fwupdplugin.map index f686eef72..0dbcdd102 100644 --- a/libfwupdplugin/fwupdplugin.map +++ b/libfwupdplugin/fwupdplugin.map @@ -839,6 +839,7 @@ LIBFWUPDPLUGIN_1.6.2 { fu_device_remove_child; fu_device_remove_private_flag; fu_device_set_private_flags; + fu_device_set_update_state; fu_device_set_vendor; fu_efi_firmware_file_get_type; fu_efi_firmware_file_new; diff --git a/src/fu-engine.c b/src/fu-engine.c index 7087b429b..517255dac 100644 --- a/src/fu-engine.c +++ b/src/fu-engine.c @@ -6393,7 +6393,6 @@ fu_engine_update_history_device (FuEngine *self, FuDevice *dev_history, GError * fu_device_set_version (dev_history, fu_device_get_version (dev)); fu_device_remove_flag (dev_history, FWUPD_DEVICE_FLAG_NEEDS_ACTIVATION); fu_device_set_update_state (dev_history, FWUPD_UPDATE_STATE_SUCCESS); - fu_device_set_update_error (dev_history, NULL); return fu_history_modify_device (self->history, dev_history, error); }