From e7d2eb43f744f340830af131f2b2307b56d5a823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= Date: Wed, 16 Feb 2011 14:34:19 +0100 Subject: [PATCH] libnm-glib: add code to get "Version" property --- libnm-glib/Makefile.am | 2 +- libnm-glib/libnm-glib.ver | 1 + libnm-glib/nm-client.c | 60 +++++++++++++++++++++++++++++++++++++++ libnm-glib/nm-client.h | 2 ++ 4 files changed, 64 insertions(+), 1 deletion(-) diff --git a/libnm-glib/Makefile.am b/libnm-glib/Makefile.am index 185e405aa4..02b9fdef6e 100644 --- a/libnm-glib/Makefile.am +++ b/libnm-glib/Makefile.am @@ -140,7 +140,7 @@ libnm_glib_la_LIBADD = \ $(GUDEV_LIBS) libnm_glib_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libnm-glib.ver \ - -version-info "3:1:0" + -version-info "4:0:1" noinst_PROGRAMS = libnm-glib-test diff --git a/libnm-glib/libnm-glib.ver b/libnm-glib/libnm-glib.ver index dc9d854794..6d9d4cac41 100644 --- a/libnm-glib/libnm-glib.ver +++ b/libnm-glib/libnm-glib.ver @@ -34,6 +34,7 @@ global: nm_client_get_devices; nm_client_get_manager_running; nm_client_get_permission_result; + nm_client_get_version; nm_client_get_state; nm_client_get_type; nm_client_networking_get_enabled; diff --git a/libnm-glib/nm-client.c b/libnm-glib/nm-client.c index b37e710e2f..161511c844 100644 --- a/libnm-glib/nm-client.c +++ b/libnm-glib/nm-client.c @@ -54,6 +54,7 @@ typedef struct { DBusGProxy *client_proxy; DBusGProxy *bus_proxy; gboolean manager_running; + char *version; NMState state; GPtrArray *devices; GPtrArray *active_connections; @@ -75,6 +76,7 @@ typedef struct { enum { PROP_0, + PROP_VERSION, PROP_STATE, PROP_MANAGER_RUNNING, PROP_NETWORKING_ENABLED, @@ -318,6 +320,7 @@ register_for_property_changed (NMClient *client) { NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (client); const NMPropertiesChangedInfo property_changed_info[] = { + { NM_CLIENT_VERSION, _nm_object_demarshal_generic, &priv->version }, { NM_CLIENT_STATE, _nm_object_demarshal_generic, &priv->state }, { NM_CLIENT_NETWORKING_ENABLED, _nm_object_demarshal_generic, &priv->networking_enabled }, { NM_CLIENT_WIRELESS_ENABLED, _nm_object_demarshal_generic, &priv->wireless_enabled }, @@ -604,6 +607,16 @@ dispose (GObject *object) G_OBJECT_CLASS (nm_client_parent_class)->dispose (object); } +static void +finalize (GObject *object) +{ + NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (object); + + g_free (priv->version); + + G_OBJECT_CLASS (nm_client_parent_class)->finalize (object); +} + static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) @@ -670,6 +683,9 @@ get_property (GObject *object, NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (self); switch (prop_id) { + case PROP_VERSION: + g_value_set_string (value, nm_client_get_version (self)); + break; case PROP_STATE: g_value_set_uint (value, nm_client_get_state (self)); break; @@ -718,9 +734,22 @@ nm_client_class_init (NMClientClass *client_class) object_class->set_property = set_property; object_class->get_property = get_property; object_class->dispose = dispose; + object_class->finalize = finalize; /* properties */ + /** + * NMClient:version: + * + * The NetworkManager version. + **/ + g_object_class_install_property (object_class, PROP_VERSION, + g_param_spec_string (NM_CLIENT_VERSION, + "Version", + "NetworkManager version", + NULL, + G_PARAM_READABLE)); + /** * NMClient:state: * @@ -1457,6 +1486,37 @@ nm_client_wimax_hardware_get_enabled (NMClient *client) return NM_CLIENT_GET_PRIVATE (client)->wimax_hw_enabled; } +/** + * nm_client_get_version: + * @client: a #NMClient + * + * Gets NetworkManager version. + * + * Returns: string with the version + **/ +const char * +nm_client_get_version (NMClient *client) +{ + NMClientPrivate *priv; + GError *err = NULL; + + g_return_val_if_fail (NM_IS_CLIENT (client), NULL); + + priv = NM_CLIENT_GET_PRIVATE (client); + + if (!priv->manager_running) + return NULL; + + if (!priv->version) + priv->version = _nm_object_get_string_property (NM_OBJECT (client), NM_DBUS_INTERFACE, "Version", &err); + + /* TODO: we don't pass the error to the caller yet, maybe later */ + if (err) + g_error_free (err); + + return priv->version; +} + /** * nm_client_get_state: * @client: a #NMClient diff --git a/libnm-glib/nm-client.h b/libnm-glib/nm-client.h index 1885f8faba..4cf1644aec 100644 --- a/libnm-glib/nm-client.h +++ b/libnm-glib/nm-client.h @@ -41,6 +41,7 @@ G_BEGIN_DECLS #define NM_IS_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_CLIENT)) #define NM_CLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_CLIENT, NMClientClass)) +#define NM_CLIENT_VERSION "version" #define NM_CLIENT_STATE "state" #define NM_CLIENT_MANAGER_RUNNING "manager-running" #define NM_CLIENT_NETWORKING_ENABLED "networking-enabled" @@ -150,6 +151,7 @@ gboolean nm_client_wimax_get_enabled (NMClient *client); void nm_client_wimax_set_enabled (NMClient *client, gboolean enabled); gboolean nm_client_wimax_hardware_get_enabled (NMClient *client); +const char *nm_client_get_version (NMClient *client); NMState nm_client_get_state (NMClient *client); gboolean nm_client_get_manager_running (NMClient *client); const GPtrArray *nm_client_get_active_connections (NMClient *client);