[Telepathy-commits] [telepathy-mission-control/master] Add mcd_account_set_parameter()

Alberto Mardegan alberto.mardegan at nokia.com
Fri Dec 5 04:02:04 PST 2008


---
 src/mcd-account.c |   42 +++++++++++++++++++++++++++++-------------
 src/mcd-account.h |    2 ++
 2 files changed, 31 insertions(+), 13 deletions(-)

diff --git a/src/mcd-account.c b/src/mcd-account.c
index bc18d29..776d557 100644
--- a/src/mcd-account.c
+++ b/src/mcd-account.c
@@ -1072,16 +1072,31 @@ mcd_account_check_parameters (McdAccount *account)
     return valid;
 }
 
-static void
-set_parameter (gpointer ht_key, gpointer ht_value, gpointer userdata)
+/**
+ * mcd_account_set_parameter:
+ * @account: the #McdAccount.
+ * @name: the parameter name.
+ * @value: a #GValue with the value to set, or %NULL.
+ *
+ * Sets the parameter @name to the value in @value. If @value, is %NULL, the
+ * parameter is unset.
+ */
+void
+mcd_account_set_parameter (McdAccount *account, const gchar *name,
+                           const GValue *value)
 {
-    McdAccountPrivate *priv = userdata;
-    const gchar *name = ht_key;
-    const GValue *value = ht_value;
+    McdAccountPrivate *priv = account->priv;
     gchar key[MAX_KEY_LENGTH];
 
     g_snprintf (key, sizeof (key), "param-%s", name);
 
+    if (!value)
+    {
+        g_key_file_remove_key (priv->keyfile, priv->unique_name, key, NULL);
+        g_debug ("unset param %s", name);
+        return;
+    }
+
     switch (G_VALUE_TYPE (value))
     {
     case G_TYPE_STRING:
@@ -1111,8 +1126,10 @@ mcd_account_set_parameters (McdAccount *account, GHashTable *params,
 {
     McdAccountPrivate *priv = account->priv;
     const GArray *parameters;
-    GValue *value;
     guint i, n_params = 0;
+    GHashTableIter iter;
+    const gchar *name;
+    const GValue *value;
 
     g_debug ("%s called", G_STRFUNC);
     if (!priv->manager && !load_manager (priv)) return FALSE;
@@ -1150,23 +1167,22 @@ mcd_account_set_parameters (McdAccount *account, GHashTable *params,
 	return FALSE;
     }
 
-    g_hash_table_foreach (params, set_parameter, priv);
+    g_hash_table_iter_init (&iter, params);
+    while (g_hash_table_iter_next (&iter, (gpointer)&name, (gpointer)&value))
+    {
+        mcd_account_set_parameter (account, name, value);
+    }
     return TRUE;
 }
 
 static inline void
 mcd_account_unset_parameters (McdAccount *account, const gchar **params)
 {
-    McdAccountPrivate *priv = account->priv;
     const gchar **param;
-    gchar key[MAX_KEY_LENGTH];
 
     for (param = params; *param != NULL; param++)
     {
-	g_snprintf (key, sizeof (key), "param-%s", *param);
-	g_key_file_remove_key (priv->keyfile, priv->unique_name,
-			       key, NULL);
-	g_debug ("unset param %s", *param);
+        mcd_account_set_parameter (account, *param, NULL);
     }
 }
 
diff --git a/src/mcd-account.h b/src/mcd-account.h
index 416e866..e2297cf 100644
--- a/src/mcd-account.h
+++ b/src/mcd-account.h
@@ -89,6 +89,8 @@ gboolean mcd_account_set_parameters (McdAccount *account, GHashTable *params,
 				     GError **error);
 GHashTable *mcd_account_get_parameters (McdAccount *account);
 gboolean mcd_account_check_parameters (McdAccount *account);
+void mcd_account_set_parameter (McdAccount *account, const gchar *name,
+                                const GValue *value);
 gboolean mcd_account_get_parameter (McdAccount *account, const gchar *name,
                                     GValue *value);
 
-- 
1.5.6.5




More information about the Telepathy-commits mailing list