diff options
-rw-r--r-- | libempathy/empathy-account-manager.c | 66 |
1 files changed, 31 insertions, 35 deletions
diff --git a/libempathy/empathy-account-manager.c b/libempathy/empathy-account-manager.c index c343a1673..2d20cc071 100644 --- a/libempathy/empathy-account-manager.c +++ b/libempathy/empathy-account-manager.c @@ -40,7 +40,7 @@ typedef struct { typedef struct { McPresence presence; - TpConnectionStatus connection; + TpConnectionStatus status; gboolean is_enabled; guint source_id; @@ -64,14 +64,14 @@ G_DEFINE_TYPE (EmpathyAccountManager, empathy_account_manager, G_TYPE_OBJECT); static AccountData * account_data_new (McPresence presence, - TpConnectionStatus connection, + TpConnectionStatus status, gboolean is_enabled) { AccountData *retval; retval = g_slice_new0 (AccountData); retval->presence = presence; - retval->connection = connection; + retval->status = status; retval->is_enabled = is_enabled; retval->source_id = 0; @@ -123,6 +123,7 @@ account_created_cb (McAccountMonitor *mon, { McAccount *account; EmpathyAccountManagerPriv *priv = GET_PRIV (manager); + guint initial_status; account = mc_account_lookup (account_name); @@ -132,6 +133,14 @@ account_created_cb (McAccountMonitor *mon, data = account_data_new_default (priv->mc, account); + initial_status = mission_control_get_connection_status (priv->mc, + account, NULL); + + if (initial_status == TP_CONNECTION_STATUS_CONNECTED) + priv->connected++; + else if (initial_status == TP_CONNECTION_STATUS_CONNECTING) + priv->connecting++; + /* the reference returned by mc_account_lookup is owned by the * hash table. */ @@ -222,31 +231,31 @@ account_enabled_cb (McAccountMonitor *mon, static void update_connection_numbers (EmpathyAccountManager *manager, - TpConnectionStatus conn, - TpConnectionStatus old_c) + TpConnectionStatus status, + TpConnectionStatus old_s) { EmpathyAccountManagerPriv *priv = GET_PRIV (manager); - if (conn == TP_CONNECTION_STATUS_CONNECTED) + if (status == TP_CONNECTION_STATUS_CONNECTED) { priv->connected++; - if (old_c == TP_CONNECTION_STATUS_CONNECTING) + if (old_s == TP_CONNECTION_STATUS_CONNECTING) priv->connecting--; } - if (conn == TP_CONNECTION_STATUS_CONNECTING) + if (status == TP_CONNECTION_STATUS_CONNECTING) { priv->connecting++; - if (old_c == TP_CONNECTION_STATUS_CONNECTED) + if (old_s == TP_CONNECTION_STATUS_CONNECTED) priv->connected--; } - if (conn == TP_CONNECTION_STATUS_DISCONNECTED) + if (status == TP_CONNECTION_STATUS_DISCONNECTED) { - if (old_c == TP_CONNECTION_STATUS_CONNECTED) + if (old_s == TP_CONNECTION_STATUS_CONNECTED) priv->connected--; - if (old_c == TP_CONNECTION_STATUS_CONNECTING) + if (old_s == TP_CONNECTION_STATUS_CONNECTING) priv->connecting--; } } @@ -263,7 +272,7 @@ remove_data_timeout (gpointer _data) static void account_status_changed_cb (MissionControl *mc, - TpConnectionStatus connection, + TpConnectionStatus status, McPresence presence, TpConnectionStatusReason reason, const gchar *unique_name, @@ -273,7 +282,7 @@ account_status_changed_cb (MissionControl *mc, EmpathyAccountManagerPriv *priv = GET_PRIV (manager); AccountData *data; McPresence old_p; - TpConnectionStatus old_c; + TpConnectionStatus old_s; gboolean emit_presence = FALSE, emit_connection = FALSE; account = mc_account_lookup (unique_name); @@ -284,7 +293,7 @@ account_status_changed_cb (MissionControl *mc, g_assert (data); old_p = data->presence; - old_c = data->connection; + old_s = data->status; if (old_p != presence) { @@ -292,13 +301,12 @@ account_status_changed_cb (MissionControl *mc, emit_presence = TRUE; } - if (old_c != connection) + if (old_s != status) { - data->connection = connection; - update_connection_numbers (manager, connection, old_c); + data->status = status; + update_connection_numbers (manager, status, old_s); - if (old_c == TP_CONNECTION_STATUS_CONNECTING && - connection == TP_CONNECTION_STATUS_CONNECTED) + if (status == TP_CONNECTION_STATUS_CONNECTED) { if (data->source_id > 0) { g_source_remove (data->source_id); @@ -318,7 +326,7 @@ account_status_changed_cb (MissionControl *mc, if (emit_connection) g_signal_emit (manager, signals[ACCOUNT_CONNECTION_CHANGED], 0, - account, reason, connection, old_c); + account, reason, status, old_s); g_object_unref (account); } @@ -331,7 +339,6 @@ empathy_account_manager_init (EmpathyAccountManager *manager) G_TYPE_INSTANCE_GET_PRIVATE (manager, EMPATHY_TYPE_ACCOUNT_MANAGER, EmpathyAccountManagerPriv); GList *mc_accounts, *l; - guint initial_connection; AccountData *data; manager->priv = priv; @@ -351,18 +358,7 @@ empathy_account_manager_init (EmpathyAccountManager *manager) { data = account_data_new_default (priv->mc, l->data); - initial_connection = mission_control_get_connection_status (priv->mc, - l->data, NULL); - if (initial_connection == TP_CONNECTION_STATUS_CONNECTED) { - priv->connected++; - } else if (initial_connection == TP_CONNECTION_STATUS_CONNECTING) { - priv->connecting++; - } - - /* no need to g_object_ref () the account here, as mc_accounts_list () - * already increases the refcount. - */ - g_hash_table_insert (priv->accounts, l->data, data); + account_created_cb (priv->monitor, (char *) mc_account_get_unique_name (l->data), manager); } g_signal_connect (priv->monitor, "account-created", @@ -380,7 +376,7 @@ empathy_account_manager_init (EmpathyAccountManager *manager) G_CALLBACK (account_status_changed_cb), manager, NULL); - g_list_free (mc_accounts); + mc_accounts_list_free (mc_accounts); } static void |