18c2aff776a775d34a4c9893a4c72e0434d68e36artem/***************************************************************************
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * CVSID: $Id$
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * device_store.c : HalDeviceStore methods
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * Copyright (C) 2003 David Zeuthen, <david@fubar.dk>
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * Copyright (C) 2004 Novell, Inc.
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * Licensed under the Academic Free License version 2.1
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * This program is free software; you can redistribute it and/or modify
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * it under the terms of the GNU General Public License as published by
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * the Free Software Foundation; either version 2 of the License, or
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * (at your option) any later version.
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * This program is distributed in the hope that it will be useful,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * but WITHOUT ANY WARRANTY; without even the implied warranty of
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * GNU General Public License for more details.
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * You should have received a copy of the GNU General Public License
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * along with this program; if not, write to the Free Software
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18c2aff776a775d34a4c9893a4c72e0434d68e36artem **************************************************************************/
18c2aff776a775d34a4c9893a4c72e0434d68e36artem g_slist_foreach (store->devices, (GFunc) g_object_unref, NULL);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemhal_device_store_class_init (HalDeviceStoreClass *klass)
18c2aff776a775d34a4c9893a4c72e0434d68e36artem "HalDeviceStore",
18c2aff776a775d34a4c9893a4c72e0434d68e36artem store = g_object_new (HAL_TYPE_DEVICE_STORE, NULL, NULL);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem g_signal_emit (store, signals[DEVICE_PROPERTY_CHANGED], 0,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *capability,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem g_signal_emit (store, signals[DEVICE_CAPABILITY_ADDED], 0,
18c2aff776a775d34a4c9893a4c72e0434d68e36artemhal_device_store_add (HalDeviceStore *store, HalDevice *device)
18c2aff776a775d34a4c9893a4c72e0434d68e36artem if (strncmp(device->udi, buf, sizeof (buf) - 1) != 0) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem HAL_ERROR(("Can't add HalDevice with incorrect UDI. Valid "
18c2aff776a775d34a4c9893a4c72e0434d68e36artem "UDI must start with '/org/freedesktop/Hal/devices/'"));
18c2aff776a775d34a4c9893a4c72e0434d68e36artem g_signal_emit (store, signals[STORE_CHANGED], 0, device, TRUE);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemhal_device_store_remove (HalDeviceStore *store, HalDevice *device)
18c2aff776a775d34a4c9893a4c72e0434d68e36artem store->devices = g_slist_remove (store->devices, device);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem g_signal_emit (store, signals[STORE_CHANGED], 0, device, FALSE);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemhal_device_store_find (HalDeviceStore *store, const char *udi)
18c2aff776a775d34a4c9893a4c72e0434d68e36artem for (iter = store->devices; iter != NULL; iter = iter->next) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem for (iter = store->devices; iter != NULL; iter = iter->next) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artemhal_device_store_print_foreach_fn (HalDeviceStore *store,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem fprintf (stderr, "===============================================\n");
18c2aff776a775d34a4c9893a4c72e0434d68e36artem fprintf (stderr, "===============================================\n");
18c2aff776a775d34a4c9893a4c72e0434d68e36artem fprintf (stderr, "===============================================\n");
18c2aff776a775d34a4c9893a4c72e0434d68e36artemhal_device_store_match_key_value_string (HalDeviceStore *store,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *value)
18c2aff776a775d34a4c9893a4c72e0434d68e36artem for (iter = store->devices; iter != NULL; iter = iter->next) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artemhal_device_store_match_key_value_int (HalDeviceStore *store,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem for (iter = store->devices; iter != NULL; iter = iter->next) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artemhal_device_store_match_multiple_key_value_string (HalDeviceStore *store,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *value)
18c2aff776a775d34a4c9893a4c72e0434d68e36artem for (iter = store->devices; iter != NULL; iter = iter->next) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artemtypedef struct {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem g_signal_handler_disconnect (info->store, info->prop_signal_id);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem g_signal_handler_disconnect (info->store, info->store_signal_id);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemmatch_device_async (HalDeviceStore *store, HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem /* Only want to do it for added or changed properties */
18c2aff776a775d34a4c9893a4c72e0434d68e36artem /* Keys have to match */
18c2aff776a775d34a4c9893a4c72e0434d68e36artem /* Values have to match */
18c2aff776a775d34a4c9893a4c72e0434d68e36artem if (strcmp (hal_device_property_get_string (device, key),
18c2aff776a775d34a4c9893a4c72e0434d68e36artemstore_changed (HalDeviceStore *store, HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem if (strcmp (hal_device_property_get_string (device, info->key),
18c2aff776a775d34a4c9893a4c72e0434d68e36artemhal_device_store_match_key_value_string_async (HalDeviceStore *store,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *value,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem /* First check to see if it's already there */
18c2aff776a775d34a4c9893a4c72e0434d68e36artem device = hal_device_store_match_key_value_string (store, key, value);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem "device_property_changed",
18c2aff776a775d34a4c9893a4c72e0434d68e36artem "store_changed",