[telepathy-mission-control/master] mcd-account-manager: add initial version of write_conf_async

Jonny Lamb jonny.lamb at collabora.co.uk
Mon Sep 14 11:09:10 PDT 2009


Signed-off-by: Jonny Lamb <jonny.lamb at collabora.co.uk>
---
 src/mcd-account-manager.c |   58 +++++++++++++++++++++++++++++++++++++++++++++
 src/mcd-account-manager.h |    8 ++++++
 2 files changed, 66 insertions(+), 0 deletions(-)

diff --git a/src/mcd-account-manager.c b/src/mcd-account-manager.c
index 49cd97b..88d642a 100644
--- a/src/mcd-account-manager.c
+++ b/src/mcd-account-manager.c
@@ -1094,6 +1094,64 @@ mcd_account_manager_write_conf (McdAccountManager *account_manager)
                                 account_manager->priv->keyfile, NULL);
 }
 
+/**
+ * McdAccountManagerWriteConfCb:
+ * @account_manager: the #McdAccountManager
+ * @error: a set #GError on failure or %NULL if there was no error
+ * @user_data: user data
+ *
+ * The callback from mcd_account_manager_write_conf_async(). If the config
+ * writing was successful, @error will be %NULL, otherwise it will be set
+ * with the appropriate error.
+ */
+
+/**
+ * mcd_account_manager_write_conf_async:
+ * @account_manager: the #McdAccountManager
+ * @callback: a callback to be called on write success or failure
+ * @user_data: data to be passed to @callback
+ *
+ * Write the account manager configuration to disk. This is an asynchronous
+ * version of mcd_account_manager_write_conf() and should always used in favour
+ * of its synchronous version.
+ */
+void
+mcd_account_manager_write_conf_async (McdAccountManager *account_manager,
+                                      McdAccountManagerWriteConfCb callback,
+                                      gpointer user_data)
+{
+    GKeyFile *keyfile;
+    GError *error = NULL;
+    gchar *filename, *data;
+    gsize len;
+
+    g_return_if_fail (MCD_IS_ACCOUNT_MANAGER (account_manager));
+
+    keyfile = account_manager->priv->keyfile;
+
+    DEBUG ("called");
+
+    data = g_key_file_to_data (keyfile, &len, &error);
+
+    if (error == NULL)
+    {
+        filename = get_account_conf_filename ();
+        _mcd_file_set_contents (filename, data, len, &error);
+        g_free (filename);
+        g_free (data);
+    }
+
+    if (callback != NULL)
+    {
+        callback (account_manager, error, user_data);
+    }
+
+    if (error != NULL)
+    {
+        g_error_free (error);
+    }
+}
+
 GHashTable *
 _mcd_account_manager_get_accounts (McdAccountManager *account_manager)
 {
diff --git a/src/mcd-account-manager.h b/src/mcd-account-manager.h
index d5b703e..c06e624 100644
--- a/src/mcd-account-manager.h
+++ b/src/mcd-account-manager.h
@@ -77,6 +77,14 @@ TpDBusDaemon *mcd_account_manager_get_dbus_daemon
 GKeyFile *mcd_account_manager_get_config (McdAccountManager *account_manager);
 void mcd_account_manager_write_conf (McdAccountManager *account_manager);
 
+typedef void (McdAccountManagerWriteConfCb) (McdAccountManager *account_manager,
+                                             const GError *error,
+                                             gpointer user_data);
+
+void mcd_account_manager_write_conf_async (McdAccountManager *account_manager,
+                                           McdAccountManagerWriteConfCb callback,
+                                           gpointer user_data);
+
 McdAccount *mcd_account_manager_lookup_account (McdAccountManager *account_manager,
 						const gchar *name);
 McdAccount *mcd_account_manager_lookup_account_by_path (McdAccountManager *account_manager,
-- 
1.5.6.5




More information about the telepathy-commits mailing list