From 2a7fa12bcf9c0ee5a9ff506bc88af2194990dabc Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Fri, 13 Jan 2012 14:56:41 +0100 Subject: [PATCH] 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(+) diff --git a/libempathy/empathy-account-settings.c b/libempathy/empathy-account-settings.c index 78d60968..cf269bdc 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) { @@ -1445,6 +1462,32 @@ update_account_uri_schemes (EmpathyAccountSettings *self) priv->uri_scheme_tel, NULL, NULL); } +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, @@ -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 ea0c5b04..10ed3684 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); -- 2.39.2