[Telepathy-commits] [telepathy-mission-control/master] Unreference invalidated accounts

mardy mardy at 64d1ce6a-1406-0410-9ac8-afed03b27183
Mon Nov 17 00:05:14 PST 2008


Listen to accounts' "invalidated" signal, and remove them from the cache when
it's emitted.

git-svn-id: https://projects.maemo.org/svn/chavo/trunk/framework/open/telepathy-mission-control@20537 64d1ce6a-1406-0410-9ac8-afed03b27183
---
 libmcclient/mc-account-manager.c |   23 ++++++++++++++++++++++-
 1 files changed, 22 insertions(+), 1 deletions(-)

diff --git a/libmcclient/mc-account-manager.c b/libmcclient/mc-account-manager.c
index fe9777d..ff5726a 100644
--- a/libmcclient/mc-account-manager.c
+++ b/libmcclient/mc-account-manager.c
@@ -105,6 +105,25 @@ static McIfaceDescription iface_description = {
 
 
 static void
+on_account_invalidated (McAccount *account,
+			guint domain, gint code, gchar *message,
+			McAccountManager *manager)
+{
+    g_hash_table_remove (manager->priv->accounts, account->name);
+}
+
+static void
+account_cache_remove (gpointer ptr)
+{
+    McAccount *account = MC_ACCOUNT (ptr);
+
+    g_signal_handlers_disconnect_matched (account, G_SIGNAL_MATCH_FUNC,
+					  0, 0, NULL,
+					  on_account_invalidated, NULL);
+    g_object_unref (account);
+}
+
+static void
 ready_with_accounts_data_free (gpointer ptr)
 {
     ReadyWithAccountsData *cb_data = ptr;
@@ -698,7 +717,7 @@ mc_account_manager_get_account (McAccountManager *manager,
     if (G_UNLIKELY (!priv->accounts))
     {
 	priv->accounts = g_hash_table_new_full (g_str_hash, g_str_equal,
-						   NULL, g_object_unref);
+						NULL, account_cache_remove);
     }
     g_return_val_if_fail (priv->accounts != NULL, NULL);
 
@@ -727,6 +746,8 @@ mc_account_manager_get_account (McAccountManager *manager,
 	if (G_LIKELY (account))
 	{
 	    g_hash_table_insert (priv->accounts, account->name, account);
+	    g_signal_connect (account, "invalidated",
+			      G_CALLBACK (on_account_invalidated), manager);
 	}
 	if (object_path != account_name)
 	    g_free ((gchar *)object_path);
-- 
1.5.6.5




More information about the Telepathy-commits mailing list