libmm-glib,manager: allow specifying the generated proxy types ourselves

This commit is contained in:
Aleksander Morgado
2012-10-01 11:23:55 +02:00
parent ca14de0605
commit acf2e6d1e0

View File

@@ -41,6 +41,43 @@ struct _MMManagerPrivate {
MmGdbusOrgFreedesktopModemManager1 *manager_iface_proxy;
};
/*****************************************************************************/
static GType
get_proxy_type (GDBusObjectManagerClient *manager,
const gchar *object_path,
const gchar *interface_name,
gpointer user_data)
{
static gsize once_init_value = 0;
static GHashTable *lookup_hash;
GType ret;
if (interface_name == NULL)
return MM_GDBUS_TYPE_OBJECT_PROXY;
if (g_once_init_enter (&once_init_value))
{
lookup_hash = g_hash_table_new (g_str_hash, g_str_equal);
g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem", GSIZE_TO_POINTER (MM_GDBUS_TYPE_MODEM_PROXY));
g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Messaging", GSIZE_TO_POINTER (MM_GDBUS_TYPE_MODEM_MESSAGING_PROXY));
g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Location", GSIZE_TO_POINTER (MM_GDBUS_TYPE_MODEM_LOCATION_PROXY));
g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Time", GSIZE_TO_POINTER (MM_GDBUS_TYPE_MODEM_TIME_PROXY));
g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Firmware", GSIZE_TO_POINTER (MM_GDBUS_TYPE_MODEM_FIRMWARE_PROXY));
g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Contacts", GSIZE_TO_POINTER (MM_GDBUS_TYPE_MODEM_CONTACTS_PROXY));
g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.ModemCdma", GSIZE_TO_POINTER (MM_GDBUS_TYPE_MODEM_CDMA_PROXY));
g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Modem3gpp", GSIZE_TO_POINTER (MM_GDBUS_TYPE_MODEM3GPP_PROXY));
g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Modem3gpp.Ussd", GSIZE_TO_POINTER (MM_GDBUS_TYPE_MODEM3GPP_USSD_PROXY));
g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Simple", GSIZE_TO_POINTER (MM_GDBUS_TYPE_MODEM_SIMPLE_PROXY));
g_once_init_leave (&once_init_value, 1);
}
ret = (GType) GPOINTER_TO_SIZE (g_hash_table_lookup (lookup_hash, interface_name));
if (ret == (GType) 0)
ret = G_TYPE_DBUS_PROXY;
return ret;
}
/*****************************************************************************/
/**
* mm_manager_new:
* @connection: A #GDBusConnection.
@@ -75,7 +112,7 @@ mm_manager_new (GDBusConnection *connection,
"object-path", MM_DBUS_PATH,
"flags", flags,
"connection", connection,
"get-proxy-type-func", mm_gdbus_object_manager_client_get_proxy_type,
"get-proxy-type-func", get_proxy_type,
NULL);
}
@@ -125,7 +162,7 @@ mm_manager_new_sync (GDBusConnection *connection,
"object-path", MM_DBUS_PATH,
"flags", flags,
"connection", connection,
"get-proxy-type-func", mm_gdbus_object_manager_client_get_proxy_type,
"get-proxy-type-func", get_proxy_type,
NULL);
return (ret ? MM_MANAGER (ret) : NULL);