2 * empathy-account-settings.c - Source for EmpathyAccountSettings
3 * Copyright (C) 2009 Collabora Ltd.
4 * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 #include <telepathy-glib/util.h>
27 #include "empathy-account-settings.h"
28 #include "empathy-account-manager.h"
29 #include "empathy-connection-managers.h"
30 #include "empathy-utils.h"
32 #define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyAccountSettings)
34 G_DEFINE_TYPE(EmpathyAccountSettings, empathy_account_settings, G_TYPE_OBJECT)
43 static guint signals[LAST_SIGNAL] = {0};
54 /* private structure */
55 typedef struct _EmpathyAccountSettingsPriv EmpathyAccountSettingsPriv;
57 struct _EmpathyAccountSettingsPriv
59 gboolean dispose_has_run;
60 EmpathyConnectionManagers *managers;
61 EmpathyAccountManager *account_manager;
62 gulong account_manager_ready_id;
64 TpConnectionManager *manager;
65 const TpConnectionManagerProtocol *tp_protocol;
67 EmpathyAccount *account;
73 GHashTable *parameters;
74 GArray *unset_parameters;
75 GArray *required_params;
77 gulong managers_ready_id;
78 gulong account_ready_id;
80 GSimpleAsyncResult *apply_result;
84 empathy_account_settings_init (EmpathyAccountSettings *obj)
86 EmpathyAccountSettingsPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE ((obj),
87 EMPATHY_TYPE_ACCOUNT_SETTINGS, EmpathyAccountSettingsPriv);
91 /* allocate any data required by the object here */
92 priv->managers = empathy_connection_managers_dup_singleton ();
93 priv->account_manager = empathy_account_manager_dup_singleton ();
95 priv->parameters = tp_asv_new (NULL, NULL);
96 priv->unset_parameters = g_array_new (TRUE, FALSE, sizeof (gchar *));
99 static void empathy_account_settings_dispose (GObject *object);
100 static void empathy_account_settings_finalize (GObject *object);
101 static void empathy_account_settings_ready_cb (GObject *obj,
102 GParamSpec *spec, gpointer user_data);
103 static void empathy_account_settings_check_readyness (
104 EmpathyAccountSettings *self);
107 empathy_account_settings_set_property (GObject *object,
112 EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (object);
113 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
118 priv->account = g_value_dup_object (value);
121 priv->cm_name = g_value_dup_string (value);
124 priv->protocol = g_value_dup_string (value);
126 case PROP_DISPLAY_NAME:
127 priv->display_name = g_value_dup_string (value);
130 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
136 empathy_account_settings_get_property (GObject *object,
141 EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (object);
142 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
147 g_value_set_object (value, priv->account);
150 g_value_set_string (value, priv->cm_name);
153 g_value_set_string (value, priv->protocol);
155 case PROP_DISPLAY_NAME:
156 g_value_set_string (value, priv->display_name);
159 g_value_set_boolean (value, priv->ready);
162 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
168 empathy_account_settings_constructed (GObject *object)
170 EmpathyAccountSettings *self = EMPATHY_ACCOUNT_SETTINGS (object);
171 EmpathyAccountSettingsPriv *priv = GET_PRIV (self);
173 if (priv->account != NULL)
175 g_free (priv->cm_name);
176 g_free (priv->protocol);
177 g_free (priv->display_name);
180 g_strdup (empathy_account_get_connection_manager (priv->account));
182 g_strdup (empathy_account_get_protocol (priv->account));
184 g_strdup (empathy_account_get_display_name (priv->account));
187 g_assert (priv->cm_name != NULL && priv->protocol != NULL
188 && priv->display_name != NULL);
190 empathy_account_settings_check_readyness (self);
194 g_signal_connect (priv->account, "notify::ready",
195 G_CALLBACK (empathy_account_settings_ready_cb), self);
196 g_signal_connect (priv->managers, "notify::ready",
197 G_CALLBACK (empathy_account_settings_ready_cb), self);
201 empathy_account_settings_parent_class)->constructed != NULL)
203 empathy_account_settings_parent_class)->constructed (object);
208 empathy_account_settings_class_init (
209 EmpathyAccountSettingsClass *empathy_account_settings_class)
211 GObjectClass *object_class = G_OBJECT_CLASS (empathy_account_settings_class);
213 g_type_class_add_private (empathy_account_settings_class, sizeof
214 (EmpathyAccountSettingsPriv));
216 object_class->dispose = empathy_account_settings_dispose;
217 object_class->finalize = empathy_account_settings_finalize;
218 object_class->set_property = empathy_account_settings_set_property;
219 object_class->get_property = empathy_account_settings_get_property;
220 object_class->constructed = empathy_account_settings_constructed;
222 g_object_class_install_property (object_class, PROP_ACCOUNT,
223 g_param_spec_object ("account",
225 "The EmpathyAccount backing these settings",
226 EMPATHY_TYPE_ACCOUNT,
227 G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
229 g_object_class_install_property (object_class, PROP_CM_NAME,
230 g_param_spec_string ("connection-manager",
231 "connection-manager",
232 "The name of the connection manager this account uses",
234 G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
236 g_object_class_install_property (object_class, PROP_PROTOCOL,
237 g_param_spec_string ("protocol",
239 "The name of the protocol this account uses",
241 G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
243 g_object_class_install_property (object_class, PROP_DISPLAY_NAME,
244 g_param_spec_string ("display-name",
246 "The display name account these settings belong to",
248 G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
250 g_object_class_install_property (object_class, PROP_READY,
251 g_param_spec_boolean ("ready",
253 "Whether this account is ready to be used",
255 G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
259 empathy_account_settings_dispose (GObject *object)
261 EmpathyAccountSettings *self = EMPATHY_ACCOUNT_SETTINGS (object);
262 EmpathyAccountSettingsPriv *priv = GET_PRIV (self);
264 if (priv->dispose_has_run)
267 priv->dispose_has_run = TRUE;
269 if (priv->managers_ready_id != 0)
270 g_signal_handler_disconnect (priv->managers, priv->managers_ready_id);
271 priv->managers_ready_id = 0;
273 if (priv->managers != NULL)
274 g_object_unref (priv->managers);
275 priv->managers = NULL;
277 if (priv->manager != NULL)
278 g_object_unref (priv->manager);
279 priv->manager = NULL;
281 if (priv->account_manager_ready_id != 0)
282 g_signal_handler_disconnect (priv->account_manager,
283 priv->account_manager_ready_id);
284 priv->account_manager_ready_id = 0;
286 if (priv->account_manager != NULL)
287 g_object_unref (priv->account_manager);
288 priv->account_manager = NULL;
290 if (priv->account_ready_id != 0)
291 g_signal_handler_disconnect (priv->account, priv->account_ready_id);
292 priv->account_ready_id = 0;
294 if (priv->account != NULL)
295 g_object_unref (priv->account);
296 priv->account = NULL;
298 /* release any references held by the object here */
299 if (G_OBJECT_CLASS (empathy_account_settings_parent_class)->dispose)
300 G_OBJECT_CLASS (empathy_account_settings_parent_class)->dispose (object);
304 empathy_account_settings_free_unset_parameters (
305 EmpathyAccountSettings *settings)
307 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
310 for (i = 0 ; i < priv->unset_parameters->len; i++)
311 g_free (g_array_index (priv->unset_parameters, gchar *, i));
313 g_array_set_size (priv->unset_parameters, 0);
317 empathy_account_settings_finalize (GObject *object)
319 EmpathyAccountSettings *self = EMPATHY_ACCOUNT_SETTINGS (object);
320 EmpathyAccountSettingsPriv *priv = GET_PRIV (self);
322 /* free any data held directly by the object here */
323 g_free (priv->cm_name);
324 g_free (priv->protocol);
325 g_free (priv->display_name);
327 g_hash_table_destroy (priv->parameters);
329 empathy_account_settings_free_unset_parameters (self);
330 g_array_free (priv->unset_parameters, TRUE);
332 G_OBJECT_CLASS (empathy_account_settings_parent_class)->finalize (object);
336 empathy_account_settings_check_readyness (EmpathyAccountSettings *self)
338 EmpathyAccountSettingsPriv *priv = GET_PRIV (self);
343 if (priv->account != NULL && !empathy_account_is_ready (priv->account))
346 if (!empathy_connection_managers_is_ready (priv->managers))
349 priv->manager = empathy_connection_managers_get_cm (
350 priv->managers, priv->cm_name);
352 if (priv->manager == NULL)
355 priv->tp_protocol = tp_connection_manager_get_protocol (priv->manager,
358 if (priv->tp_protocol == NULL)
360 priv->manager = NULL;
364 if (priv->required_params == NULL)
366 TpConnectionManagerParam *cur;
369 priv->required_params = g_array_new (TRUE, FALSE, sizeof (gchar *));
371 for (cur = priv->tp_protocol->params; cur->name != NULL; cur++)
373 if (tp_connection_manager_param_is_required (cur))
375 val = g_strdup (cur->name);
376 g_array_append_val (priv->required_params, val);
381 g_object_ref (priv->manager);
384 g_object_notify (G_OBJECT (self), "ready");
388 empathy_account_settings_ready_cb (GObject *obj,
392 EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (user_data);
394 empathy_account_settings_check_readyness (settings);
397 EmpathyAccountSettings *
398 empathy_account_settings_new (const gchar *connection_manager,
399 const gchar *protocol,
400 const char *display_name)
402 return g_object_new (EMPATHY_TYPE_ACCOUNT_SETTINGS,
403 "connection-manager", connection_manager,
404 "protocol", protocol,
405 "display-name", display_name,
409 EmpathyAccountSettings *
410 empathy_account_settings_new_for_account (EmpathyAccount *account)
412 return g_object_new (EMPATHY_TYPE_ACCOUNT_SETTINGS,
417 TpConnectionManagerParam *
418 empathy_account_settings_get_tp_params (EmpathyAccountSettings *settings)
420 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
422 g_return_val_if_fail (priv->tp_protocol != NULL, NULL);
424 return priv->tp_protocol->params;
428 empathy_account_settings_is_ready (EmpathyAccountSettings *settings)
430 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
436 empathy_account_settings_get_cm (EmpathyAccountSettings *settings)
438 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
440 return priv->cm_name;
444 empathy_account_settings_get_protocol (EmpathyAccountSettings *settings)
446 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
448 return priv->protocol;
452 empathy_account_settings_get_icon_name (EmpathyAccountSettings *settings)
454 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
456 if (priv->account != NULL)
457 return g_strdup (empathy_account_get_icon_name (priv->account));
459 if (priv->tp_protocol != NULL)
460 return g_strdup_printf ("im-%s", priv->tp_protocol->name);
466 empathy_account_settings_get_display_name (EmpathyAccountSettings *settings)
468 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
470 return priv->display_name;
474 empathy_account_settings_get_account (EmpathyAccountSettings *settings)
476 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
478 return priv->account;
482 empathy_account_settings_is_unset (EmpathyAccountSettings *settings,
485 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
489 a = priv->unset_parameters;
491 for (i = 0; i < a->len; i++)
493 if (!tp_strdiff (g_array_index (a, gchar *, i), param))
500 static TpConnectionManagerParam *
501 empathy_account_settings_get_tp_param (EmpathyAccountSettings *settings,
504 TpConnectionManagerParam *tp_params =
505 empathy_account_settings_get_tp_params (settings);
506 TpConnectionManagerParam *p;
508 for (p = tp_params; p != NULL && p->name != NULL; p++)
510 if (tp_strdiff (p->name, param))
520 empathy_account_settings_get_default (EmpathyAccountSettings *settings,
523 TpConnectionManagerParam *p;
525 p = empathy_account_settings_get_tp_param (settings, param);
527 if (p == NULL || !(p->flags & TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT))
530 return &(p->default_value);
534 empathy_settings_get_dbus_signature (EmpathyAccountSettings *settings,
537 TpConnectionManagerParam *p;
539 p = empathy_account_settings_get_tp_param (settings, param);
544 return p->dbus_signature;
548 empathy_account_settings_get (EmpathyAccountSettings *settings,
551 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
552 const GValue *result = NULL;
554 /* Lookup the update parameters we set */
555 result = tp_asv_lookup (priv->parameters, param);
559 /* If the parameters isn't unset use the accounts setting if any */
560 if (priv->account != NULL
561 && !empathy_account_settings_is_unset (settings, param))
563 const GHashTable *parameters;
565 parameters = empathy_account_get_parameters (priv->account);
566 result = tp_asv_lookup (parameters, param);
572 /* fallback to the default */
573 return empathy_account_settings_get_default (settings, param);
578 empathy_account_settings_unset (EmpathyAccountSettings *settings,
581 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
583 if (empathy_account_settings_is_unset (settings, param))
586 v = g_strdup (param);
588 g_array_append_val (priv->unset_parameters, v);
589 g_hash_table_remove (priv->parameters, param);
593 empathy_account_settings_get_string (EmpathyAccountSettings *settings,
598 v = empathy_account_settings_get (settings, param);
600 if (v == NULL || !G_VALUE_HOLDS_STRING (v))
603 return g_value_get_string (v);
607 empathy_account_settings_get_int32 (EmpathyAccountSettings *settings,
613 v = empathy_account_settings_get (settings, param);
618 switch G_VALUE_TYPE (v)
621 ret = g_value_get_uchar (v);
624 ret = g_value_get_int (v);
627 ret = CLAMP (G_MININT32, g_value_get_uint (v), G_MAXINT32);
630 ret = CLAMP (G_MININT32, g_value_get_int64 (v), G_MAXINT32);
633 ret = CLAMP (G_MININT32, g_value_get_uint64 (v), G_MAXINT32);
644 empathy_account_settings_get_int64 (EmpathyAccountSettings *settings,
650 v = empathy_account_settings_get (settings, param);
654 switch G_VALUE_TYPE (v)
657 ret = g_value_get_uchar (v);
660 ret = g_value_get_int (v);
663 ret = g_value_get_uint (v);
666 ret = g_value_get_int64 (v);
669 ret = CLAMP (G_MININT64, g_value_get_uint64 (v), G_MAXINT64);
680 empathy_account_settings_get_uint32 (EmpathyAccountSettings *settings,
686 v = empathy_account_settings_get (settings, param);
688 switch G_VALUE_TYPE (v)
691 ret = g_value_get_uchar (v);
694 ret = MAX (0, g_value_get_int (v));
697 ret = g_value_get_uint (v);
700 ret = CLAMP (0, g_value_get_int64 (v), G_MAXUINT32);
703 ret = CLAMP (0, g_value_get_uint64 (v), G_MAXUINT32);
714 empathy_account_settings_get_uint64 (EmpathyAccountSettings *settings,
720 v = empathy_account_settings_get (settings, param);
722 if (v == NULL || !G_VALUE_HOLDS_INT (v))
725 switch G_VALUE_TYPE (v)
728 ret = g_value_get_uchar (v);
731 ret = MAX (0, g_value_get_int (v));
734 ret = g_value_get_uint (v);
737 ret = MAX (0, g_value_get_int64 (v));
740 ret = CLAMP (0, g_value_get_uint64 (v), G_MAXUINT64);
751 empathy_account_settings_get_boolean (EmpathyAccountSettings *settings,
756 v = empathy_account_settings_get (settings, param);
758 if (v == NULL || !G_VALUE_HOLDS_BOOLEAN (v))
761 return g_value_get_boolean (v);
765 empathy_account_settings_set_string (EmpathyAccountSettings *settings,
769 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
771 tp_asv_set_string (priv->parameters, param, value);
775 empathy_account_settings_set_int32 (EmpathyAccountSettings *settings,
779 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
781 tp_asv_set_int32 (priv->parameters, param, value);
785 empathy_account_settings_set_int64 (EmpathyAccountSettings *settings,
789 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
791 tp_asv_set_int64 (priv->parameters, param, value);
795 empathy_account_settings_set_uint32 (EmpathyAccountSettings *settings,
799 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
801 tp_asv_set_uint32 (priv->parameters, param, value);
805 empathy_account_settings_set_uint64 (EmpathyAccountSettings *settings,
809 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
811 tp_asv_set_uint64 (priv->parameters, param, value);
815 empathy_account_settings_set_boolean (EmpathyAccountSettings *settings,
819 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
821 tp_asv_set_boolean (priv->parameters, param, value);
825 account_settings_display_name_set_cb (GObject *src,
829 GError *error = NULL;
830 EmpathyAccount *account = EMPATHY_ACCOUNT (src);
831 GSimpleAsyncResult *set_result = user_data;
833 empathy_account_set_display_name_finish (account, res, &error);
837 g_simple_async_result_set_from_error (set_result, error);
838 g_error_free (error);
841 g_simple_async_result_complete (set_result);
842 g_object_unref (set_result);
846 empathy_account_settings_set_display_name_async (
847 EmpathyAccountSettings *settings,
849 GAsyncReadyCallback callback,
852 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
853 GSimpleAsyncResult *result;
855 result = g_simple_async_result_new (G_OBJECT (settings),
856 callback, user_data, empathy_account_settings_set_display_name_finish);
858 if (priv->account == NULL)
860 if (priv->display_name != NULL)
861 g_free (priv->display_name);
863 priv->display_name = g_strdup (name);
865 g_simple_async_result_complete_in_idle (result);
870 empathy_account_set_display_name_async (priv->account, name,
871 account_settings_display_name_set_cb, result);
875 empathy_account_settings_set_display_name_finish (
876 EmpathyAccountSettings *settings,
877 GAsyncResult *result,
880 if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result),
884 g_return_val_if_fail (g_simple_async_result_is_valid (result,
885 G_OBJECT (settings), empathy_account_settings_set_display_name_finish), FALSE);
891 empathy_account_settings_account_updated (GObject *source,
892 GAsyncResult *result,
895 EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (user_data);
896 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
897 GSimpleAsyncResult *r;
898 GError *error = NULL;
900 if (!empathy_account_update_settings_finish (EMPATHY_ACCOUNT (source),
903 g_simple_async_result_set_from_error (priv->apply_result, error);
904 g_error_free (error);
907 r = priv->apply_result;
908 priv->apply_result = NULL;
910 g_simple_async_result_complete (r);
915 empathy_account_settings_created_cb (GObject *source,
916 GAsyncResult *result,
919 EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (user_data);
920 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
921 EmpathyAccount *account;
922 GError *error = NULL;
923 GSimpleAsyncResult *r;
925 account = empathy_account_manager_create_account_finish (
926 EMPATHY_ACCOUNT_MANAGER (source), result, &error);
930 g_simple_async_result_set_from_error (priv->apply_result, error);
934 priv->account = g_object_ref (account);
937 r = priv->apply_result;
938 priv->apply_result = NULL;
940 g_simple_async_result_complete (r);
946 empathy_account_settings_do_create_account (EmpathyAccountSettings *settings)
948 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
949 GHashTable *properties;
951 properties = g_hash_table_new (NULL, NULL);
953 empathy_account_manager_create_account_async (priv->account_manager,
954 priv->cm_name, priv->protocol, priv->display_name,
955 priv->parameters, properties,
956 empathy_account_settings_created_cb,
959 g_hash_table_unref (properties);
963 empathy_account_settings_manager_ready_cb (EmpathyAccountManager *manager,
967 EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (user_data);
968 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
970 if (empathy_account_manager_is_ready (manager))
972 g_assert (priv->apply_result != NULL && priv->account == NULL);
973 g_signal_handler_disconnect (priv->account_manager,
974 priv->account_manager_ready_id);
975 priv->account_manager_ready_id = 0;
977 empathy_account_settings_do_create_account (settings);
982 empathy_account_settings_apply_async (EmpathyAccountSettings *settings,
983 GAsyncReadyCallback callback,
986 EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
988 if (priv->apply_result != NULL)
990 g_simple_async_report_error_in_idle (G_OBJECT (settings),
992 G_IO_ERROR, G_IO_ERROR_PENDING, "Applying already in progress");
996 priv->apply_result = g_simple_async_result_new (G_OBJECT (settings),
997 callback, user_data, empathy_account_settings_apply_finish);
999 if (priv->account == NULL)
1001 if (empathy_account_manager_is_ready (priv->account_manager))
1002 empathy_account_settings_do_create_account (settings);
1004 priv->account_manager_ready_id = g_signal_connect (
1005 priv->account_manager,
1007 G_CALLBACK (empathy_account_settings_manager_ready_cb),
1012 empathy_account_update_settings_async (priv->account,
1013 priv->parameters, (const gchar **)priv->unset_parameters->data,
1014 empathy_account_settings_account_updated, settings);
1016 g_hash_table_remove_all (priv->parameters);
1017 empathy_account_settings_free_unset_parameters (settings);
1022 empathy_account_settings_apply_finish (EmpathyAccountSettings *settings,
1023 GAsyncResult *result,
1026 if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result),
1030 g_return_val_if_fail (g_simple_async_result_is_valid (result,
1031 G_OBJECT (settings), empathy_account_settings_apply_finish), FALSE);
1037 empathy_account_settings_has_account (EmpathyAccountSettings *settings,
1038 EmpathyAccount *account)
1040 EmpathyAccountSettingsPriv *priv;
1042 g_return_val_if_fail (EMPATHY_IS_ACCOUNT_SETTINGS (settings), FALSE);
1043 g_return_val_if_fail (EMPATHY_IS_ACCOUNT (account), FALSE);
1045 priv = GET_PRIV (settings);
1047 return (account == priv->account);
1051 empathy_account_settings_is_valid (EmpathyAccountSettings *settings)
1053 EmpathyAccountSettingsPriv *priv;
1056 gboolean missed = FALSE;
1058 g_return_val_if_fail (EMPATHY_IS_ACCOUNT_SETTINGS (settings), FALSE);
1060 priv = GET_PRIV (settings);
1062 for (idx = 0; idx < priv->required_params->len; idx++)
1064 current = g_array_index (priv->required_params, gchar *, idx);
1066 /* first, look if it's set in our own parameters */
1067 if (tp_asv_lookup (priv->parameters, current))
1070 /* if we did not unset the parameter, look if it's in the account */
1071 if (priv->account != NULL &&
1072 !empathy_account_settings_is_unset (settings, current))
1074 const GHashTable *account_params;
1076 account_params = empathy_account_get_parameters (priv->account);
1077 if (tp_asv_lookup (account_params, current))