NetworkManager r4094 - in trunk: . system-settings/plugins/ifcfg-fedora system-settings/plugins/keyfile
- From: tambeti svn gnome org
- To: svn-commits-list gnome org
- Subject: NetworkManager r4094 - in trunk: . system-settings/plugins/ifcfg-fedora system-settings/plugins/keyfile
- Date: Wed, 24 Sep 2008 15:03:33 +0000 (UTC)
Author: tambeti
Date: Wed Sep 24 15:03:33 2008
New Revision: 4094
URL: http://svn.gnome.org/viewvc/NetworkManager?rev=4094&view=rev
Log:
2008-09-24 Tambet Ingo <tambet gmail com>
* system-settings/plugins/keyfile/plugin.c: Implement unmanaged_devices
method and get/set hostname property.
Modified:
trunk/ChangeLog
trunk/system-settings/plugins/ifcfg-fedora/plugin.c
trunk/system-settings/plugins/keyfile/Makefile.am
trunk/system-settings/plugins/keyfile/plugin.c
Modified: trunk/system-settings/plugins/ifcfg-fedora/plugin.c
==============================================================================
--- trunk/system-settings/plugins/ifcfg-fedora/plugin.c (original)
+++ trunk/system-settings/plugins/ifcfg-fedora/plugin.c Wed Sep 24 15:03:33 2008
@@ -638,10 +638,9 @@
switch (prop_id) {
case NM_SYSTEM_CONFIG_INTERFACE_PROP_HOSTNAME:
hostname = g_value_get_string (value);
- if (!strlen (hostname))
+ if (hostname && strlen (hostname) < 1)
hostname = NULL;
- plugin_set_hostname (SC_PLUGIN_IFCFG (object),
- (hostname && strlen (hostname)) ? hostname : NULL);
+ plugin_set_hostname (SC_PLUGIN_IFCFG (object), hostname);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Modified: trunk/system-settings/plugins/keyfile/Makefile.am
==============================================================================
--- trunk/system-settings/plugins/keyfile/Makefile.am (original)
+++ trunk/system-settings/plugins/keyfile/Makefile.am Wed Sep 24 15:03:33 2008
@@ -17,6 +17,7 @@
$(GLIB_CFLAGS) \
$(GMODULE_CFLAGS) \
$(DBUS_CFLAGS) \
+ -DSYSCONFDIR=\"$(sysconfdir)\" \
-DG_DISABLE_DEPRECATED \
-I${top_srcdir}/system-settings/src \
-I$(top_srcdir)/include \
Modified: trunk/system-settings/plugins/keyfile/plugin.c
==============================================================================
--- trunk/system-settings/plugins/keyfile/plugin.c (original)
+++ trunk/system-settings/plugins/keyfile/plugin.c Wed Sep 24 15:03:33 2008
@@ -26,6 +26,9 @@
#define KEYFILE_PLUGIN_NAME "keyfile"
#define KEYFILE_PLUGIN_INFO "(c) 2007 - 2008 Red Hat, Inc. To report bugs please use the NetworkManager mailing list."
+#define CONF_FILE SYSCONFDIR "/NetworkManager/nm-system-settings.conf"
+
+static char *plugin_get_hostname (SCPluginKeyfile *plugin);
static void system_config_interface_init (NMSystemConfigInterface *system_config_interface_class);
G_DEFINE_TYPE_EXTENDED (SCPluginKeyfile, sc_plugin_keyfile, G_TYPE_OBJECT, 0,
@@ -40,6 +43,11 @@
GFileMonitor *monitor;
guint monitor_id;
+ GFileMonitor *conf_file_monitor;
+ guint conf_file_monitor_id;
+
+ char *hostname;
+
gboolean disposed;
} SCPluginKeyfilePrivate;
@@ -213,6 +221,43 @@
}
static void
+conf_file_changed (GFileMonitor *monitor,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event_type,
+ gpointer data)
+{
+ SCPluginKeyfile *self = SC_PLUGIN_KEYFILE (data);
+ SCPluginKeyfilePrivate *priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (self);
+ char *tmp;
+
+ switch (event_type) {
+ case G_FILE_MONITOR_EVENT_DELETED:
+ case G_FILE_MONITOR_EVENT_CREATED:
+ case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
+ g_signal_emit_by_name (self, "unmanaged-devices-changed");
+
+ /* hostname */
+ tmp = plugin_get_hostname (self);
+ if ((tmp && !priv->hostname)
+ || (!tmp && priv->hostname)
+ || (priv->hostname && tmp && strcmp (priv->hostname, tmp))) {
+
+ g_free (priv->hostname);
+ priv->hostname = tmp;
+ tmp = NULL;
+ g_object_notify (G_OBJECT (self), NM_SYSTEM_CONFIG_INTERFACE_HOSTNAME);
+ }
+
+ g_free (tmp);
+
+ break;
+ default:
+ break;
+ }
+}
+
+static void
setup_monitoring (NMSystemConfigInterface *config)
{
SCPluginKeyfilePrivate *priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (config);
@@ -229,6 +274,15 @@
priv->monitor_id = g_signal_connect (monitor, "changed", G_CALLBACK (dir_changed), config);
priv->monitor = monitor;
}
+
+ file = g_file_new_for_path (CONF_FILE);
+ monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE, NULL, NULL);
+ g_object_unref (file);
+
+ if (monitor) {
+ priv->conf_file_monitor_id = g_signal_connect (monitor, "changed", G_CALLBACK (conf_file_changed), config);
+ priv->conf_file_monitor = monitor;
+ }
}
static void
@@ -265,11 +319,107 @@
return write_connection (connection, NULL, error);
}
+static GSList *
+get_unmanaged_devices (NMSystemConfigInterface *config)
+{
+ GKeyFile *key_file;
+ GSList *unmanaged_devices = NULL;
+ GError *error = NULL;
+
+ key_file = g_key_file_new ();
+ if (g_key_file_load_from_file (key_file, CONF_FILE, G_KEY_FILE_NONE, &error)) {
+ char *str;
+
+ str = g_key_file_get_value (key_file, "keyfile", "unmanaged-devices", NULL);
+ if (str) {
+ char **udis;
+ int i;
+
+ udis = g_strsplit (str, ";", -1);
+ g_free (str);
+
+ for (i = 0; udis[i] != NULL; i++)
+ unmanaged_devices = g_slist_append (unmanaged_devices, udis[i]);
+
+ g_free (udis); /* Yes, g_free, not g_strfreev because we need the strings in the list */
+ }
+ } else {
+ g_warning ("Error parsing file '%s': %s", CONF_FILE, error->message);
+ g_error_free (error);
+ }
+
+ g_key_file_free (key_file);
+
+ return unmanaged_devices;
+}
+
+static char *
+plugin_get_hostname (SCPluginKeyfile *plugin)
+{
+ GKeyFile *key_file;
+ char *hostname;
+ GError *error = NULL;
+
+ key_file = g_key_file_new ();
+ if (g_key_file_load_from_file (key_file, CONF_FILE, G_KEY_FILE_NONE, &error))
+ hostname = g_key_file_get_value (key_file, "keyfile", "hostname", NULL);
+ else {
+ g_warning ("Error parsing file '%s': %s", CONF_FILE, error->message);
+ g_error_free (error);
+ }
+
+ g_key_file_free (key_file);
+
+ return hostname;
+}
+
+static gboolean
+plugin_set_hostname (SCPluginKeyfile *plugin, const char *hostname)
+{
+ SCPluginKeyfilePrivate *priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (plugin);
+ GKeyFile *key_file;
+ GError *error = NULL;
+ gboolean result = FALSE;
+
+ key_file = g_key_file_new ();
+ if (g_key_file_load_from_file (key_file, CONF_FILE, G_KEY_FILE_NONE, &error)) {
+ char *data;
+ gsize len;
+
+ g_key_file_set_string (key_file, "keyfile", "hostname", hostname);
+
+ data = g_key_file_to_data (key_file, &len, &error);
+ if (data) {
+ g_file_set_contents (CONF_FILE, data, len, &error);
+ g_free (data);
+
+ g_free (priv->hostname);
+ priv->hostname = hostname ? g_strdup (hostname) : NULL;
+ result = TRUE;
+ }
+
+ if (error) {
+ g_warning ("Error saving hostname: %s", error->message);
+ g_error_free (error);
+ }
+ } else {
+ g_warning ("Error parsing file '%s': %s", CONF_FILE, error->message);
+ g_error_free (error);
+ }
+
+ g_key_file_free (key_file);
+
+ return result;
+}
+
/* GObject */
static void
sc_plugin_keyfile_init (SCPluginKeyfile *plugin)
{
+ SCPluginKeyfilePrivate *priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (plugin);
+
+ priv->hostname = plugin_get_hostname (plugin);
}
static void
@@ -284,10 +434,30 @@
g_value_set_string (value, KEYFILE_PLUGIN_INFO);
break;
case NM_SYSTEM_CONFIG_INTERFACE_PROP_CAPABILITIES:
- g_value_set_uint (value, NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_CONNECTIONS);
+ g_value_set_uint (value, NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_CONNECTIONS |
+ NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_HOSTNAME);
break;
case NM_SYSTEM_CONFIG_INTERFACE_PROP_HOSTNAME:
- g_value_set_string (value, "");
+ g_value_set_string (value, SC_PLUGIN_KEYFILE_GET_PRIVATE (object)->hostname);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ const char *hostname;
+
+ switch (prop_id) {
+ case NM_SYSTEM_CONFIG_INTERFACE_PROP_HOSTNAME:
+ hostname = g_value_get_string (value);
+ if (hostname && strlen (hostname) < 1)
+ hostname = NULL;
+ plugin_set_hostname (SC_PLUGIN_KEYFILE (object), hostname);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -313,6 +483,16 @@
g_object_unref (priv->monitor);
}
+ if (priv->conf_file_monitor) {
+ if (priv->conf_file_monitor_id)
+ g_signal_handler_disconnect (priv->conf_file_monitor, priv->conf_file_monitor_id);
+
+ g_file_monitor_cancel (priv->conf_file_monitor);
+ g_object_unref (priv->conf_file_monitor);
+ }
+
+ g_free (priv->hostname);
+
if (priv->hash)
g_hash_table_destroy (priv->hash);
@@ -328,6 +508,7 @@
object_class->dispose = dispose;
object_class->get_property = get_property;
+ object_class->set_property = set_property;
g_object_class_override_property (object_class,
NM_SYSTEM_CONFIG_INTERFACE_PROP_NAME,
@@ -352,6 +533,7 @@
/* interface implementation */
system_config_interface_class->get_connections = get_connections;
system_config_interface_class->add_connection = add_connection;
+ system_config_interface_class->get_unmanaged_devices = get_unmanaged_devices;
}
G_MODULE_EXPORT GObject *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]