trivial: Add fu_device_list_get_by_platform_id()

This commit is contained in:
Richard Hughes 2018-08-26 10:40:37 +01:00
parent 95227a919d
commit bb764e99a0
3 changed files with 31 additions and 8 deletions

View File

@ -131,6 +131,32 @@ fu_device_list_get_active (FuDeviceList *self)
return devices; return devices;
} }
/**
* fu_device_list_get_by_platform_id:
* @self: A #FuDeviceList
*
* Returns all the active devices that have been added to the device list
* that match a specific platform ID.
*
* Returns: (transfer container) (element-type FuDevice): the devices
*
* Since: 1.1.2
**/
GPtrArray *
fu_device_list_get_by_platform_id (FuDeviceList *self, const gchar *platform_id)
{
GPtrArray *devices;
g_return_val_if_fail (FU_IS_DEVICE_LIST (self), NULL);
devices = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
for (guint i = 0; i < self->devices->len; i++) {
FuDeviceItem *item = g_ptr_array_index (self->devices, i);
if (g_strcmp0 (fu_device_get_platform_id (item->device), platform_id) != 0)
continue;
g_ptr_array_add (devices, g_object_ref (item->device));
}
return devices;
}
static FuDeviceItem * static FuDeviceItem *
fu_device_list_find_by_device (FuDeviceList *self, FuDevice *device) fu_device_list_find_by_device (FuDeviceList *self, FuDevice *device)
{ {

View File

@ -23,6 +23,8 @@ void fu_device_list_remove (FuDeviceList *self,
FuDevice *device); FuDevice *device);
GPtrArray *fu_device_list_get_all (FuDeviceList *self); GPtrArray *fu_device_list_get_all (FuDeviceList *self);
GPtrArray *fu_device_list_get_active (FuDeviceList *self); GPtrArray *fu_device_list_get_active (FuDeviceList *self);
GPtrArray *fu_device_list_get_by_platform_id (FuDeviceList *self,
const gchar *platform_id);
FuDevice *fu_device_list_get_old (FuDeviceList *self, FuDevice *fu_device_list_get_old (FuDeviceList *self,
FuDevice *device); FuDevice *device);
FuDevice *fu_device_list_get_by_id (FuDeviceList *self, FuDevice *fu_device_list_get_by_id (FuDeviceList *self,

View File

@ -3212,17 +3212,12 @@ fu_engine_usb_device_removed_cb (GUsbContext *ctx,
g_autoptr(GPtrArray) devices = NULL; g_autoptr(GPtrArray) devices = NULL;
/* go through each device and remove any that match */ /* go through each device and remove any that match */
devices = fu_device_list_get_all (self->device_list); devices = fu_device_list_get_by_platform_id (self->device_list,
g_usb_device_get_platform_id (usb_device));
for (guint i = 0; i < devices->len; i++) { for (guint i = 0; i < devices->len; i++) {
FuDevice *device = g_ptr_array_index (devices, i); FuDevice *device = g_ptr_array_index (devices, i);
if (!FU_IS_USB_DEVICE (device))
continue;
if (g_strcmp0 (fu_device_get_platform_id (device),
g_usb_device_get_platform_id (usb_device)) == 0) {
g_debug ("auto-removing FuUsbDevice");
fu_device_list_remove (self->device_list, device); fu_device_list_remove (self->device_list, device);
} }
}
} }
static void static void