diff --git a/libfwupdplugin/fu-device.c b/libfwupdplugin/fu-device.c index 21d7b3fe4..48af75e34 100644 --- a/libfwupdplugin/fu-device.c +++ b/libfwupdplugin/fu-device.c @@ -1992,6 +1992,40 @@ fu_device_set_metadata_integer (FuDevice *self, const gchar *key, guint value) fu_device_set_metadata (self, key, tmp); } +/* ensure the name does not have the vendor name as the prefix */ +static void +fu_device_fixup_vendor_name (FuDevice *self) +{ + const gchar *name = fu_device_get_name (self); + const gchar *vendor = fu_device_get_vendor (self); + if (name != NULL && vendor != NULL) { + if (g_str_has_prefix (name, vendor)) { + gsize vendor_len = strlen (vendor); + g_autofree gchar *name1 = g_strdup (name + vendor_len); + g_autofree gchar *name2 = fu_common_strstrip (name1); + g_debug ("removing vendor prefix of '%s' from '%s'", + vendor, name); + fwupd_device_set_name (FWUPD_DEVICE (self), name2); + } + } +} + +/** + * fu_device_set_vendor: + * @self: a #FuDevice + * @vendor: a device vendor + * + * Sets the vendor name on the device. + * + * Since: 1.6.2 + **/ +void +fu_device_set_vendor (FuDevice *self, const gchar *vendor) +{ + fwupd_device_set_vendor (FWUPD_DEVICE (self), vendor); + fu_device_fixup_vendor_name (self); +} + /** * fu_device_set_name: * @self: a #FuDevice @@ -2029,6 +2063,7 @@ fu_device_set_name (FuDevice *self, const gchar *value) g_strdelimit (new->str, "_", ' '); fu_common_string_replace (new, "(TM)", "™"); fwupd_device_set_name (FWUPD_DEVICE (self), new->str); + fu_device_fixup_vendor_name (self); } /** diff --git a/libfwupdplugin/fu-device.h b/libfwupdplugin/fu-device.h index 186b286fa..6ddd83c36 100644 --- a/libfwupdplugin/fu-device.h +++ b/libfwupdplugin/fu-device.h @@ -176,7 +176,6 @@ FuDevice *fu_device_new (void); #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_set_vendor(d,v) fwupd_device_set_vendor(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) @@ -345,6 +344,8 @@ void fu_device_set_custom_flags (FuDevice *self, const gchar *custom_flags); void fu_device_set_name (FuDevice *self, const gchar *value); +void fu_device_set_vendor (FuDevice *self, + const gchar *vendor); guint fu_device_get_remove_delay (FuDevice *self); void fu_device_set_remove_delay (FuDevice *self, guint remove_delay); diff --git a/libfwupdplugin/fu-self-test.c b/libfwupdplugin/fu-self-test.c index 91b2f6ff2..1a2266f14 100644 --- a/libfwupdplugin/fu-self-test.c +++ b/libfwupdplugin/fu-self-test.c @@ -236,6 +236,25 @@ fu_device_open_refcount_func (void) g_assert_false (ret); } +static void +fu_device_name_func (void) +{ + g_autoptr(FuDevice) device1 = fu_device_new (); + g_autoptr(FuDevice) device2 = fu_device_new (); + + /* vendor then name */ + fu_device_set_vendor (device1, "Hughski"); + fu_device_set_name (device1, "Hughski ColorHug(TM)_Pro"); + g_assert_cmpstr (fu_device_get_vendor (device1), ==, "Hughski"); + g_assert_cmpstr (fu_device_get_name (device1), ==, "ColorHug™ Pro"); + + /* name then vendor */ + fu_device_set_name (device2, "Hughski ColorHug(TM)_Pro"); + fu_device_set_vendor (device2, "Hughski"); + g_assert_cmpstr (fu_device_get_vendor (device2), ==, "Hughski"); + g_assert_cmpstr (fu_device_get_name (device2), ==, "ColorHug™ Pro"); +} + static void fu_device_metadata_func (void) { @@ -2984,6 +3003,7 @@ main (int argc, char **argv) g_test_add_func ("/fwupd/device{poll}", fu_device_poll_func); g_test_add_func ("/fwupd/device-locker{success}", fu_device_locker_func); g_test_add_func ("/fwupd/device-locker{fail}", fu_device_locker_fail_func); + g_test_add_func ("/fwupd/device{name}", fu_device_name_func); g_test_add_func ("/fwupd/device{metadata}", fu_device_metadata_func); g_test_add_func ("/fwupd/device{open-refcount}", fu_device_open_refcount_func); g_test_add_func ("/fwupd/device{version-format}", fu_device_version_format_func); diff --git a/libfwupdplugin/fwupdplugin.map b/libfwupdplugin/fwupdplugin.map index 855567b1e..b8f7448d6 100644 --- a/libfwupdplugin/fwupdplugin.map +++ b/libfwupdplugin/fwupdplugin.map @@ -828,6 +828,7 @@ LIBFWUPDPLUGIN_1.6.2 { fu_device_register_private_flag; fu_device_remove_private_flag; fu_device_set_private_flags; + fu_device_set_vendor; fu_i2c_device_read_full; fu_i2c_device_set_bus_number; fu_i2c_device_write_full;