[empathy] account-settings: allow to change the service



commit 2a7fa12bcf9c0ee5a9ff506bc88af2194990dabc
Author: Guillaume Desmottes <guillaume desmottes collabora co uk>
Date:   Fri Jan 13 14:56:41 2012 +0100

    account-settings: allow to change the service
    
    https://bugzilla.gnome.org/show_bug.cgi?id=667791

 libempathy/empathy-account-settings.c |   44 +++++++++++++++++++++++++++++++++
 libempathy/empathy-account-settings.h |    3 ++
 2 files changed, 47 insertions(+), 0 deletions(-)
---
diff --git a/libempathy/empathy-account-settings.c b/libempathy/empathy-account-settings.c
index 78d6096..cf269bd 100644
--- a/libempathy/empathy-account-settings.c
+++ b/libempathy/empathy-account-settings.c
@@ -103,6 +103,8 @@ struct _EmpathyAccountSettingsPriv
   /* If TRUE, the account should have 'tel' in its
    * Account.Interface.Addressing.URISchemes property. */
   gboolean uri_scheme_tel;
+  /* If TRUE, Service property needs to be updated when applying changes */
+  gboolean update_service;
 
   GSimpleAsyncResult *apply_result;
 };
@@ -743,6 +745,21 @@ empathy_account_settings_get_service (EmpathyAccountSettings *settings)
   return priv->service;
 }
 
+void
+empathy_account_settings_set_service (EmpathyAccountSettings *settings,
+    const gchar *service)
+{
+  EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
+
+  if (!tp_strdiff (priv->service, service))
+    return;
+
+  g_free (priv->service);
+  priv->service = g_strdup (service);
+  g_object_notify (G_OBJECT (settings), "service");
+  priv->update_service = TRUE;
+}
+
 gchar *
 empathy_account_settings_get_icon_name (EmpathyAccountSettings *settings)
 {
@@ -1446,6 +1463,32 @@ update_account_uri_schemes (EmpathyAccountSettings *self)
 }
 
 static void
+set_service_cb (GObject *source,
+    GAsyncResult *result,
+    gpointer user_data)
+{
+  GError *error = NULL;
+
+  if (!tp_account_set_service_finish (TP_ACCOUNT (source), result, &error))
+    {
+      DEBUG ("Failed to set Account.Service: %s", error->message);
+      g_error_free (error);
+    }
+}
+
+static void
+update_account_service (EmpathyAccountSettings *self)
+{
+  EmpathyAccountSettingsPriv *priv = GET_PRIV (self);
+
+  if (!priv->update_service)
+    return;
+
+  tp_account_set_service_async (priv->account,
+      priv->service != NULL ? priv->service : "", set_service_cb, self);
+}
+
+static void
 empathy_account_settings_account_updated (GObject *source,
     GAsyncResult *result,
     gpointer user_data)
@@ -1486,6 +1529,7 @@ empathy_account_settings_account_updated (GObject *source,
     }
 
   update_account_uri_schemes (settings);
+  update_account_service (settings);
 
   g_simple_async_result_set_op_res_gboolean (priv->apply_result,
       g_strv_length (reconnect_required) > 0);
diff --git a/libempathy/empathy-account-settings.h b/libempathy/empathy-account-settings.h
index ea0c5b0..10ed368 100644
--- a/libempathy/empathy-account-settings.h
+++ b/libempathy/empathy-account-settings.h
@@ -78,6 +78,9 @@ const gchar *empathy_account_settings_get_protocol (
 const gchar *empathy_account_settings_get_service (
     EmpathyAccountSettings *settings);
 
+void empathy_account_settings_set_service (EmpathyAccountSettings *settings,
+    const gchar *service);
+
 TpAccount *empathy_account_settings_get_account (
     EmpathyAccountSettings *settings);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]