]> git.0d.be Git - empathy.git/commitdiff
Make the account manager listen to AccountValidityChanged
authorSjoerd Simons <sjoerd.simons@collabora.co.uk>
Tue, 21 Jul 2009 17:45:20 +0000 (18:45 +0100)
committerSjoerd Simons <sjoerd.simons@collabora.co.uk>
Tue, 21 Jul 2009 17:45:20 +0000 (18:45 +0100)
libempathy/empathy-account-manager.c

index 7df1a80b7d550bdc6f0828b0825ac1009ecb646d..5d1363fcecc692ab397aeef848c26317806a6d84 100644 (file)
@@ -282,6 +282,10 @@ account_manager_add_account (EmpathyAccountManager *manager,
   EmpathyAccountManagerPriv *priv = GET_PRIV (manager);
   EmpathyAccount *account;
 
   EmpathyAccountManagerPriv *priv = GET_PRIV (manager);
   EmpathyAccount *account;
 
+  account = g_hash_table_lookup (priv->accounts, path);
+  if (account != NULL)
+    return account;
+
   account = empathy_account_new (priv->dbus, path);
   g_hash_table_insert (priv->accounts, g_strdup (path), account);
 
   account = empathy_account_new (priv->dbus, path);
   g_hash_table_insert (priv->accounts, g_strdup (path), account);
 
@@ -321,6 +325,21 @@ account_manager_got_all_cb (TpProxy *proxy,
   empathy_account_manager_check_ready (manager);
 }
 
   empathy_account_manager_check_ready (manager);
 }
 
+static void
+account_validity_changed_cb (TpAccountManager *proxy,
+    const gchar *path,
+    gboolean valid,
+    gpointer user_data,
+    GObject *weak_object)
+{
+  EmpathyAccountManager *manager = EMPATHY_ACCOUNT_MANAGER (weak_object);
+
+  if (!valid)
+    return;
+
+  account_manager_add_account (manager, path);
+}
+
 static void
 account_manager_name_owner_cb (TpDBusDaemon *proxy,
     const gchar *name,
 static void
 account_manager_name_owner_cb (TpDBusDaemon *proxy,
     const gchar *name,
@@ -334,6 +353,15 @@ account_manager_name_owner_cb (TpDBusDaemon *proxy,
     account_manager_name_owner_cb, user_data);
 
   priv->tp_manager = tp_account_manager_new (priv->dbus);
     account_manager_name_owner_cb, user_data);
 
   priv->tp_manager = tp_account_manager_new (priv->dbus);
+
+  tp_cli_account_manager_connect_to_account_validity_changed (
+      priv->tp_manager,
+      account_validity_changed_cb,
+      NULL,
+      NULL,
+      G_OBJECT (manager),
+      NULL);
+
   tp_cli_dbus_properties_call_get_all (priv->tp_manager, -1,
     TP_IFACE_ACCOUNT_MANAGER,
     account_manager_got_all_cb,
   tp_cli_dbus_properties_call_get_all (priv->tp_manager, -1,
     TP_IFACE_ACCOUNT_MANAGER,
     account_manager_got_all_cb,
@@ -795,8 +823,11 @@ empathy_account_manager_created_cb (TpAccountManager *proxy,
     }
 
   account = account_manager_add_account (manager, account_path);
     }
 
   account = account_manager_add_account (manager, account_path);
-  g_signal_connect (account, "notify::ready",
-    G_CALLBACK (empathy_account_manager_created_ready_cb), result);
+  if (empathy_account_is_ready (account))
+    empathy_account_manager_created_ready_cb (account, NULL, result);
+  else
+    g_signal_connect (account, "notify::ready",
+      G_CALLBACK (empathy_account_manager_created_ready_cb), result);
 }
 
 void
 }
 
 void