Exemple #1
0
static GUPnPServiceInfo *prv_remove_bm_service_sub_devices(
						GUPnPDeviceInfo *device_info,
						dld_upnp_t *upnp,
						const gchar *ip_address)
{
	GList *child_devices;
	GList *next;
	GUPnPDeviceInfo *child_info = NULL;
	GUPnPServiceInfo *service_info = NULL;

	DLEYNA_LOG_DEBUG("Enter");

	child_devices = gupnp_device_info_list_devices(device_info);

	next = child_devices;
	while (next != NULL) {
		child_info = (GUPnPDeviceInfo *)next->data;

		service_info = gupnp_device_info_get_service(child_info,
					  DLD_BASIC_MANAGEMENT_SERVICE_TYPE);

		if (service_info != NULL)
			prv_remove_sub_device(upnp,
					      (GUPnPDeviceProxy *)child_info,
					      (GUPnPServiceProxy *)service_info,
					      ip_address);

		service_info = prv_remove_bm_service_sub_devices(child_info,
								 upnp,
								 ip_address);

		if (service_info != NULL)
			prv_remove_sub_device(upnp,
					      (GUPnPDeviceProxy *)child_info,
					      (GUPnPServiceProxy *)service_info,
					      ip_address);

		next = g_list_next(next);
	}

	g_list_free_full(child_devices, g_object_unref);

	DLEYNA_LOG_DEBUG("Exit");

	return service_info;
}
static void
append_device_tree (GUPnPDeviceInfo *info,
                    GtkTreeModel    *model,
                    GtkTreeIter     *parent_iter)
{
        char *friendly_name;

        friendly_name = gupnp_device_info_get_friendly_name (info);
        if (friendly_name) {
                GtkTreeIter device_iter;
                GList *child;

                gtk_tree_store_insert_with_values
                                (GTK_TREE_STORE (model),
                                 &device_iter, parent_iter, -1,
                                 0, get_icon_by_id (ICON_DEVICE),
                                 1, friendly_name,
                                 2, info,
                                 5, ICON_DEVICE,
                                 -1);
                g_free (friendly_name);

                schedule_icon_update (info, on_device_icon_available);

                /* Append the embedded devices */
                child = gupnp_device_info_list_devices (info);
                while (child) {
                        append_device_tree (GUPNP_DEVICE_INFO (child->data),
                                            model,
                                            &device_iter);
                        g_object_unref (child->data);
                        child = g_list_delete_link (child, child);
                }

                /* Append the services */
                child = gupnp_device_info_list_services (info);
                while (child) {
                        append_service_tree (GUPNP_SERVICE_INFO (child->data),
                                             GTK_TREE_STORE (model),
                                             &device_iter);
                        g_object_unref (child->data);
                        child = g_list_delete_link (child, child);
                }
        }
}